[英]Have a .bat script recognise if i'm in cmd.exe or powershell?
[英]Can i run a exe with cmd or powershell if i have spaces in username?
前任:
cmd /C start C:\Users\Bob Builder\Desktop\New Folder\test.exe
我正在嘗試使用 cmd 啟動文件,但由於路徑中有空格,因此 cmd 在 Bob 之后拋出錯誤。
錯誤:
“Windows 找不到 C:\\Users\\Bob。請確保您輸入的名稱正確無誤,然后重試。”
系統找不到文件 C:\\Users\\Bob。
它只是無法接受空格。 這讓我發瘋了,因為我被 C# 開箱即用的工作寵壞了。 我對此知之甚少,我花了太多時間試圖弄清楚這一點。 一些幫助將不勝感激。
cmd /C start "C:\\Users\\Bob Builder\\Desktop\\New Folder\\test.exe"
報價是你的朋友。 有時甚至雙引號也是如此!
為了將包含空格的路徑識別為單個路徑(參數),它必須被引用。
為了使可執行以在當前控制台窗口執行,同步地,與它的流連接至主叫殼,它必須直接不通過調用start
。
從cmd.exe
直接調用(僅支持"..."
引用):
"C:\Users\Bob Builder\Desktop\New Folder\test.exe"
來自 PowerShell:
& 'C:\Users\Bob Builder\Desktop\New Folder\test.exe'
筆記:
PowerShell 還支持'...'
字符串(單引號),如果您不需要擴展變量(字符串插值),它們是比"..."
(雙引號)字符串更可取的逐字字符串 - 請參閱概念about_Quoting_Rules幫助主題。
出於語法原因,PowerShell 需要使用&
調用運算符來調用被引用和/或包含變量引用的命令- 有關詳細信息,請參閱此答案。
相比之下,使用start
in cmd.exe
/ Start-Process
in PowerShell (其內置別名也是start
)在新窗口(在 Windows 上)中異步啟動可執行文件,沒有(直接)捕獲啟動的能力可執行文件的輸出:
從cmd.exe
:
start "title" "C:\Users\Bob Builder\Desktop\New Folder\test.exe"
筆記:
在這種情況下,出於語法原因,需要指定"title"
——即自行選擇的(控制台)窗口標題:沒有它,雙引號路徑本身將被解釋為窗口標題,並且 - 隱含 - 可執行以啟動將是另一個cmd.exe
實例。
請注意,如果您以這種方式啟動GUI應用程序,則 title 參數無關緊要,因為不會創建新的控制台窗口。
相反,如果您啟動由雙引號路徑指定的控制台應用程序,因此必須使用標題參數,請注意""
將導致新窗口沒有標題。
來自 PowerShell(參數-FilePath
是位置隱含的):
Start-Process 'C:\Users\Bob Builder\Desktop\New Folder\test.exe'
筆記:
Start-Process
不支持指定窗口標題,所以你可能需要調用cmd.exe
的內部start
該命令(或不被支持的其他功能Start-Process
,如指定進程的優先級)。
要解決引用問題,請通過將整個start
命令作為單個字符串傳遞給cmd /c
來從 PowerShell 調用cmd.exe
的start
:
cmd /c 'start "title" "C:\\Users\\Bob Builder\\Desktop\\New Folder\\test.exe"'
好像 cmd 對我不起作用。 Powershell 使用此腳本:
$env:Path += ";C:\Users\Bob Builder\Desktop\New Folder\"
test.exe
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.