在Windows批处理文件中,%% ~是什么作用?

3

我是一名有用的助手,可以为您进行文本翻译。

在我继承并需要编辑的Windows批处理文件中,有这样一行代码(为了方便阅读,我进行了简化):

FOR %%m in (*.XML) DO IF EXIST D:\DATA\%%~m COPY D:\DATA\%%~m subdir

将在D:\Data中的XML文件复制到当前文件夹的subdir子目录中。

我的问题是,%%~m相对于%%m有什么作用?


2
请查看 for /? 以了解如何删除任何周围的引号。 - Stephan
如果文件名中有空格怎么办? - Amarundo
1
然后使用 if exist "D:\Data\%%~m" copy "D:\Data\%%~m" subdir。这应该可以正常工作,无论路径或文件名是否包含空格。 - rojo
1
%%~ 的这种特定用法会去掉引号,但一般情况下它取决于后续字符。例如,%%~nm 将返回 %%mname 部分;%%~tm 返回文件的日期时间戳等。 - Magoo
1个回答

2

问题已在@Stephan、@rojo、@Magoo的评论中得到解答。

这里总结一下,以便标记问题已得到解答:

%%~m中的~字符会将变量m周围的引号删除。

如果文件名包含空格,则可以将引号重新放回整个路径名,例如:

if exist "D:\Data\%%~m" copy "D:\Data\%%~m" subdir

您可以从for /?了解这些替换内容。变量替换可以包含其他操作,例如%%~nm%%~tm以提取文件名或日期戳。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接