删除文件名的一部分

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 命令仅 ECHOed 用于测试目的。 确认命令正确后,将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"