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

问题描述 投票:0回答:1

我开始学习如何使用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命令看到。

谁能给我一些解决这个问题的方法?

batch-file cmd
1个回答
0
投票

在我看来,最简单的方法是忘掉使用的是 ForFiles 命令,并使用 For /F 循环代替。为了确保只有带有 .txt 的扩展,其基名以 _#_##, (其中 # 代表一个整数),使用 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 (含) 我也没有引用,因为你提供的名字不值得引用。如果这些并不真正具有代表性,你就需要根据需要介绍这些内容,并对提出的问题之外的其他内容进行修改。

© www.soinside.com 2019 - 2024. All rights reserved.