我开始学习如何使用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命令看到。
谁能给我一些解决这个问题的方法?
在我看来,最简单的方法是忘掉使用的是 ForFiles
命令,并使用 For /F
循环代替。为了确保只有带有 .txt
的扩展,其基名以 _#
或 _##
, (其中 #
代表一个整数),使用 Dir
命令,并借助 FindStr
. 然后你可以使用 MD
来创建目录,并将文件移入其中,用新名称重新命名。
从 cmd 并将当前目录作为存放文件的目录。
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
)
上述答案假定文件基名的末尾有一个或两个数字。(因为你把你的数字限制在了从 1
到 24
(含) 我也没有引用,因为你提供的名字不值得引用。如果这些并不真正具有代表性,你就需要根据需要介绍这些内容,并对提出的问题之外的其他内容进行修改。