批处理文件:处理可以包含空格和anmpers的参数



我有一个简单的批处理文件,该文件将其调用的参数放入文本文件中:

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确保了,在将参数分配给变量时保留了感叹号。

最新更新