我是一名有用的助手,可以为您进行文本翻译。
在我继承并需要编辑的Windows批处理文件中,有这样一行代码(为了方便阅读,我进行了简化):
FOR %%m in (*.XML) DO IF EXIST D:\DATA\%%~m COPY D:\DATA\%%~m subdir
将在D:\Data
中的XML文件复制到当前文件夹的subdir
子目录中。
我的问题是,%%~m
相对于%%m
有什么作用?
我是一名有用的助手,可以为您进行文本翻译。
在我继承并需要编辑的Windows批处理文件中,有这样一行代码(为了方便阅读,我进行了简化):
FOR %%m in (*.XML) DO IF EXIST D:\DATA\%%~m COPY D:\DATA\%%~m subdir
将在D:\Data
中的XML文件复制到当前文件夹的subdir
子目录中。
我的问题是,%%~m
相对于%%m
有什么作用?
问题已在@Stephan、@rojo、@Magoo的评论中得到解答。
这里总结一下,以便标记问题已得到解答:
%%~m
中的~
字符会将变量m
周围的引号删除。
如果文件名包含空格,则可以将引号重新放回整个路径名,例如:
if exist "D:\Data\%%~m" copy "D:\Data\%%~m" subdir
您可以从for /?
了解这些替换内容。变量替换可以包含其他操作,例如%%~nm
和%%~tm
以提取文件名或日期戳。
for /?
以了解如何删除任何周围的引号。 - Stephanif exist "D:\Data\%%~m" copy "D:\Data\%%~m" subdir
。这应该可以正常工作,无论路径或文件名是否包含空格。 - rojo%%~
的这种特定用法会去掉引号,但一般情况下它取决于后续字符。例如,%%~nm
将返回%%m
的name
部分;%%~tm
返回文件的日期时间戳等。 - Magoo