【问题标题】:Rename multiple files without parentheses/remove parentheses windows重命名不带括号的多个文件/删除括号窗口
【发布时间】:2012-12-05 17:12:02
【问题描述】:

我想从任何地方开始以数字递增的顺序重命名大量文件。 但是当我重命名多个文件时,它给我留下了括号。 例如,我将文件重命名为 abc_.jpeg 它会导致 abc_(1).jpeg、abc_(2).jpeg 等等。

我尝试使用命令提示符重命名

ren abc_(*).jpeg abc_*.jpeg
不起作用。可能是因为括号

ren abc_"("*")".jpeg abc_*.jpeg
重命名文件,但产生与以前相同的文件名。 我只是想以某种方式删除括号。

【问题讨论】:

    标签: windows cmd rename


    【解决方案1】:

    要删除括号,您必须进行一些字符串操作。我已经编写了一个批处理文件来执行此操作(另存为.bat

    cd C:\folder
    setlocal enabledelayedexpansion
    for %%a in (abc_*.jpeg) do (
    set f=%%a
    set f=!f:^(=!
    set f=!f:^)=!
    ren "%%a" "!f!"
    )
    

    我不认为你可以从命令行轻松地在一行中执行此操作,这可能是可能的,但它不会很漂亮。如果你能帮助它使用这个批处理文件来删除括号。

    【讨论】:

    • +1,但您应该在源名称和目标名称周围加上引号,以防出现空格或其他特殊字符。如果名称可以包含!,则还需要延迟扩展切换。
    • 此解决方案将去除所有括号。如果在下划线之前有额外的括号,这可能是个问题。
    • 谢谢。我想是的,但我只是根据 OP 中提出的要求来回答。如果它变得更复杂,我会把它留给你:)
    • @ApexFred 在另外两行下面添加这一行:set f=!f:^ =!
    • @BaliC 哎呀,我忽略了它(;^ω^)谢谢!
    【解决方案2】:

    在文件资源管理器窗口中,选择所有文件,右键单击并选择重命名。 Windows 将选择起始数字作为圆括号之间提供的数字,因此请使用比所需位数多 1 位的数字命名文件。

    示例:我们想要模式“test_xxx”。使用文件资源管理器,将文件重命名为“tes(1000)”。您的文件现在将命名为 ["tes(1000)"、"tes(1001)"、"tes(1002)" 等..]。按住 SHIFT 并右键单击文件资源管理器的打开区域,然后选择“在此处打开命令窗口”。发出以下命令:

    ren *.* test_???.*
    

    这会将所有文件重命名为正确的格式[“test_000”、“test_001”、“test_002”等]。

    【讨论】:

    • 很好的解决方案,因为它是一个单一的衬垫。但在 Windows 10 上,“在此处打开命令窗口”已被“在此处打开 PowerShell”替换。要与 powershell 相同,请使用 $nr=1; Dir | %{Rename-Item $_ -NewName ("test_{0:000}$($_.Extension)" -f $nr++)}$n=1 以 1 初始化计数器。例如,要从更高的索引开始使用 $n=100
    【解决方案3】:

    聚会有点晚了,但这里是删除括号和自动创建的空格的组合。此代码的工作原理是将 .bat 文件放在包含您要修改的所有文件的文件夹中。

    将代码复制粘贴到记事本中,保存为sequentialFileNameCleaner.bat

    您的文件名必须与第一行 sequentialFileNameCleaner.bat 上的文件名相同。话虽如此,如果您想更改文件名,您可以手动更新第一行。

    :sequentialFileNameCleaner  [/R]  [FolderPath]
    setlocal enabledelayedexpansion
    for %%a in (*.jpg) do (
    set f=%%a
    set f=!f:^(=!
    set f=!f:^)=!
    ren "%%a" "!f!"
    )
    @echo off
    setlocal disableDelayedExpansion
    if /i "%~1"=="/R" (
      set "forOption=%~1 %2"
      set "inPath="
    ) else (
      set "forOption="
      if "%~1" neq "" (set "inPath=%~1\") else set "inPath="
    )
    for %forOption% %%F in ("%inPath%* *") do (
      if /i "%~f0" neq "%%~fF" (
        set "folder=%%~dpF"
        set "file=%%~nxF"
        setlocal enableDelayedExpansion
        echo ren "!folder!!file!" "!file: =!"
        ren "!folder!!file!" "!file: =!"
        endlocal
      )
    
    )
    

    默认情况下,此代码只会定位 .jpg 文件。在第 3 行,将 (*.jpg) 更改为 (*.png)(*.mp4) 或任何您想要的扩展名将使代码兼容。

    【讨论】:

      【解决方案4】:

      当我们需要将包含特定括号的文件名列表传递给脚本时,问题就出现了。以下确实适用于此。在本例中,我们将括号改为下划线。

      SET fileList=%*
      SET delim1=aaaaaaaaaaaaa
      SET delim2=zzzzzzzzzzzzz
      setlocal enabledelayedexpansion
      SET fileList=!fileList:^(=%delim1%!
      SET fileList=!fileList:^)=%delim2%!
      FOR %%f in (%fileList%) DO (
       SET f1=%%~f
       SET f1=!f1:%delim1%=^(!
       SET f1=!f1:%delim2%=^)!
       SET f2=%%f
       SET f2=!f2:%delim1%=_!
       SET f2=!f2:%delim2%=_!
       FOR %%i IN (!f2!) DO RENAME "!f1!" "%%~nxi"
      )
      

      【讨论】:

        猜你喜欢
        • 2015-01-27
        • 1970-01-01
        • 1970-01-01
        • 2019-09-04
        • 2014-07-06
        • 1970-01-01
        • 2021-09-12
        • 2022-10-19
        • 1970-01-01
        相关资源
        最近更新 更多