我有一个简单的批处理文件,可以将调用的参数放入文本文件中:
setlocal ENABLEDELAYEDEXPANSION
set filename=%~n1
set pathname=%~p1
set letter=%~d1
>>path.txt echo %letter%%pathname%%filename%
(它做得更多,但这足以说明问题)
参数是完整路径: C:\ te st \ file& name.xml的
这个批处理文件只要没有& amp;在路径名称中。但上述路径导致filename=file
和&被解释为一个参数。
我尝试使用set "filename=%~n1"
但结果是
>>path.txt echo C:\te st\"file & name.xml"
这是不正确的。我无法摆脱报价。 我试过了:
>>path.txt echo %letter%%pathname%!filename!
但结果是
>>path.txt echo C:\te st\!filename!
如何在文本文件中获取正确的路径?
答案 0 :(得分:1)
setlocal DisableDelayedExpansion
set "filename=%~n1"
set "pathname=%~p1"
set "letter=%~d1"
setlocal EnableDelayedExpansion
>>path.txt echo !letter!!pathname!!filename!
将内容分配到变量后,只应使用延迟扩展,因为延迟扩展永远不会更改或尝试解析内容。
开头的setlocal DisableDelayedExpansion
确保在将参数分配给变量时保留感叹号。