批处理文件:处理可包含空格和符号的参数

时间:2017-11-21 11:05:53

标签: batch-file

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

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!

如何在文本文件中获取正确的路径?

1 个答案:

答案 0 :(得分:1)

setlocal DisableDelayedExpansion
set "filename=%~n1"
set "pathname=%~p1"
set "letter=%~d1"
setlocal EnableDelayedExpansion
>>path.txt echo !letter!!pathname!!filename!

将内容分配到变量后,只应使用延迟扩展,因为延迟扩展永远不会更改或尝试解析内容。

开头的setlocal DisableDelayedExpansion确保在将参数分配给变量时保留感叹号。