Batch file 使用两个txt文件复制和重命名文件

Batch file 使用两个txt文件复制和重命名文件,batch-file,copy,Batch File,Copy,我不太熟悉批处理脚本,因此我非常感谢您的帮助! 我一直在尝试使用两个txt文件复制和重命名一组文件。 chart_list.txt文件将具有原始名称 chart_list.txt Chart_A1_86_88.png Chart_A2_86_88.png Chart_B1_86_88.png Chart_B2_86_88.png newchart_list.txt文件将具有目标名称 newchart_list.txt Chart_A1.png Chart_A2.png Chart_B1.png

我不太熟悉批处理脚本,因此我非常感谢您的帮助! 我一直在尝试使用两个txt文件复制和重命名一组文件。 chart_list.txt文件将具有原始名称

chart_list.txt
Chart_A1_86_88.png
Chart_A2_86_88.png
Chart_B1_86_88.png
Chart_B2_86_88.png
newchart_list.txt文件将具有目标名称

newchart_list.txt
Chart_A1.png
Chart_A2.png
Chart_B1.png
Chart_B2.png
查看以下帖子(和),我得出以下结论:

setlocal enableextensions enabledelayedexpansion
@echo off

set src_folder=C:\Source
set dst_folder=C:\Destination
set flag=0
for /f "tokens=*" %%i in (chart_list.txt) DO (
set /A flag+=1
echo !flag!
set flag2=0
    for /f "tokens=*" %%j in (newchart_list.txt) DO (
        set /A flag2+=1
        echo !flag2!
        if !flag! == !flag2! (
        copy "%src_folder%\%%i" "%dst_folder%\%%j" /Y
        )
    )
)
@pause
这样做的目的是在图表列表和新图表列表的第一行中找到要匹配的名称。 但是,当我执行命令时,什么也没有发生。 cmd窗口显示

1
0
0
0
0
2
0
0
0
0
3
0
0
0
0
4
0
0
0
0
(我添加了
echo
命令,以查看flag和flag2是否在实际更改,但对于仍然设置为0的flag2,情况似乎并非如此)


非常感谢您的帮助

这里有一种方法:

@Echo关闭
SetLocal DisableDelayedExpansion
设置“fileOld=chart\u list.txt”
设置“fileNew=newchart\u list.txt”
设置“dirSrce=C:\Source”
设置“dirDest=C:\Destination”

(对于/F“UseBackQ令牌=*”%%A In(“%fileOld%”)Do(设置/P“B=“

以下是一种方法:

@Echo关闭
SetLocal DisableDelayedExpansion
设置“fileOld=chart\u list.txt”
设置“fileNew=newchart\u list.txt”
设置“dirSrce=C:\Source”
设置“dirDest=C:\Destination”

(对于“%fileOld%”中的/F“UseBackQ令牌=*”%%A)执行(设置/P“B=“

更简单,但效率不高:

@echo off
setlocal

set src_folder=C:\Source
set dst_folder=C:\Destination

for /f "tokens=1* delims=:" %%i in ('findstr /N "^" chart_list.txt') DO (
    for /f "tokens=1* delims=:" %%x in ('findstr /N "^" newchart_list.txt') DO (
        if %%i == %%x (
            copy "%src_folder%\%%j" "%dst_folder%\%%y" /Y
        )
    )
)
pause

如果要处理的文件很大,最好使用此处建议的任何其他方法。请参见更简单但效率不高的:

@echo off
setlocal

set src_folder=C:\Source
set dst_folder=C:\Destination

for /f "tokens=1* delims=:" %%i in ('findstr /N "^" chart_list.txt') DO (
    for /f "tokens=1* delims=:" %%x in ('findstr /N "^" newchart_list.txt') DO (
        if %%i == %%x (
            copy "%src_folder%\%%j" "%dst_folder%\%%y" /Y
        )
    )
)
pause

如果要处理的文件很大,最好使用此处建议的任何其他方法。请参见

例如
set flag=0
批处理对
set
语句中的空格敏感。
set flag=N
将名为“flag[Space]”的变量设置为“[Space]N”
flag[Space]
Flag
@Magoo不一样,非常感谢!我根据你的评论编辑了这篇文章,但无法让flag2“偏离”0…有一个输入错误:
设置a/flag2+=1
应该读
设置/a flag2+=1
(注意
//code>的位置)…由于链接和打字错误,或@aschipfl可能重复。问题已被编辑。批处理对
set
语句中的空格敏感。
set flag=N
将名为“flag[Space]”的变量设置为“[Space]N”
flag[Space]
Flag
@Magoo不一样,非常感谢!我根据你的评论编辑了这篇文章,但无法让flag2“偏离”0…有一个输入错误:
设置a/flag2+=1
应该读
设置/a flag2+=1
(注意
//code>的位置)…可能重复或@aschipfl感谢链接和打字错误。问题已编辑