我有一个简单的批处理文件,该文件将其调用的参数放入文本文件中:
setlocal ENABLEDELAYEDEXPANSION
set filename=%~n1
set pathname=%~p1
set letter=%~d1
>>path.txt echo %letter%%pathname%%filename%
(它做得更多,但这足以显示问题)
参数是一个完整的路径:c: te st file&name.xml
只要没有&在路径名中。但是上述路径导致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!
如何在文本文件中获得正确的路径?
setlocal DisableDelayedExpansion
set "filename=%~n1"
set "pathname=%~p1"
set "letter=%~d1"
setlocal EnableDelayedExpansion
>>path.txt echo !letter!!pathname!!filename!
将内容分配为变量后,仅应使用延迟的扩展,因为延迟的扩展永远不会更改或尝试解析内容。
一开始的setlocal DisableDelayedExpansion
确保了,在将参数分配给变量时保留了感叹号。