我有很长的文件列表,我想合并到几个文件中。
part-m-00000
part-m-00001
part-m-00002
part-m-00003
part-m-00004
part-m-00005
part-m-00006
part-m-00007
part-m-00008
part-m-00009
part-m-00010
part-m-00011
part-m-00012
...
part-m-01267
(注意文件名末尾的数字填充)
我想将每100个文件合并为10个单独的文件,最后剩下的67个文件合并到11个文件中。我无法填充这些数字来合并文件。
这是我能够达到的目标 -
@echo off
if exist merge.txt del merge.txt
echo. >merge.txt
for /l %%a in (0,1,3) do (
Set Number=00000%%a
Set Number=%Number:~-5%
copy/b merge.txt+"part-m-%number%.txt" merge.txt
)
我认为数字填充没有按预期工作。它在for
循环中对我不起作用。如果我一般做这样的事情 -
Set Number=768
Set Number=00000%Number%
Set Number=%Number:~-5%
echo %Number%
它正确填充了数字。
我无法弄清楚我做错了什么。感谢任何帮助。
答案 0 :(得分:2)
%XXX%
的变量仅针对for
循环展开一次,而不是在每次迭代中展开。
您需要使用!XXX!
语法进行延迟扩展,如下所示:
setlocal enableextensions enabledelayedexpansion
for /l %%a in (0,1,3) do (
Set Number=00000%%a
Set Number=!Number:~-5!
echo !Number!
)
有关详细信息,请参阅问题Batch file variables initialized in a for loop。
答案 1 :(得分:1)
试试这个:
@echo off
setlocal enabledelayedexpansion
if exist merge.txt del merge.txt
echo. >merge.txt
for /l %%a in (0,1,3) do (
Set Number=00000%%a
Set Number=!Number:~-5!
copy /b merge.txt+"part-m-%number%.txt" merge.txt
)
如果不使用延迟扩展,变量%Number:~-5%
将仅扩展一次 - 在处理整个for
命令之前。使用延迟扩展时,变量!Number:~-5!
将在每次运行时展开,因此每次数量都会不同。
答案 2 :(得分:0)
另一种(可能更简单,更快捷)的方法是:
@echo off
setlocal enabledelayedexpansion
if exist merge.txt del merge.txt
echo. >merge.txt
set Number=99999
for /l %%a in (0,1,3) do (
Set /A Number+=1
copy /b merge.txt+"part-m-!Number:~-5!.txt" merge.txt
)