在语句的批处理脚本中使用的目录/文件名中的空格

时间:2012-12-06 22:22:53

标签: batch-file

为什么这个批处理脚本有用......

@echo off
for /F %%a in ('dir /b F:\Temp\*.txt') do set TestFileName=%%~nxa 
echo %FileName%
pause

但这个没有...

@echo off
for /F "usebackq" %%a in ('dir /b "F:\Temp Folder\*.txt"') do set TestFileName=%%~nxa 
echo %FileName%
pause

我知道由于文件夹名称中的空格,它与我使用的双引号有关。但即使经过几个小时的网络搜索和阅读相似的无数帖子,我也不能为我的生活弄清楚如何解决它。它让我疯狂!

非常感谢任何帮助......

1 个答案:

答案 0 :(得分:1)

这里有三点:

1- As“usebackq”暗示:使用Back Quotes执行命令,因此必须使用`而不是'。

2-独立于上述内容,此代码:

@echo off
for /F "usebackq" %%a in (`dir /b "F:\Temp Folder\*.txt"`) do set TestFileName=%%~nxa 
echo %FileName%
pause

也不起作用,因为显示的变量FileName与FOR命令不同:TestFileName。

3-如果简单FOR的基本功能足以满足您的需要,我强烈建议您不要使用执行其他命令(如DIR)的FOR / F命令。例如:

@echo off
for %%a in ("F:\Temp Folder\*.txt") do set TestFileName=%%~nxa 
echo %TestFileName%
pause

以前的代码不仅易于编写和理解,而且运行速度也更快。

最后:以前的代码“工作”,显示只是最后一个文件名。如果要通过变量显示所有名称,则必须使用不同的方法。

我希望它有所帮助...

安东尼奥