我需要根据文件名更改多个文件名。
我有这样的文件。
001.mp3
002.mp3
003.mp3
004.mp3
005.mp3
...etc
我编写了一些代码来实现自己的目标,
@echo off
for %%i in (*.mp3) do if %%~ni gtr 003 ren %%i %%~ni-new%%~xi
我已经成功获得了这样的期望结果:
001.mp3
002.mp3
003.mp3
004-new.mp3
005-new.mp3
...etc
但是现在我正在尝试类似'if
之间的东西'。
例如:
@echo off
for %%i in (*.mp3) do
if %%~ni between 001 && 003 ren %%i %%~ni-chapter-1%%~xi
if %%~ni between 004 && 006 ren %%i %%~ni-chapter-2%%~xi
if %%~ni between 007 && 020 ren %%i %%~ni-chapter-3%%~xi
if %%~ni between 021 && 030 ren %%i %%~ni-chapter-4%%~xi
if %%~ni between 031 && 045 ren %%i %%~ni-chapter-5%%~xi
所以期望的结果将是这样:
001-chapter-1.mp3
002-chapter-1.mp3
003-chapter-1.mp3
004-chapter-2.mp3
005-chapter-2.mp3
006-chapter-2.mp3
007-chapter-3.mp3
008-chapter-3.mp3
009-chapter-3.mp3
010-chapter-3.mp3
...etc
请帮助我修复该代码,如所示。
答案 0 :(得分:0)
您可以通过从cmd运行if /?
获得有关此问题的所有帮助,但这或多或少是在以下两者之间要做的想法:
@echo off
for %%i in (*.mp3) do (
if %%~ni leq 003 ren %%i %%~ni-chapter-1%%~xi
if %%~ni leq 006 if %%~ni gtr 003 ren %%i %%~ni-chapter-2%%~xi
if %%~ni leq 020 if %%~ni gtr 006 ren %%i %%~ni-chapter-3%%~xi
if %%~ni leq 030 if %%~ni gtr 020 ren %%i %%~ni-chapter-4%%~xi
if %%~ni leq 045 if %%~ni gtr 030 ren %%i %%~ni-chapter-5%%~xi
)
直接来自if /?
其中compare-op可能是以下之一:
EQU - equal
NEQ - not equal
LSS - less than
LEQ - less than or equal
GTR - greater than
GEQ - greater than or equal
答案 1 :(得分:0)
我想您也可以使用延迟扩展并删除嵌套的If
语句:
@Echo Off
SetLocal EnableDelayedExpansion
Set "i="
For /F "Delims=" %%A In ('Where .:???.mp3 2^>Nul')Do (
If 1%%~nA Gtr 1000 Set "i=1"
If 1%%~nA Gtr 1003 Set "i=2"
If 1%%~nA Gtr 1006 Set "i=3"
If 1%%~nA Gtr 1020 Set "i=4"
If 1%%~nA Gtr 1030 Set "i=5"
If 1%%~nA Gtr 1045 Set "i="
If Defined i Ren "%%A" "%%~nA-chapter-!i!%%~xA"
)
在上面的示例中,我使用了Where
命令将返回的元变量限制为具有3
字符基名的元变量。 。
*.mp3
模式匹配)。
请注意,此操作仅过滤具有三个字符的.mp3
文件,而不能确定这些字符都是整数。我会让您决定是否要自己执行类似的操作。