批处理文件,用于匹配和重命名指定目录中的多个文件名

时间:2013-12-10 10:52:18

标签: batch-file

我需要一个脚本来完成这个大量重命名文件名。

C:\media\tv\How.I.Met.Your.Mother.S09E06.REPACK.HDTV.x2
C:\media\tv\The.Big.Bang.Theory.S07E05.HDTV.x26
C:\media\tv\The.Blacklist.S01E01.HDTV.x26

C:\media\tv\How I Met Your Mother S09E06
C:\media\tv\The Big Bang Theory S07E05
C:\media\tv\The Blacklist S01E01

我已经有了一个脚本:

dir /o:n/b "" >>Movie.txt

拉取并清点tv文件夹并将其放入txt文件中。我只需要或多或少地修改该库存(手动)并传播更改。 如果您在A列中找到,请将其更改为B列

一个...........................................乙

name.crap.cluTTER .............名称

库存..............................改变库存

TIA为您提供帮助。

1 个答案:

答案 0 :(得分:0)

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /f "delims=" %%a IN (
 q20492473.txt
 ) DO (
 SET fname=%%~nxa
 CALL :vername
 IF DEFINED fname (ECHO REN "%%a" "!fname!"
 ) ELSE (ECHO could NOT RENAME "%%~nxa")
)
GOTO :EOF
:vername
FOR /f %%i IN ("%fname%") DO SET fname=%%~ni&SET ext=%%~xi
IF NOT DEFINED ext SET "fname="&GOTO :EOF
IF /i NOT "%ext:~0,2%%ext:~4,1%%ext:~7,1%"==".SE" GOTO vername
SET num=9%ext:~2,2%%ext:~5,2%
FOR %%i IN (0 1 2 3 4 5 6 7 8 9) DO SET num=!num:%%i=!
IF DEFINED num GOTO vername
SET fname=!fname:.= ! %ext:~1%
GOTO :eof

这应该让你开始。

q20492473.txt只是我用作示例数据源文本的文件的名称。毫无疑问,如果您愿意,可以用'dir /a-d/b'(包括单引号)替换它。


随访:

啊 - 这里有两个重要的词 - “等等”和“闪光”。 blah至关重要,因为知道它有助于调试(仅限几行 - 应该重命名的文件名和不应该重命名的文件名)。

但是挥动的主要标志是“flash”,表示您正试图通过点击它来从桌面运行此代码。

我真的相信隐藏人们的老鼠会迫使他们学习一些基础知识。它也会使许多人疯狂。

点击你的邪恶鼠标,然后点击开始>程序>附件,然后右键单击“命令提示符”。选择“发送至”和“桌面”。这会创建一个图标,点击该图标将打开启示的黑屏。有些人不会称之为“命令提示符”,但现实主义者称之为“DOS”,因为它是MS-DOS的模拟器。关闭此窗口的传统方法是键入EXIT。您可以使用图标的“属性”选项卡设置使用的大小,字体和颜色。

你会看到提示;

之类的东西
c:\somedirectory>

显示当前或“已记录”的驱动器和目录。

您可以通过键入

来更改记录的驱动器
x:

其中x是您所需的新动力。

您可以通过键入

来更改记录的目录
cd "newdirectoryname"

其中newdirectoryname是相对于当前目录的目录,如果它不是以\开头而绝对是{。}}。引号是可选的 - 但最好习惯使用它们,因为它们必须用于某些命令,其中名称(文件名或目录名)包含空格。

您可以通过更改图标属性中的起始目录来更改开始的目录。

在提示符处,您可以通过键入

获取有关命令的文档(有时模糊,通常不完整)
commandname /?

所以

dir /?

将显示dir命令的可用选项。

所以 - 我在我的V:驱动器(USB)上设置了一个名为'q20492473'的目录并打开了一个dos窗口。然后我输入

v:
cd "q20492473"
dir

得到了这个回复:

 Volume in drive V has no label.
 Volume Serial Number is 33C0-A799

 Directory of V:\q20492473

