【问题标题】:windows batch file renamewindows批处理文件重命名
【发布时间】:2012-12-10 09:24:07
【问题描述】:

我在 Windows 7 中有一些文件,例如 AAA_a001.jpgBBB_a002.jpgCCC_a003.jpg 我正在尝试使用批处理将这些文件重命名为a001_AAA.jpga002_BBB.jpga003_CCC.jpg

只是为了在_之间交换内容。

我一直在寻找一段时间,但仍然不知道如何做到这一点。 任何人都可以帮忙吗? 谢谢。

【问题讨论】:

    标签: batch-file rename


    【解决方案1】:

    你可以试试这个代码:

    echo off
    cd D:\TEMP
    for %%A IN (*.jpg) do (
     call :dothings "%%A"
    )
    cd D:\2
    goto :eof
    
    :dothings
    set A=%1
    set P=%A:~1,12%
    set Q=%A:~14,4%
    set B="%Q% %P%.jpg"
    ren %a% %b%
    goto :eof
    

    它将例如“Untitled-227 1965.jpg”重命名为“1965 Untitled-227.jpg”

    【讨论】:

      【解决方案2】:

      PowerShell 方式适用于我,并且更易于理解和更改。但是,在我稍作更改之前,出现了 rename-item : Source and destination path must be different 之类的错误。 仅重命名文件夹的文件:

      目录 | Where-Object {$.Name -match 'replaceMe'} | Rename-Item -NewName { $.Name -replace 'replaceMe','myNewText' }

      递归重命名文件夹和子文件夹的文件:

      Get-ChildItem -Recurse | Where-Object {$.Name -match '.Core.'} | Rename-Item -NewName { $.Name -replace '.Core.','.Framework.' }

      【讨论】:

        【解决方案3】:

        我通过 PowerShell 找到了这个解决方案:

        dir | rename-item -NewName {$_.name -replace "replaceME","MyNewTxt"}

        这将重命名当前文件夹中所有文件的部分内容。

        【讨论】:

        • 这里发生了一些奇怪的事情,因为这会破坏文件名。也许 -replace 参数接受正则表达式或其他东西
        【解决方案4】:
        @echo off
        pushd "pathToYourFolder" || exit /b
        for /f "eol=: delims=" %%F in ('dir /b /a-d *_*.jpg') do (
          for /f "tokens=1* eol=_ delims=_" %%A in ("%%~nF") do ren "%%F" "%%~nB_%%A%%~xF"
        )
        popd
        

        注意:名称在第一次出现 _ 时被拆分。如果一个文件被命名为“part1_part2_part3.jpg”,那么它将被重命名为“part2_part3_part1.jpg”

        【讨论】:

        • 这正是我所需要的。谢谢!!
        • 仍然是一个小问题:它也交换了“.jpg”。前任。 part1_part2.jpg => part2.jpg_part1 Orz
        • @raphael0914 - ???它非常适合我:part1_part2.jpg --> part2_part1.jpg
        【解决方案5】:

        我在代码中重命名

        echo off
        
        setlocal EnableDelayedExpansion
        
        for %%a in (*.txt) do (
            REM echo %%a
            set x=%%a
            set mes=!x:~17,3!
        
            if !mes!==JAN (
                set mes=01
            )
        
            if !mes!==ENE (
                set mes=01
            )
        
            if !mes!==FEB (
                set mes=02
            )
        
            if !mes!==MAR (
                set mes=03
            )
        
            if !mes!==APR (
                set mes=04
            )
        
            if !mes!==MAY (
                set mes=05
            )
        
            if !mes!==JUN (
                set mes=06
            )
        
            if !mes!==JUL (
                set mes=07
            )
        
            if !mes!==AUG (
                set mes=08
            )
        
            if !mes!==SEP (
                set mes=09
            )
        
            if !mes!==OCT (
                set mes=10
            )
        
            if !mes!==NOV (
                set mes=11
            )
        
            if !mes!==DEC (
                set mes=12
            )
        
            ren %%a !x:~20,4!!mes!!x:~15,2!.txt 
        
            echo !x:~20,4!!mes!!x:~15,2!.txt 
        
        )
        

        【讨论】:

          【解决方案6】:

          正如 Itsproinc 所说,REN 命令有效!

          但如果您的文件路径/名称有空格,请使用引号“”

          示例:

          ren C:\Users\&username%\Desktop\my file.txt not my file.txt
          

          添加“”

          ren "C:\Users\&username%\Desktop\my file.txt" "not my file.txt"
          

          希望对你有帮助

          【讨论】:

            【解决方案7】:

            我假设您知道_ 之前和下划线之后的部分的长度,以及扩展名。如果你不这样做,它可能比一个简单的子字符串更复杂。

            cd C:\path\to\the\files
            for /f %%a IN ('dir /b *.jpg') do (
            set p=%a:~0,3%
            set q=%a:~4,4%
            set b=%p_%q.jpg
            ren %a %b
            )
            

            我只是想出了这个脚本,我没有测试它。查看thisthat 了解更多信息。

            如果您想假设您不知道 _ 的位置以及长度和扩展名,我认为您可以使用 for 循环来检查 _ 的索引,然后是最后一个索引在. 中,将其包装在goto 中并使其工作。如果您愿意解决这个问题,我建议您至少使用 WindowsPowerShell(或 Cygwin)(为了您自己)或安装更高级的脚本语言(想想 Python/Perl),您将获得更多支持方式。

            【讨论】:

              【解决方案8】:

              使用REN 命令

              Ren 代表rename

              ren ( where the file is located ) ( the new name )
              

              例子

              ren C:\Users\&username%\Desktop\aaa.txt bbb.txt
              

              它将 aaa.txt 更改为 bbb.txt

              您的代码将是:

              ren (file located)AAA_a001.jpg a001.AAA.jpg
              
              ren (file located)BBB_a002.jpg a002.BBB.jpg
              
              ren (file located)CCC_a003.jpg a003.CCC.jpg
              

              等等

              IT WILL NOT WORK IF THERE IS SPACES!
              

              希望对你有帮助:D

              【讨论】:

              • just to swap the content between '_'你明白问题是什么吗?
              • 我知道我应该使用 ren 来重命名文件,但我的问题是我不知道如何进行那些字符串操作 Orz
              • 不是真的:/ 请使用 关于交换内容的良好解释
              • 有一个类似于PART1_PART2.EXT 的模式,OP 想要将某个目录中的所有文件重命名为PART2_PART1.EXT。我猜:P
              • 我想交换'_'之间的内容,例如:AAA_BBB.txt => BBB_AAA.txt