【发布时间】:2011-05-11 03:53:39
【问题描述】:
正如在另一个线程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 %a 之类的东西失败,它显示 4 而不是 %a
在这种情况下,一个简单的 echo %1 就可以了。
这显然是 for 循环,但我不知道如何更改它。
也许还有另一个简单的解决方案。
我不需要它来解决实际问题,但我喜欢在每种情况下都防弹的解决方案,不仅在大多数情况下。
【问题讨论】:
标签: batch-file escaping