2013-04-09 72 views
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% 

它正確填充數字。

我不知道我做錯了什麼。感謝任何幫助。

+1

烏姆不應該最後剩下的67是在13? – user2033427 2013-04-09 13:55:05

+0

哎呀。第13條是我的意思。 – Pai 2013-04-09 15:36:08

回答

2

對於for循環,%XXX%的變量僅擴展一次,而不是在每次迭代中。

您需要使用延遲擴展與!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

+0

非常感謝。這解決了它。感謝您的鏈接了。 – Pai 2013-04-09 14:09:56

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!將在每次運行時展開,因此每次的編號都會有所不同。

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 
)