我正在尝试为Windows 7环境编写这个小批处理文件。它应该通过一个目录并回显文件名的最后四个字符。到目前为止我已经:
@ECHO OFF
SETLOCAL
for /r C:\Users\userName\Desktop\testFolder %%g in (*) do (
Set fileName = %%~ng
echo %fileName:~-4%
)
对于testFolder中的每个文件,所有回声都是“〜-4”。我无法弄清楚出了什么问题,但后来我对精通批处理文件或dos并不熟悉。任何帮助将不胜感激,谢谢。
答案 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
的变量,并带有一个尾随空格。