我对批处理脚本并不熟悉,所以我非常感谢这里的一些帮助! 我一直在尝试使用两个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
查看以下帖子(Copy a list (txt) of files和{{3}}),我想出了以下内容:
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
目的是让图表列表第一行和newchart_list中的名称匹配。 但是,当我执行命令时没有任何反应。 cmd窗口显示
1
0
0
0
0
2
0
0
0
0
3
0
0
0
0
4
0
0
0
0
(我添加了echo
命令来查看flag和flag2是否实际发生了变化,但似乎并非如此,因为flag2仍然设置为0)。
非常感谢您的帮助!
答案 0 :(得分:1)
这是一种方法:
PeriodicWorkRequest.Builder myWorkBuilder =
new PeriodicWorkRequest.Builder(MyWorker.class, 24,
TimeUnit.HOURS);
PeriodicWorkRequest myWork = myWorkBuilder.build();
WorkManager.getInstance().enqueue(myWork);
只需使用您的特定数据填写行@Echo Off
SetLocal DisableDelayedExpansion
Set "fileOld=chart_list.txt"
Set "fileNew=newchart_list.txt"
Set "dirSrce=C:\Source"
Set "dirDest=C:\Destination"
(For /F "UseBackQ Tokens=*" %%A In ("%fileOld%") Do (Set /P "B="<&3
SetLocal EnableDelayedExpansion
Echo(Copy /Y "%dirSrce%\%%A" "%dirDest%\!B!"
EndLocal)) 3<"%fileNew%"
Pause
- 3
上的变量(不要在目录路径中添加尾随反斜杠,也不要包含双引号或删除当前存在的那些)
如果您对输出感到满意,可以从第6
行删除Echo(
并删除最后一行,以实际执行10
程序。
该脚本不会检查这些变量是否有效,是否存在,是否有匹配的行数等。我会留给您根据需要进行处理。
修改强>
这是一种替代方法,更符合原作(但使用Copy
命令):
Find
...并且没有标记或需要延迟扩展,(与Aacini的方法相同,但使用@Echo Off
Setlocal EnableExtensions EnableDelayedExpansion
Set "src_folder=C:\Source"
Set "dst_folder=C:\Destination"
Set "flag=0"
For /F "UseBackQ Tokens=*" %%A In ("chart_list.txt") Do (
Set /A flag+=1
For /F "Tokens=1* Delims=]" %%B In ('
"Find /N /V ""<"newchart_list.txt"|Find "[!flag!]""'
) Do Copy /Y "%src_folder%\%%A" "%dst_folder%\%%C")
代替Find
):
FindStr
答案 1 :(得分:1)
更简单,但效率不高:
@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
如果要处理的文件很大,最好使用其他任何建议的其他方法。见this comment