重命名没有模式的多个文件

时间:2020-05-11 15:52:46

标签: batch-file cmd

我开始学习如何在Windows中使用CMD。而且我有一个目录,里面满是文件,名称如“ Document_1.txt”,“ Document_5.txt”等(全部包含Document _#。txt,但数字中没有模式)。

我想将每个文件移动到名为“ Text_#”的文件夹,并将文件名更改为“ text _#。txt”。我该怎么办?

我的尝试是这个(简单的)批处理文件(实际上,我认为我什至不需要创建一个批处理文件,但是这样做很容易。)

@ECHO OFF
FOR /L %%i IN (1,1,24) DO (
FORFILES /M *.txt /C "cmd /c IF @fname==Document_%%i (MD Text_%%i) & (MOVE @file Text_%%i\text_%%i.txt)"

问题是IF命令从不返回true,尽管在写ECHO @fname时它会显示“ Document_#”,所以我想即使我看到的是相同的东西,使用ECHO也看不到一些区别命令。

有人可以给我解决这个问题的方法吗?

1 个答案:

答案 0 :(得分:0)

我认为最简单的方法是忘记使用ForFiles命令,而使用For /F循环。为确保仅扩展名为.txt或文件名以_#_##结尾的文件{em>(其中#代表整数),请使用Dir命令,并在FindStr的帮助下过滤其结果。然后,您可以使用MD来创建目录(如果尚不存在)并将文件移动到其中,并使用新名称重命名它们。

中以当前目录作为保存文件的位置:

For /F "Tokens=1,* Delims=_" %G In ('Dir /B /A -D Document_??.txt ^| %__AppDir__%findStr.exe /I "_[0123456789]*\.txt$"') Do @If Not Exist Text_%~nH (MD Text_%~nH) & Move /Y %G_%H Text_%~nH\text_%H 1>NUL

如果您想从进行此操作,请在同一当前目录中:

@For /F "Tokens=1,* Delims=_" %%G In (
    'Dir /B /A -D Document_??.txt ^| %__AppDir__%findStr.exe /I "_[0123456789]*\.txt$"'
) Do @(
    If Not Exist Text_%%~nH MD Text_%%~nH
    Move /Y %%G_%%H Text_%%~nH\text_%%H 1>NUL
)

以上答案假设文件基名的末尾是一个或两个数字,(因为您将数字限制为从124的数字)还省略了报价,因为您提供的名称不予保证。如果这些不是真正具有代表性的,则需要引入这些,并进行超出所提出问题的其他更改。

相关问题