12/12/2013  11:41    <DIR>          .
12/12/2013  11:41    <DIR>          ..
12/12/2013  11:47               570 q20492473.bat
10/12/2013  20:24               416 q20492473.txt
12/12/2013  11:45                 0 How.I.Met.Your.Mother.S09E06.REPACK.HDTV
12/12/2013  11:45                 0 The.Big.Bang.Theory.S07E05.HDTV
12/12/2013  11:45                 0 The.Blacklist.S01E01.HDTV
12/12/2013  11:45                 0 How.I.Met.Your.Mother.Sx9E06.REPACK.HDTV
12/12/2013  11:45                 0 The.Big.Bang.Theory.S07Ey5.HDTV
12/12/2013  11:45                 0 Thisisjustanormalfile
12/12/2013  11:45                 0 noextension
12/12/2013  11:45                 0 The.Big.Bang.Theory.S27E05.HDTV
12/12/2013  11:45                 0 This.&.That.Theory.S27E05.HDTV
10/12/2013  20:25               604 q20492473.bat.bak
              12 File(s)          1,590 bytes
               2 Dir(s)  51,678,806,016 bytes free

你会注意到q20492473.bat在列表中。

这是它的内容 - 除了dir...已被替换外,它与上面的列表相同

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /f "delims=" %%a IN (
  'dir /a-d/b'
 ) DO (
 SET fname=%%~nxa
 CALL :vername
 IF DEFINED fname (ECHO REN "%%a" "!fname!"
 ) ELSE (ECHO could NOT RENAME "%%~nxa")
)
GOTO :EOF
:vername
FOR /f %%i IN ("%fname%") DO SET fname=%%~ni&SET ext=%%~xi
IF NOT DEFINED ext SET "fname="&GOTO :EOF
IF /i NOT "%ext:~0,2%%ext:~4,1%%ext:~7,1%"==".SE" GOTO vername
SET num=9%ext:~2,2%%ext:~5,2%
FOR %%i IN (0 1 2 3 4 5 6 7 8 9) DO SET num=!num:%%i=!
IF DEFINED num GOTO vername
SET fname=!fname:.= ! %ext:~1%
GOTO :eof

输入

q20492473

导致回复

could NOT RENAME "q20492473.bat"
could NOT RENAME "q20492473.txt"
REN "How.I.Met.Your.Mother.S09E06.REPACK.HDTV" "How I Met Your Mother S09E06"
REN "The.Big.Bang.Theory.S07E05.HDTV" "The Big Bang Theory S07E05"
REN "The.Blacklist.S01E01.HDTV" "The Blacklist S01E01"
could NOT RENAME "How.I.Met.Your.Mother.Sx9E06.REPACK.HDTV"
could NOT RENAME "The.Big.Bang.Theory.S07Ey5.HDTV"
could NOT RENAME "Thisisjustanormalfile"
could NOT RENAME "noextension"
REN "The.Big.Bang.Theory.S27E05.HDTV" "The Big Bang Theory S27E05"
REN "This.&.That.Theory.S27E05.HDTV" "This & That Theory S27E05"
could NOT RENAME "q20492473.bat.bak"

因为根据公式可以重命名的唯一文件是报告行以ren开头的文件(批处理在很大程度上不区分大小写)。其他的不合适,因此批次不会重命名。

我只是ECHO编辑REN命令以进行验证。删除ECHOREN之前的q20492473.bat关键字,并在批处理运行时尝试重命名。

最后,q20492473.bat(或者你称之为的任何东西)不必驻留在当前目录中。如果您愿意,可以将其作为c:\wherever\you\have\stored\it\q20492473运行 - 如果它包含空格,请记住"quote the name"

当显示可执行文件名时,批处理将查看当前目录,然后“沿着路径”。直到找到了excutable。 PATH 是一系列; 分隔的目录名,包含在名为奇怪, PATH 的环境变量中。

您可以使用

查看设置的环境变量
set

或具体而言,因为 PATH 非常重要,

path

许多batchers创建一个特殊目录来包含批处理文件和其他有用的实用程序。热门名称包括C:\batchC:\belfry。通过将此目录包含在 PATH 中,无论当前目录如何,都可以运行 batchname

修改 PATH 的方法可以在SO

的其他回复中找到