如何使用 cmd 在所有子文件夹中批量重命名为 name1.ext、name2.ext、name3.ext.......
How to bulk rename as name1.ext, name2.ext, name3.ext....... in all sub folders using cmd
我试过下面的代码,它显示缺少运算符。我尝试了很多方法,但仍然弹出某些错误或其他错误。
@echo off
setlocal EnableDelayedExpansion
set var = " %cd% "
set i=1
forfiles /P %var % /S /M *.png /C "cmd /C set /a i=i+1 ren *.png Screenshot(!i!).png"
有人请帮我写这段代码我会很高兴^_^
<---------------------------------------- ------
稍后编辑-------------------------------------------- -------->
我非常抱歉大家,但我想
每个文件夹中的文件从1
开始分别编号
听起来您想重命名所有 .png 文件。如果您对文件重命名感到满意,请从 Rename-Item
命令中删除 -WhatIf
。
===重命名-PngFiles。ps1
$i = 0
Get-ChildItem -Recurse -File *.png |
ForEach-Object {
Rename-Item -Path $_.FullName `
-NewName "Screenshot($(Get-Variable -ValueOnly i; $i++)).png" -WhatIf
}
=== 在 cmd.exe shell 或 .bat 文件脚本中
powershell -NoProfile -File Rename-PngFiles.ps1
编辑更改了批次以满足新要求。
- 由于当前文件夹是默认文件夹,因此您无需明确设置
它
- forfiles 将列出所有单个文件,因此您的
ren *.png
不会包含路径(如果您坚持使用 forfiles,请使用 @path 参见 forfiles /?
- 我建议使用 for /R 迭代所有文件夹,并使用 for /f 解析每个文件夹中的目录输出。
@Echo off
setlocal EnableDelayedExpansion
For /R %%A in (.) Do (
Pushd %%A
set i=0
For /f "delims=" %%B in ('Dir /B/A-D "*.png" 2^>Nul ') Do (
Set /A i+=1
Echo Ren "%%~fB" "Screenshot(!i!).png"
)
PopD
)
如果输出正常,去掉Ren
前面的回显
以下代码可能适合您:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
rem // Initialise variables:
set "NAME=Screenshot"
set "PREV="
rem // Loop through all matching files:
for /F "delims= eol=|" %%F in ('
dir /S /B /A:-D "*.png"
') do (
rem // Store current file path and extension:
set "FILE=%%~F" & set "PDIR=%%~dpF" & set "EXT=%%~xF"
rem // Check whether parent directory path changed:
setlocal EnableDelayedExpansion
if /I not "!PDIR!"=="!PREV!" (
endlocal
rem // Parent directory path changed, so reset counter:
set /A "COUNT=0"
) else endlocal
rem // Increment index counter:
set /A "COUNT+=1"
rem // Toggle delayed expansion to not lose exclamation marks in file paths:
setlocal EnableDelayedExpansion
rem // Actually rename files:
ECHO ren "!FILE!" "!NAME!(!COUNT!)!EXT!"
endlocal
rem // Store parent path of current file:
set "PREV=%%~dpF"
)
endlocal
测试输出后,删除 ren
!
前面的大写 ECHO
命令
我试过下面的代码,它显示缺少运算符。我尝试了很多方法,但仍然弹出某些错误或其他错误。
@echo off
setlocal EnableDelayedExpansion
set var = " %cd% "
set i=1
forfiles /P %var % /S /M *.png /C "cmd /C set /a i=i+1 ren *.png Screenshot(!i!).png"
有人请帮我写这段代码我会很高兴^_^
<---------------------------------------- ------ 稍后编辑-------------------------------------------- -------->
我非常抱歉大家,但我想
每个文件夹中的文件从1
听起来您想重命名所有 .png 文件。如果您对文件重命名感到满意,请从 Rename-Item
命令中删除 -WhatIf
。
===重命名-PngFiles。ps1
$i = 0
Get-ChildItem -Recurse -File *.png |
ForEach-Object {
Rename-Item -Path $_.FullName `
-NewName "Screenshot($(Get-Variable -ValueOnly i; $i++)).png" -WhatIf
}
=== 在 cmd.exe shell 或 .bat 文件脚本中
powershell -NoProfile -File Rename-PngFiles.ps1
编辑更改了批次以满足新要求。
- 由于当前文件夹是默认文件夹,因此您无需明确设置 它
- forfiles 将列出所有单个文件,因此您的
ren *.png
不会包含路径(如果您坚持使用 forfiles,请使用 @path 参见 forfiles /? - 我建议使用 for /R 迭代所有文件夹,并使用 for /f 解析每个文件夹中的目录输出。
@Echo off
setlocal EnableDelayedExpansion
For /R %%A in (.) Do (
Pushd %%A
set i=0
For /f "delims=" %%B in ('Dir /B/A-D "*.png" 2^>Nul ') Do (
Set /A i+=1
Echo Ren "%%~fB" "Screenshot(!i!).png"
)
PopD
)
如果输出正常,去掉Ren
以下代码可能适合您:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
rem // Initialise variables:
set "NAME=Screenshot"
set "PREV="
rem // Loop through all matching files:
for /F "delims= eol=|" %%F in ('
dir /S /B /A:-D "*.png"
') do (
rem // Store current file path and extension:
set "FILE=%%~F" & set "PDIR=%%~dpF" & set "EXT=%%~xF"
rem // Check whether parent directory path changed:
setlocal EnableDelayedExpansion
if /I not "!PDIR!"=="!PREV!" (
endlocal
rem // Parent directory path changed, so reset counter:
set /A "COUNT=0"
) else endlocal
rem // Increment index counter:
set /A "COUNT+=1"
rem // Toggle delayed expansion to not lose exclamation marks in file paths:
setlocal EnableDelayedExpansion
rem // Actually rename files:
ECHO ren "!FILE!" "!NAME!(!COUNT!)!EXT!"
endlocal
rem // Store parent path of current file:
set "PREV=%%~dpF"
)
endlocal
测试输出后,删除 ren
!
ECHO
命令