1

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

@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

由于文件夹名称中的空格,我知道这与我使用的双引号有关。但即使在网上搜索了几个小时并阅读了无数类似的帖子后,我也无法终生弄清楚如何解决它。它让我发疯!!!

任何帮助将不胜感激...

4

1 回答 1

1

这里三点:

1- 正如“usebackq”所暗示的那样:使用反引号执行命令,因此您必须使用 ` 而不是 '。

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

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

最后:在仅显示最后一个文件名的意义上,先前的代码“有效” 。如果要通过变量显示所有名称,则必须使用不同的方法。

我希望它有帮助...

安东尼奥

于 2012-12-07T02:48:08.657 回答