Batch file 从文本文件批量读取和重命名问题?
我是.bat文件的初学者,我正在尝试使用记事本中生成的列表重命名多个图形(.dwg)文件。记事本列表包含如下所示的图形编号列表:Batch file 从文本文件批量读取和重命名问题?,batch-file,scripting,rename,Batch File,Scripting,Rename,我是.bat文件的初学者,我正在尝试使用记事本中生成的列表重命名多个图形(.dwg)文件。记事本列表包含如下所示的图形编号列表: 01013-13000p001 06301-12550p001 等等 有数百个,我想从文本中提取这些数字,并将其放入一系列空白的dwg文件中,这些文件现在是通用名称(drawing.dwg、drawing(2).dwg、drawing(3).dwg等)。我只想到了一种读取文本文件的方法,但无法理解如何从文本文件中提取并用它重命名多个图形文件。以下是我在尝试从文本文件
01013-13000p001
06301-12550p001
等等
有数百个,我想从文本中提取这些数字,并将其放入一系列空白的dwg文件中,这些文件现在是通用名称(drawing.dwg、drawing(2).dwg、drawing(3).dwg等)。我只想到了一种读取文本文件的方法,但无法理解如何从文本文件中提取并用它重命名多个图形文件。以下是我在尝试从文本文件读取内容并将其放入.dwg文件失败后得到的信息。我计划在所有相同的目录中解决这个问题,任何建议都将不胜感激。谢谢
@echo off
for /f "tokens=* delims=" %%x in (dwgNumbers.txt.txt) do echo %%x
pause
会
(作为批处理行)做你想做的事?-请注意,
ECHO
关键字用于显示将要执行的操作。需要删除echo
关键字才能实际执行copy
这将获取.txt
中的数字,用读取的数据重命名现有的.dwg
文件。如果有更多的文件在.txt
中编号,它将重命名,直到编号用尽为止,没有更多
for
循环使用dir
命令获取文件列表,以避免重命名后落入for
过滤器并重新处理的文件
此代码在重命名行中包含一个echo
命令,以防止出现故障时数据丢失。当需要控制台的输出时,从重命名行中删除echo
命令
@echo off
rem Prepare environment
setlocal enableextensions enabledelayedexpansion
rem Read input file for numbers
< dwgNumbers.txt (
rem Process dwg files in directory
for /f "tokens=*" %%f in ('dir /b *.dwg') do (
rem Get number from input file
set "number="
set /p "number="
rem If there is a number, rename the file
if defined number echo ren "%%~f" "!number!.dwg"
)
)
rem Clean
endlocal
@echo关闭
rem准备环境
setlocal enableextensions enabledelayedexpansion
rem读取数字输入文件
是否所有二进制文件都相同?或者当前文件和新文件名之间是否存在关系?@foxidrive该图形文件只是一个空白的通用图形,我复制了20次,MS Windows在复制时分配了(1、2、3等)。然后我想从文本文件中提取名称,并用它们重命名复制的图形。是否按特定顺序?@除非它们没有特定顺序。它似乎不起作用,不会返回任何错误。但它所做的只是获取相同的drawing1.dwg(或“blank generic drawing.dwg”)并将其返回到命令prompte:C:\Users\MRG123\Desktop\New folder>echo copy/b“drawing1.dwg”01222-52003p001.dwg“copy/b”drawing1.dwg“01222-52003p001.dwg”由于某些原因,它不会重命名空白文件。HMM -你确信<代码>回声< /代码>是否如你所示,出现在提示之后?不应出现单词echo
。不管怎样,如果删除echo
,使该行显示为…do copy/b..
,则文本文件中的01222-52003p001.dwg
及其好友将从绘图
.dwg`中创建,从而省去了创建20个副本的麻烦。或者有20个不同的“空白”文件需要复制吗?下面是我尝试执行的操作的屏幕截图,这可能会更好地解释它:您没有删除echo
语句顺便说一句,它会将单个文件复制到每个新文件名,并且不需要所有重复的副本。它将只使用一个副本,并使用新的文件名生成一个额外的副本堆栈。
@echo off
rem Prepare environment
setlocal enableextensions enabledelayedexpansion
rem Read input file for numbers
< dwgNumbers.txt (
rem Process dwg files in directory
for /f "tokens=*" %%f in ('dir /b *.dwg') do (
rem Get number from input file
set "number="
set /p "number="
rem If there is a number, rename the file
if defined number echo ren "%%~f" "!number!.dwg"
)
)
rem Clean
endlocal