【问题标题】:How do I rename all files from folder to xxx{incremental}.jpg using command prompt如何使用命令提示符将文件夹中的所有文件重命名为 xxx{incremental}.jpg
【发布时间】:2022-01-10 09:01:50
【问题描述】:

我在文件夹中有以下同名文件。只有扩展名不同。所有文件都是有效的 jpg,但扩展名错误。

如何将它们重命名为 .jpg,并使用不同的前缀?

ren *.* *.jpg ----> 不适合我,因为它们都有相同的前缀

【问题讨论】:

    标签: powershell batch-file command-line windows-administration


    【解决方案1】:

    您可以在命令提示符、PowerShell 提示符或批处理文件中使用ForFiles 实用程序来执行此类任务。

    forfiles /p "C:\directory\with\images" /m "1.*" /c "cmd /c ren @file image.@ext.jpg"
    

    【讨论】:

      【解决方案2】:

      这应该适合你:

      Clear-Host
      $directoryPath = "C:\directory\with\images"
      #Getting all files with "1.*" from $directoryPath
      $foldercontent = Get-ChildItem -Path $directoryPath -Filter "1.*" | Where-Object { ! $_.PSIsContainer }
      foreach($item in $foldercontent) {
          Move-Item -Path $item.FullName -Destination "$directoryPath\image$($item.Extension).jpg"
      }
      

      文件名将是:

      image.J84.jpg
      image.J85.jpg
      

      【讨论】:

      • 可以用命令提示符吗?
      • @SameerPatkar 是的,它在 powershell 中工作。使用一行$foldercontent = Get-ChildItem -Path "C:\tmp" -Filter "1.*" | Where-Object { ! $_.PSIsContainer }; foreach($item in $foldercontent) { Move-Item -Path $item.FullName -Destination "C:\tmp\image$($item.Extension).jpg" };
      【解决方案3】:

      可以使用以下批处理文件将1.J73之类的文件重命名为image_73.jpg

      @echo off
      setlocal EnableExtensions DisableDelayedExpansion
      set "ImageFolder=C:\directory\with\images"
      for /F "tokens=2 delims=Jj." %%I in ('dir "%ImageFolder%\1.J*" /A-D /B 2^>nul') do ren "%ImageFolder%\1.J%%I" "image_%%I.jpg"
      endlocal
      

      通过命令行在后台又执行了一个命令进程:

      C:\Windows\System32\cmd.exe /c dir "C:\directory\with\images\1.J*" /A-D /B 2>nul
      

      DIR在指定目录中搜​​索

      • 只是文件,因为选项 /A-D(属性不是目录)
      • 匹配通配符模式1.J*
      • 由于选项/B 将找到的文件名不带路径以裸格式输出到后台命令进程的句柄STDOUT(标准输出)。

      DIR 将输出一条错误消息来处理 STDERR(标准错误),因为找不到任何匹配的文件。通过使用 2>nul 将其重定向到设备 NUL 来抑制此错误消息。

      阅读有关 Using command redirection operators 的 Microsoft 文档,了解有关 2>nul 的说明。重定向运算符 > 必须在 FOR 命令行上使用插入字符 ^ 进行转义,以便在 Windows 命令解释器在执行命令 FOR 之前处理此命令行时解释为文字字符> 在后台启动的单独命令进程中执行嵌入的dir 命令行。

      DIRSTDOUT 的输出由 Windows 命令处理器 cmd.exe 处理批处理文件并在启动 cmd.exe 关闭后逐行处理。

      FOR 带有选项/F 忽略此处不出现的空行。默认情况下,非空行将使用普通空格和水平制表符作为字符串分隔符拆分为子字符串。接下来将检查第一个子字符串的第一个字符是否为分号,分号默认为行尾字符,在这种情况下,该行将被忽略以进行进一步处理。否则将第一个子字符串分配给指定的循环变量,FOR 循环体中的命令由cmd.exe 执行。

      行处理的默认行为由使用的选项tokens=2delims=Jj. 修改。字符串分隔符用Jj. 重新定义,这意味着像1.J73 这样的文件名被分成两个子字符串173。选项tokens=2 指示FOR 将第二个子字符串(令牌)分配给指定的循环变量I。默认的eol=; 被保留,因为在这种情况下第一个子字符串总是1,因此这里没有文件名被忽略。因此对于名称为1.J731.j73 的文件,字符串73 被分配给循环变量I

      然后重命名命令 REN 使用当前文件的完全限定文件名和带有前缀 image_ 的新文件名和来自现有文件名的文件编号和文件扩展名执行.jpg。因此,如果还没有名称为 image_73.jpg 的文件并且应用程序当前未以阻止重命名文件的方式打开要重命名的文件,则该文件将从 1.J73 重命名为 image_73.jpg应用。

      要了解所使用的命令及其工作原理,请打开command prompt 窗口,在其中执行以下命令,并仔细阅读每个命令显示的所有帮助页面。

      • cmd /?
      • dir /?
      • echo /?
      • endlocal /?
      • for /?
      • ren /?
      • set /?
      • setlocal /?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-04-21
        • 1970-01-01
        • 2018-04-07
        • 2012-10-31
        • 2014-08-19
        • 1970-01-01
        • 2013-08-13
        • 2015-01-22
        相关资源
        最近更新 更多