【问题标题】:How to rename the files in the path with new different names in batch?如何用新的不同名称批量重命名路径中的文件?
【发布时间】:2017-07-21 12:39:35
【问题描述】:

我有一个文件 destination.txt,其中包含有关我的 CD 的路径信息:

 C:\Users\NekhayenkoO\Desktop\LOG Dateien CD Imaging\SME99.ISO
C:\Users\NekhayenkoO\Desktop\LOG Dateien CD Imaging\Biomasse.iso 
C:\Users\NekhayenkoO\Desktop\LOG Dateien CD Imaging\SAMPE36.ISO

现在我必须用 PPN.txt 文件中的数字一个接一个地重命名 ISO:

470692405 
394006801 
348117876 

应该是这样的

SME99.ISO -> 470692405.ISO
Biomasse.iso -> 394006801.ISO
Sampe36.ISO -> 348117876.ISO

我有以下代码:

< "PPN.txt"  (for /F "usebackq delims=" %%a in ("destination.txt") do (
  set/P out="" & rename "%%a" "!out!%%~xa" 

我想修改代码,使其适用于文件destination.txt:

Success on: "C:\Users\NekhayenkoO\Desktop\LOG Dateien CD Imaging\SME99.ISO" 
Error on:   "C:\Users\NekhayenkoO\Desktop\LOG Dateien CD Imaging\Biomasse.iso" 
Success on: "C:\Users\NekhayenkoO\Desktop\LOG Dateien CD Imaging\SAMPE36.ISO" 

如果“Success on”保留在destination.txt 中的路径之前,则应像往常一样仅使用PPN.txt 中的数字重命名图像。 但是,如果“Error on”停留在destination.txt 中的路径之前,则应将图像重命名为 PPN.txt% 中的 e_%number 。所以应该有额外的前缀e_

【问题讨论】:

    标签: batch-file for-loop rename


    【解决方案1】:

    编辑 Batch 现在考虑前缀,将冒号处的destination.txt 分割成%%A%%B

    @Echo off&SetLocal EnableExtensions EnableDelayedExpansion
    < "PPN.txt"  (
        for /F "usebackq tokens=1,* delims=:" %%A in ("destination.txt") do (
            Set "out="
            Set /P "out="
            Set "out=!out: =!"
            If /i "%%A" equ "Success on" (
                ren %%B "!out!.ISO" && echo Renamed %%B to "!out!.ISO" 
            ) Else If /i "%%A" equ "Error on" (
                ren %%B "e_!out!.ISO"  && echo Renamed %%B to "e_!out!.ISO" 
            ) Else (Echo unknown prefix "%%~A")
        ) 
    )
    

    模拟的 ISO 文件返回此输出:

    Renamed  "C:\Users\NekhayenkoO\Desktop\LOG Dateien CD Imaging\SME99.ISO"  to "470692405.ISO"
    Renamed    "C:\Users\NekhayenkoO\Desktop\LOG Dateien CD Imaging\Biomasse.iso"  to "e_394006801.ISO"
    Renamed  "C:\Users\NekhayenkoO\Desktop\LOG Dateien CD Imaging\SAMPE36.ISO"  to "348117876.ISO"
    

    【讨论】:

    • 语法错误错误:“成功:“C:\Users\NekhayenkoO\Desktop\LOG Dateien CD Imaging\SME99.ISO”“语法错误。语法费勒。错误:“错误:“C:\Users\NekhayenkoO\Desktop\LOG Dateien CD Imaging\Biomasse.iso”“语法错误。语法错误。错误:“成功:“C:\Users\NekhayenkoO\Desktop\LOG Dateien CD Imaging\SAMPE36.ISO”“语法错误。
    • 在你的输出中它应该是 Error on: "C:\Users\NekhayenkoO\Desktop\LOG Dateien CD Imaging\Biomasse.iso "而不是 Success on
    • 抱歉,对英语和德语用户帐户进行了一些测试,即使从 powershell 运行批处理也无法得到您描述的错误。如果没有 echo,我会收到类似 The system cannot find the path specified. Error on: "C:\Users\NekhayenkoO\Desktop\LOG Dateien CD Imaging\SME99.ISO" 的错误。语法错误让我假设在传输代码时出现错误。您是否将批次复制并粘贴并保存为纯 ascii?
    • 我会写 ren "%%~B" ... 而不是 ren "%%~B" ... 以始终正确引用...
    • @aschipfl 因为 %%B 包含前导空格,所以 ~ 不起作用。 Ren 不介意空格,但对于 ~ 修饰符,它不是外引号。
    【解决方案2】:

    试试:

    < PPN.txt (
      for /F "delims=" %%a in (destination.txt) do (
        set/P out="" & rename "%%a" "!out!%%~xa"&&echo Success on: "%%a"||(
          echo Error on:   "%%a" & rename "%%a" "e_!out!%%~xa"
        )
      )
    )
    

    &amp;&amp; 将处理先前操作的成功 (errorlevel 0),|| 将处理失败。

    【讨论】:

    • 我试过了,但它没有重命名。您确定第一行中的变量 %%a 仅属于“”中的路径,没有 Success on: 或 Error on: 吗?
    • 缺少一个右括号。
    • 第三个右括号导致语法错误
    • 是的,缺少括号。未经验证就使用了您的代码!
    • 现在我收到一条错误消息,“for %a in”无法在这个地方进行语法处理
    猜你喜欢
    • 2021-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-29
    • 2012-04-28
    • 1970-01-01
    • 2016-05-20
    相关资源
    最近更新 更多