我想通过将文件名解压缩到前16个字符来重命名目录中的一堆文件,但是在批处理文件中使用forfiles命令时,我无法弄清楚如何获取@FNAME的子字符串。
非常感谢帮助。
由于
罗兰
答案 0 :(得分:1)
使用forfiles
执行此操作很可能会非常棘手,因为我不认为您可以在同一批次中设置和使用变量,因为您为每个文件生成了一个新的cmd( "cmd /c command"
)。
但是,使用简单的for
循环可以轻松实现相同的功能。
setlocal enabledelayedexpansion
for /f "tokens=*" %%a in ('dir C:\yourdir /s /b') do (
set file=%%~na
set ext=%%~xa
set new=!file:~0,16!
ren %%a !new!!ext!
)
这也将通过所有子目录进行递归。如果您只想要所选的文件夹,请从/s
命令中删除dir
。
另外,因为您正在剥离文件名,所以我已经将其重新附加文件扩展名,否则扩展名中的字符将计入16个字符的限制。
答案 1 :(得分:0)
您可以使用第二个bat文件并传递@fname
%1
,并在此处创建子字符串。
Forfiles /m *.* /c "cmd /c call second.bat @fname"
In second.bat
Set v=%1
Set substring=%v:~1,5%
Echo %substring%