windows批处理文件重命名

Posted

技术标签:

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

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

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

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

【问题讨论】:

【参考方案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
)

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

如果您想假设您不知道 _ 的位置以及长度和扩展名,我认为您可以使用 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

以上是关于windows批处理文件重命名的主要内容,如果未能解决你的问题,请参考以下文章

windows批处理文件重命名

使用 Windows 批处理脚本重命名目录中的所有文件

使用 Windows 批处理脚本重命名目录中的所有文件

windows dos 批量重命名文件

windows dos 批量重命名文件

递归批量重命名文件扩展名(Windows批处理)