編輯:不同的方式這樣做(可能更直接),這一個有另一個限制 - 可用變量/ env的大小。空間(XP時約32kB,不限Vista) - 至少每個MS文檔)。它創建了一個一種數組變量來保存你的換位線,然後將它們輸出:
@echo off
setlocal enabledelayedexpansion
set "tab= "
for %%F in (file*.txt) do (
set /a count=0
for /f "tokens=2 delims=%tab%" %%L in (%%F) do (
set /a count+=1
for /L %%T in (!count!,1,!count!) do (
set L[!count!]=!L[%%T]!%%L%tab%
)
)
)
for /L %%L in (1,1,%count%) do echo !L[%%L]!
首先,讓我說,batch
是不是最適合這個任務(這將一直微不足道,說在C
),但是如果你要使用它,這裏是一個辦法:
@echo off
setlocal enabledelayedexpansion
set "tab= "
for /f %%C in ('dir /b file*.txt') do set /a count+=1
(for %%F in (file*.txt) do (
set line=0
for /f "tokens=2 delims=%tab%" %%V in (%%F) do (
set "outline=%%F"
for /l %%N in (1,1,!line!) do (set "outline=%tab%!outline!")
set outline=!outline!%tab%%%V
set /a line+=1
echo !outline!
)
)) >presorted.txt
set /a cutoff=%count%-1
set line=0
for /f "tokens=2 delims=%tab%" %%O in ('sort /r presorted.txt') do (
set outp=%%O%tab%!outp!
set /a lc=!line!^%%count%
if !lc!==%cutoff% (
echo !outp!
set "outp="
)
set /a line+=1
)
工作原理:
- 拳,檢查有馬ny文件將被處理。這給列的數量。 (初
for
和count
可變)
- 閱讀改性每個輸入文件,輸出請求的列,以便它將由製表符等於行號和文件名,以中間文件的數目之前。 (由
()
分隔第二塊)
- 排序此文件中,以便連續行對應於連續列在最終輸出(
sort /r presorted.txt
)線的
- 移調塊分成使用
modulo count
開始新線(最後for
塊)
列
備註:
- 列的順序取決於文件名的排序順序。
- 所有文件都必須具有相同的行數
"tab= "
(在第3行)必須包含實際的製表
- 它假定ASCII上下的編碼(其中前
tab
各種各樣的任何可打印字符)。
- 它假設沒有
!
字符輸入(當延遲擴展時,它們需要特殊處理)
- 輸出到屏幕。如果需要文件輸出,將代碼放入批處理文件中,然後運行
mybatchfile.bat >output.txt
來源
2012-12-20 21:12:54
wmz
Thanks @multiphrenic。只是爲了澄清:我的txt文件中的列值是浮點數,所有列都是製表符分隔的! –
上面的代碼應該可以工作,如果你願意使用python。把它寫到一個文件中就像添加下面這樣簡單: 'out = open('C:\\ output.txt','w')' 'print(...'to'file.write ...' 並用'file.close()' 完成,這樣做的好處是它的可讀性和容易隨着您的需求變化而改變。 – pedram
當然,我會等待看看有沒有人可以用解決方法是使用批處理腳本,如果沒有,我會再次bug你:)。非常感謝,現在我知道我有一個備份計劃;)! –