我使用 PowerShell 命令從我的云中下載了一個 zip 檔案。該命令在 PowerShell 和命令列中正常作業。但是,如果我將命令列中的命令插入到批處理腳本中,則只會下載 html。為什么該命令在命令列中可以正常作業,但在批處理檔案中卻不能?我沒有想法:D
powershell Invoke-WebRequest """https://sync.luckycloud.de/d/fb56e4a8239a4c6cac7a/files/?p=/ValheimServer Buddelkiste Modpack v3.4 - Standart.zip&dl=1""" -OutFile """C:\Users\Anonymos\Downloads\servermodpack.zip"""
它在 cmd 中作業正常并加載~40 Mb。但在批處理中它只加載 9kb(它的 Html)
uj5u.com熱心網友回復:
在批處理檔案中 - 與互動式 cmd.exe命令提示符[1]不同-您需要轉義 %字符。為了%%從字面上傳遞它們:
powershell -c "Invoke-WebRequest 'https://sync.luckycloud.de/d/fb56e4a8239a4c6cac7a/files/?p=%/ValheimServer% Buddelkiste% Modpack% v3.4% -% Standart.zip&dl=1' -OutFile C:\Users\Anonymos\Downloads\servermodpack.zip"
筆記:
為了概念清晰起見,我使用了
-c(-Command),顯式位置隱含的Windows PowerShell CLI ( ) 引數(在PowerShell (Core) 7 中,其 CLI 為,現在默認為( ))。powershell.exepwsh-f-File此外,通常最好將整個命令列包含在其中以傳遞給 PowerShell,以防止(例如)以外的元字符引起問題。
"..."cmd.exe%&- 如果命令列需要使用嵌入
"字符(上面的解決方案通過使用嵌入'...'參考來避免這種情況),最安全的轉義方法是使用"^""(sic) withpowershell.exe和""withpwsh.exe- 有關詳細資訊,請參閱此答案。
- 如果命令列需要使用嵌入
[1] 在互動使用中,%從技術上講,字符不能被轉義,但它們會按原樣保留,除非它們是參考現有環境變數的cmd.exe-style環境變數參考的一部分,例如%OS%. 但是,%即使在這種情況下,也有按字面意思處理的方法,如本答案中所述。這些技術對于從外部以編程cmd.exe方式呼叫命令列非常重要,例如從 Node.Js 或 Python,因為這種編程呼叫(也許令人驚訝)使用互動式會話的規則,而不是批處理檔案。 cmd.exe cmd.exe
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/428987.html
