如何使用 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 命令