0

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

帮助将不胜感激。

谢谢

罗兰

4

2 回答 2

2

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!
)

这也将通过所有子目录递归。如果您只想要您选择的文件夹,请/sdir命令中删除 。

另外,因为您只删除了文件名,所以我已经这样做了,所以它会在之后重新附加文件扩展名,否则扩展名中的字符将计入 16 个字符的限制。

于 2013-01-17T11:54:35.033 回答
1

您可以使用第二个 bat 文件并传递@fnamelike%1并在此处创建子字符串。

Forfiles /m *.* /c "cmd /c call second.bat @fname"

In second.bat

Set v=%1

Set substring=%v:~1,5%

Echo %substring%
于 2015-12-01T20:53:15.933 回答