删除文件名的一部分
Deleting part of a file's name
我正在尝试删除 mp3 名称的特定部分。
因此,如果 mp3 是 "X (2015)",我希望它识别“(2”并删除名称的其余部分,这样我就可以每年删除它。
@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir\t w o"
FOR /f "delims=" %%a IN (
'dir /b /a-d "%sourcedir%\*(*.mp3" '
) DO (FOR /f "tokens=1delims=(" %%g IN ("%%a") DO ECHO(REN "%sourcedir%\%%a" "%%~g%%~xa"
)
GOTO :EOF
您需要更改 sourcedir
的设置以适合您的情况。
所需的 REN 命令仅 ECHO
ed 用于测试目的。 确认命令正确后,将ECHO(REN
更改为REN
以实际重命名文件。
处理 /b
基本格式的目录列表并将文件名分配给 %%a
。文件掩码仅选择那些包含 (
的文件名
%%a
然后被划分为第一个(
之前的部分和之后的部分以及分配给%%g
之前的部分
接下来就是将命令串起来的问题了。
奇怪的是,这道题最难的部分是去掉左括号前的space。下面的批处理文件只是删除了新名称的最后一个字符;如果左括号之前的 space 的数量可能是可变的,则必须使用不同的方法。
@echo off
setlocal EnableDelayedExpansion
for /F "delims=" %%a in ('dir /B *(2*.mp3') do (
for /F "delims=(" %%b in ("%%a") do set "name=%%b"
ECHO ren "%%a" "!name:~0,-1!.mp3"
)
输出示例:
C:\> dir /B *.mp3
X (2015).mp3
Y (2012).mp3
C:\> test.bat
ren "X (2015).mp3" "X.mp3"
ren "Y (2012).mp3" "Y.mp3"
我正在尝试删除 mp3 名称的特定部分。 因此,如果 mp3 是 "X (2015)",我希望它识别“(2”并删除名称的其余部分,这样我就可以每年删除它。
@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir\t w o"
FOR /f "delims=" %%a IN (
'dir /b /a-d "%sourcedir%\*(*.mp3" '
) DO (FOR /f "tokens=1delims=(" %%g IN ("%%a") DO ECHO(REN "%sourcedir%\%%a" "%%~g%%~xa"
)
GOTO :EOF
您需要更改 sourcedir
的设置以适合您的情况。
所需的 REN 命令仅 ECHO
ed 用于测试目的。 确认命令正确后,将ECHO(REN
更改为REN
以实际重命名文件。
处理 /b
基本格式的目录列表并将文件名分配给 %%a
。文件掩码仅选择那些包含 (
%%a
然后被划分为第一个(
之前的部分和之后的部分以及分配给%%g
接下来就是将命令串起来的问题了。
奇怪的是,这道题最难的部分是去掉左括号前的space。下面的批处理文件只是删除了新名称的最后一个字符;如果左括号之前的 space 的数量可能是可变的,则必须使用不同的方法。
@echo off
setlocal EnableDelayedExpansion
for /F "delims=" %%a in ('dir /B *(2*.mp3') do (
for /F "delims=(" %%b in ("%%a") do set "name=%%b"
ECHO ren "%%a" "!name:~0,-1!.mp3"
)
输出示例:
C:\> dir /B *.mp3
X (2015).mp3
Y (2012).mp3
C:\> test.bat
ren "X (2015).mp3" "X.mp3"
ren "Y (2012).mp3" "Y.mp3"