删除文件名 Bat 文件的开头

Remove start of filenames Bat file

大家好,

我正在寻找一个我可以 运行 的批处理文件,它将搜索该文件夹(不是子文件夹)中的每个文件并重命名每个文件的字符串,删除字符串的第一部分直到“ ——” 示例见附图。

谢谢!

您可以利用带字符串替换的通配符。它是非贪婪的,所以你可以让它从文件名中删除所有内容,直到它第一次找到 {space hyphen space}.

@echo off
setlocal EnableExtensions DisableDelayedExpansion

for /F "eol=| delims=" %%G in ('dir /B /A-D-H "* - *.*" 2^>nul') do (
    set "string=%%G"
    setlocal enabledelayedexpansion
    SET "end=!string:* - =!"
    rename "%%G" "!end!"
    endlocal
)

@Compo 向您展示了如何使用 FINDSTR 来不解析具有特定扩展名的文件。以下是如何利用 FOR 命令修饰符和比较来执行相同的操作。

@echo off
setlocal EnableExtensions DisableDelayedExpansion

for /F "eol=| delims=" %%G in ('dir /B /A-D-H "* - *.*" 2^>nul') do (
    IF /I NOT "%%~xG"==".msg" ( 
        set "string=%%G"
        setlocal enabledelayedexpansion
        SET "end=!string:* - =!"
        rename "%%G" "!end!"
        endlocal
    )
)

类似于 Squashman 的回答,只是在这个版本中没有使用 delayedexpansion。修改为包括排除 .msg 文件扩展名。

@echo off
for /f "delims=" %%i in ('dir /b /a-d "* - *.*"') do if /i not "%%~xi" == ".msg" set "file=%%~i" && call :ren
goto :eof
:ren
ren "%file%" "%file:*- =%"

这是另一种选择,它使用相同的方法删除所有内容,包括 space 连字符 space 的第一个实例,作为已经存在的答案,但识别方法不同这些文件,即 where.exe:

@Echo Off & SetLocal EnableExtensions DisableDelayedExpansion
For /F "Delims=" %%G In ('(Set PATHEXT^=^) ^& %SystemRoot%\System32\where.exe
 "%~dp0.":"?* - ?*" 2^>NUL') Do (Set "FileName=%%~nxG"
    SetLocal EnableDelayedExpansion
    Ren "%%G" "!FileName:* - =!" & EndLocal)

并且,作为 subsequent question(现已关闭) 的扩展,以下示例使用 findstr.exe 来排除任何带有 .msg 分机:

@Echo Off & SetLocal EnableExtensions DisableDelayedExpansion
For /F "Delims=" %%G In ('(Set PATHEXT^=^) ^& %SystemRoot%\System32\where.exe
 "%~dp0.":"?* - ?*" 2^>NUL ^| %SystemRoot%\System32\findstr.exe /LIV ".msg"'
) Do (Set "FileName=%%~nxG" & SetLocal EnableDelayedExpansion
    Ren "%%G" "!FileName:* - =!" & EndLocal)

此外,由于 body 文本与已关闭问题的标题之间存在差异,如果您只想重命名 .msg 文件,而其他文件保持不变,则:

@Echo Off & SetLocal EnableExtensions DisableDelayedExpansion
For /F "Delims=" %%G In ('(Set PATHEXT^=^) ^& %SystemRoot%\System32\where.exe
 "%~dp0.":"?* - ?*.msg" 2^>NUL') Do (Set "FileName=%%~nxG"
    SetLocal EnableDelayedExpansion
    Ren "%%G" "!FileName:* - =!" & EndLocal)