Batch file 从一个列表中搜索文件名,并将其替换为批处理中的另一个列表

Batch file 从一个列表中搜索文件名,并将其替换为批处理中的另一个列表,batch-file,rename,batch-rename,Batch File,Rename,Batch Rename,我有两个文件: old_names.txt oldname1 oldname2 new_names.txt newname1 newname2 我想在我的文件夹中搜索包含“旧名称”的文件名,并用相应的“新名称”替换“旧名称”字符串 如何检索相应的新名称?根据我的评论。创建一个名为names.txt的文件,并添加要替换的字符串以及要替换的内容: dummy replacement dummy2 replacement2 然后脚本需要位于同一目录中,或者您必须指定文件的路

我有两个文件:

old_names.txt
  oldname1
  oldname2 

new_names.txt 
  newname1
  newname2 
我想在我的文件夹中搜索包含“旧名称”的文件名,并用相应的“新名称”替换“旧名称”字符串


如何检索相应的新名称?

根据我的评论。创建一个名为
names.txt
的文件,并添加要替换的字符串以及要替换的内容:

dummy replacement
dummy2 replacement2
然后脚本需要位于同一目录中,或者您必须指定文件的路径:

@echo off
setlocal enabledelayedexpansion
for /f "tokens=1,2" %%i in (names.txt) do (
  for /f %%a in ('dir /b /a-d ^| findstr "%%i"') do (
    set "oldname=%%a"
    set "newname=!oldname:%%i=%%j!"
    echo ren "!oldname!" "!newname!"
  )
)
或通过指定路径:

@echo off
setlocal enabledelayedexpansion
for /f "tokens=1,2" %%i in (names.txt) do (
  for /f %%a in ('dir /b /a-d "D:\PATH" ^| findstr "%%i"') do (
    set "oldname=%%a"
    set "newname=!oldname:%%i=%%j!"
    echo ren "!oldname!" "!newname!"
  )
)

一旦您满意它将要替换的文件打印到屏幕上,只需从最后一行代码中删除
echo
,即可实际执行
ren

对于您的文件对概念,如果我理解正确,您基本上需要同时逐行读取这两个文件,这可以如中所示完成。下面是一个可能的代码:

@echo关闭
setlocal EnableExtensions DisableDelayedExpansion
rem//在此处定义常量:
设置“\u ROOT=D:\path\to\ROOT\u dir”&rem/(包含要重命名文件的目录)
设置“\u FILE1=D:\path\to\old\u names.txt”
设置“\u FILE2=D:\path\to\new\u names.txt”
rem//计算第一个文件的行数(未选中第二个文件):
对于/F%%C in(“^<“%\u FILE1%”查找/C/V”“”),请设置“NUM1=%%C”
setlocal EnableDelayedExpansion
rem//更改为根目录:
cd/D“%_根%”| |退出/B 1
rem//此处输入重定向用于同时读取两个文件:
9<“!\u文件1!”8<“!\u文件2!”(
rem//循环第一个文件的行数:
对于(1,1,%NUM1%)中的/L%%I,请执行以下操作(
rem//从第一个文件中读取一行:

你必须把文件名放在两个不同的文件中吗?为什么不把它们放在一个文件中呢?似乎你想批量做
ren file1 file2
,如果你已经知道文件名是什么,只需创建一个用空格分隔的文件。例如
file1.txt file2.txt
和Do
for/f“tokens=1,2”%%i in(names.txt)Do ren“%%i”“%%j”
我在(test.txt)do-ren“%%I”“%%j”中尝试了
for/f“tokens=1,2”%%I
什么都没有发生,我是不是漏掉了一行?你在
test.txt
中有两个文件名?你想重命名的文件和脚本在同一个目录下吗?是的,我想,test.txt是这样的:dummy replacement,我有一个名为tmp_dummy.jpg的文件。它说找不到文件。不,这不会像那样工作。如果你想做艺术替代品,然后你问错了问题。让我补充一下。
@echo off
setlocal enabledelayedexpansion
for /f "tokens=1,2" %%i in (names.txt) do (
  for /f %%a in ('dir /b /a-d "D:\PATH" ^| findstr "%%i"') do (
    set "oldname=%%a"
    set "newname=!oldname:%%i=%%j!"
    echo ren "!oldname!" "!newname!"
  )
)