DOS批处理:获取部分文件名

时间:2011-10-18 17:31:52

标签: windows-7 batch-file dos

我正在尝试为Windows 7环境编写这个小批处理文件。它应该通过一个目录并回显文件名的最后四个字符。到目前为止我已经:

@ECHO OFF

SETLOCAL
for /r C:\Users\userName\Desktop\testFolder %%g in (*) do (
   Set fileName = %%~ng
   echo %fileName:~-4%
)

对于testFolder中的每个文件,所有回声都是“〜-4”。我无法弄清楚出了什么问题,但后来我对精通批处理文件或dos并不熟悉。任何帮助将不胜感激,谢谢。

1 个答案:

答案 0 :(得分:6)

Environment variable expansion occurs when the command is read,因此在%fileName:~-4%被读取时,{<1}}会被评估, for。使用延迟扩展。

Set

另请注意,@ECHO OFF SETLOCAL SETDELAYEDEXPANSION for /r C:\Users\userName\Desktop\testFolder %%g in (*) do ( Set fileName=%%~ng echo !fileName:~-4! ) 命令中的空格很重要。通过该空间,您创建了一个名为Set的变量,并带有一个尾随空格。