1

我有一长串要合并到几个文件中的文件。

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%

它正确地填充了数字。

我无法弄清楚我做错了什么。感谢任何帮助。

4

3 回答 3

2

The variables with the %XXX% are expanded only once for the for loop, not in every iteration.

You need to use delayed expansion with the !XXX! syntax like this:

setlocal enableextensions enabledelayedexpansion

for /l %%a in (0,1,3) do (
Set Number=00000%%a
Set Number=!Number:~-5!
echo !Number!
)

For more details refer to question Batch file variables initialized in a for loop.

于 2013-04-09T14:03:26.373 回答
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
)

If you do not use delayed expansion, the variable %Number:~-5% will be expanded only once - before the whole for command is processed. With delayed expansion used, the variable !Number:~-5! will be expanded each time it is run, so the number will be different each time.

于 2013-04-09T14:02:56.730 回答
0

Another (perhaps simpler and faster) approach is this:

@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
)
于 2013-04-09T18:03:06.370 回答