在其他线程中讨论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