Board logo

标题: [文件操作] 批处理如何将txt文件内容按行给当前目录下的文件夹重命名 [打印本页]

作者: Msaki    时间: 2020-6-1 20:46     标题: 批处理如何将txt文件内容按行给当前目录下的文件夹重命名

例:当前目录下有三个文件夹 分别为 a,b,c。还有一个名为aaa.txt的文本文件。
aaa.txt文件的内容:第一行为"你",第二行为"我",第三行为"他".
需求:将aaa.txt文件内容的每一行分别作为名字重命名a,b,c三个文件夹。使得三个文件夹a,b,c的名字分别变为"你","我","他"。
谢谢各位大佬!!
作者: flashercs    时间: 2020-6-1 23:42

  1. @echo off
  2. cd /d "%~dp0"
  3. <aaa.txt call :main
  4. pause
  5. exit /b
  6. :main
  7. setlocal EnableDelayedExpansion
  8. for /d %%A in (*) do (
  9.   set /p newname=
  10.   echo ren "%%A" "!newname!"
  11.   ren "%%A" "!newname!"
  12. )
  13. endlocal
复制代码

作者: Msaki    时间: 2020-6-2 10:57

回复 2# flashercs
谢谢大佬,实测可用。如果有人也使用这个bat的话注意一下,今天测试的时候发现txt文件如果是UTF-8编码,而不是ANSI编码的话会出现问题。附昨天找到的另一种bat代码可同样实现这个功能,当然txt文件也必须为ANSI编码
  1. @echo off
  2. (for /f "delims=" %%i in ('dir/b/ad')do (
  3. echo %%i
  4. set/p "n="
  5. if defined n call ren "%%i" "%%n%%"
  6. ))<aaa.txt
  7. pause
复制代码

作者: smss    时间: 2020-6-2 11:04

名称中含中文需要ANSI编码 常识了
作者: Batcher    时间: 2020-6-2 11:22

回复 4# smss


    即使不含中文,用UTF-8编码也会出错吧。
作者: smss    时间: 2020-6-2 13:00

  1. @echo off
  2. (for /f "delims=" %%i in ('dir/b/ad')do set/p "n="&if defined n call ren "%%i" "%%n%%")<aaa.txt
  3. pause
复制代码
借助call实现变量的延迟读取与嵌套但效率不高
  1. @echo off&setlocal enabledelayedexpansion
  2. (for /f "delims=" %%i in ('dir/b/ad')do set/p "n="&if defined n ren "%%i" "!n!")<aaa.txt
  3. pause
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2