2017-08-01 110 views
0

我试过下面的代码,它显示操作员缺失。我尝试了很多方法,但仍然出现了一些或其他错误。如何批量重命名为name1.ext,name2.ext,name3.ext .......在所有子文件夹中使用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从1开始

+0

什么是原始文件名? – flyhighzy

+0

截图(num).png这里的数字有所不同,它们是随机数,范围从1000-4000 – Karan

+0

列出你的文件夹树和文件,以及你想要重命名的文件 – flyhighzy

回答

1

前面下面的代码可能为你工作:

@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 

在已经测试的输出,删除大写ECHO命令ren之前!

0

它的声音就像你想重命名所有的.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 
1

编辑更改了一批以适应新的要求。

  • 由于当前文件夹是excplicitly设置 它
  • FORFILES会列出所有单个文件,以便ren *.png将不包括路径(如果你坚持要用FORFILES使用你不需要的默认@路见FORFILES /?
  • 我建议使用一个用于/ R遍历所有文件夹和一个FOR/F每个文件夹中解析DIR输出。

@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 
) 

如果输出看起来OK中的回声在Ren

+0

我尝试了批处理命令我想它的工作,但事情是我想每次文件名从1 2 3开始等等...例如,如果我有2个子文件夹为foo1和foo2,foo1有27个文件,foo2有54个文件,然后我想重命名为foo1中的1到27,foo2中的1到54。 我希望我很清楚。 – Karan

+0

我明白了,但是这个信息应该放在你的[已编辑的问题](https://stackoverflow.com/posts/45437751/edit) – LotPings

+0

我对此非常抱歉,请原谅我。我现在可以编辑和添加此信息吗? – Karan