删除文件名 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)
大家好,
我正在寻找一个我可以 运行 的批处理文件,它将搜索该文件夹(不是子文件夹)中的每个文件并重命名每个文件的字符串,删除字符串的第一部分直到“ ——” 示例见附图。
谢谢!
您可以利用带字符串替换的通配符。它是非贪婪的,所以你可以让它从文件名中删除所有内容,直到它第一次找到 {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)