【问题标题】:Changing folder name with names from a file using batch使用批处理从文件中更改文件夹名称
【发布时间】:2015-05-04 18:36:47
【问题描述】:

我想编写一个批处理脚本来重命名目录中的文件夹。

可行的方法是,我将拥有一个包含我希望每个文件夹重命名的名称的文件。所以基本上批处理脚本只会从文件中选择名称(包含名称)并使用它来重命名每个文件夹。

因此,如果我有 20 个文件夹,则文件中将存在 20 个名称来重命名每个文件夹。

我目前所拥有的:

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
SET old=*.txt
SET new="c:\Users\user\Desktop\testing.txt" 
< %new% (for /f "tokens=*" %%f in ('dir /b %old%') do (
   ren Read the next name from the redirected input file
   SET /P newname=
   ren "%%f" "!newname!" 
))

上面的脚本没有给我想要的结果。

【问题讨论】:

  • set /p 逐行读取文件的方法不适用于 FOR 循环
  • @npocmaka:set /P 命令放在 FOR 循环中是合并两个文件的最简单的方法。请参阅this example,或this one,或更多...您甚至可以使用此方法通过set /p 将一个文件通过FOR 与多个输入文件 合并,如@ 987654323@, 或..

标签: batch-file renaming


【解决方案1】:

未测试:

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
SET old=*.txt
SET new="c:\Users\user\Desktop\testing.txt"
set counter=0 
(for /f "tokens=*" %%f in ('dir /b %old%') do (
   ren Read the next name from the redirected input file
   set /a counter=counter+1
   for /f "tokens=1* delims=:" %%a in ('findstr /R /N "^" "%new%"^|find "!counter!"') do set "newname=%%b" 
   ren "%%f" "!newname!" 
)

【讨论】:

    【解决方案2】:

    问题在于dir /b %old% 命令会生成一个带有.txt 扩展名的文件 列表。如果您想重命名文件夹,则包含/AD 开关并消除通配符:

    @echo off
    SETLOCAL ENABLEDELAYEDEXPANSION
    SET new="c:\Users\user\Desktop\testing.txt" 
    < %new% (for /f "tokens=*" %%f in ('dir /b /AD') do (
       ren Read the next name from the redirected input file
       SET /P newname=
       ren "%%f" "!newname!" 
    ))
    

    【讨论】:

    • 这个脚本可以简化吗?它似乎不起作用。可能是什么问题?有什么需要取出或添加的吗?
    • 脚本已经很简单了。您可以在ren (echo ren "%%f" "!newname!") 之前插入一个echo 命令,这样您就可以看到执行的命令。另外,请确保dir /b /AD 命令和文件内容正确。如果这无助于确定问题,请删除@echo off 行,从命令行窗口执行脚本(not 来自资源管理器),以便您可以查看执行的确切内容...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-22
    • 2016-09-11
    • 2014-02-02
    • 2015-10-28
    • 2014-12-09
    • 1970-01-01
    • 2017-05-14
    相关资源
    最近更新 更多