修改 谢谢你们, Magoo技巧修复它,我使用以下代码:
echo off
cls
setlocal enabledelayedexpansion
for %%f in (*.mov) do (
set name=%%~nf
set new_name=!name:*_= !
echo File renamed from: !name!.mov to:!new_name!.mov
rename %%f !new_name!.mov
)
仅当文件名为something_file_name.mov时才有效。如果原始文件只是file_name.mov,我最终只有name.mov 所以使用REGEX是最好的选择。 我使用了Ben Personick和Squashman的调整版本。
@echo off
cls
SET "_Regex=^[0-9]*_"
FOR %%F IN (*.mov) DO (
ECHO.%%~nF | findstr /R "%_Regex%" >nul && (
FOR /F "Tokens=1* Delims=_" %%f IN ("%%~nxF") DO (
MOVE /Y "%%F" "%%g"
)
)
)
我有一些名为3424_file_name.mov的文件,需要删除这些数字,直到第一个_所以得到file_name.mov 更好的是设置一个范围来删除像[0-9] 喜欢在cmd windows 7中这样做。这是我到目前为止所做的,但不起作用。
cls
setlocal enabledelayedexpansion
for %%f in (*.mov) do (
set name=%%~nf
set new_name=%name%:*_=x
echo %new_name%)
rename %%f %new_name%.mov
)
由于 亚历
答案 0 :(得分:2)
这样做是必要的。
注意我如何使用MOVE / Y以防文件是只读的,因为重命名无法处理重命名只读文件。
SETLOCAL
ECHO OFF
SET "_Regex=^[0-9][0-9]*_.*"
SET "_FileGlob=*_*.Mov"
SET "_FilePath=C:\Path"
FOR %%F IN ("%_FilePath%\%_FileGlob%") DO (
ECHO.%%~nF | FINDSTR /R "%_Regex%" >NUL && (
FOR /F "Tokens=1* Delims=_" %%f IN ("%%~nxF") DO (
MOVE /Y "%%~F" "%%~dpF%%~g"
)
)
)
ENDLOCAL
答案 1 :(得分:1)
如果您使用FOR /F
命令,则可以使用下划线。这将允许您将文件名分解为两个变量。
@echo off
for /F "tokens=1* delims=_" %%G in ('dir /a-d /b *.mov ^|findstr /RC:"^[0-9][0-9]*_"') do (
rename "%%~G_%%~H" "%%~H"
)
答案 2 :(得分:0)
这是PowerShell中的一个更简单的任务。例如:
Get-ChildItem *.mov | ForEach-Object {
$fileName = $_.Name
if ( $fileName -match '^[0-9]+_' ) {
$newName = $fileName -replace '^[0-9]+_', ''
Rename-Item $fileName $newName
}
}
正如其他人评论的那样,这可以重新设计为更短,更高效。例如:
Get-ChildItem *.mov |
Where-Object { $_.Name -match '^\d+_' } |
Rename-Item -NewName ($_.Name -replace '^\d+_','')
此处的目的是说明PowerShell如何比cmd.exe
批处理脚本更强大和灵活。