【问题标题】:Rename only a specific part of every filename in a folder仅重命名文件夹中每个文件名的特定部分
【发布时间】:2018-07-17 13:13:43
【问题描述】:

例如,我想替换 -v2 的每个文件名中的所有 -v1 部分。它几乎可以工作,但访问被拒绝,因为 cmd 进程本身在执行期间正在使用这些文件。我当前的代码是:

for /f "delims=" %%a in ('dir /a-d /b *-v1*') do ren "%%a" "%%a:-v1=-v2"

有什么建议吗? :)

编辑:

我也尝试过for /r %%i in ("*-v1*") do ren "%%~nxi" "%%~nxi:-v1=-v2",它找到了文件并使用了正确的重命名值,但仍然输出它无法访问该文件,因为它正在被另一个进程使用。我确定该进程是 cmd.exe 本身,因为在我关闭命令提示符后,我可以手动更改文件名而不会出现任何问题。

我还尝试将当前文件名写入临时 .txt 文件,因为我想重命名的文件不会被任何命令使用。然后在 for 循环中使用 type 命令读取文件以重命名每个文件,但相同。

这很令人沮丧,感谢任何帮助:)

【问题讨论】:

    标签: command-line cmd command command-prompt


    【解决方案1】:

    子字符串替换不适用于 for 变量 (%%a)。使用“正常”变量和delayed expansion:

    @echo off
    setlocal enabledelayedexpansion
    for /f "delims=" %%a in ('dir /a-d /b *-v1*') do (
      set filename=%%a
      ren "%%a" "!filename:-v1=-v2!"
    )
    

    【讨论】:

    • 谢谢!有用。我几乎要头疼了:P 不知道子字符串替换不适用于 (%%i) 类型的变量 :) 而且它也需要 enable enabledelayedexpansion 才能工作,我也不知道。跨度>
    猜你喜欢
    • 2021-10-21
    • 2018-05-28
    • 2021-06-21
    • 2018-04-17
    • 2021-04-10
    • 1970-01-01
    • 2012-10-18
    • 2014-01-06
    • 1970-01-01
    相关资源
    最近更新 更多