如何在forfiles命令中获取@FNAME的子串

时间:2013-01-17 11:21:23

标签: variables batch-file substring

我想通过将文件名解压缩到前16个字符来重命名目录中的一堆文件,但是在批处理文件中使用forfiles命令时,我无法弄清楚如何获取@FNAME的子字符串。

非常感谢帮助。

由于

罗兰

2 个答案:

答案 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%