在其他線程中討論How to avoid cmd.exe interpreting shell special characters like < > ^ 從命令行獲取所有參數並不容易。如何接收最奇怪的命令行參數?
簡單
set var=%1
set "var=%~1"
是不夠的,如果你有一個像
myBatch.bat abc"&"^&def
我有一個解決方案的要求,但它需要一個臨時文件,而且這也不是防彈。
@echo off
setlocal DisableDelayedExpansion
set "prompt=X"
(
@echo on
for %%a in (4) do (
rem #%1#
)
) > XY.txt
@echo off
for /F "delims=" %%a in (xy.txt) DO (
set "param=%%a"
)
setlocal EnableDelayedExpansion
set param=!param:~7,-4!
echo param='!param!'
它失敗的東西,如myBatch.bat%一,它顯示沒有%在這種情況
簡單回聲%1會工作。
這顯然是for循環,但我不知道如何改變這一點。
也許存在另一個簡單的解決方案。
我不需要這個來解決實際問題,但我喜歡在每種情況下都是防彈的解決方案,而不是在大多數情況下。
這一點很清楚,很明顯abc「&」^&def將被轉換爲abc「&」&def,但仍然無法用簡單的set「var =%〜1」來處理。 – jeb 2010-11-17 07:18:02
用戶然後需要預測在批處理文件中使用了多少次參數來爲其添加適當的轉義級別。這不是很有用,我想;-) – Joey 2010-11-18 13:01:49