我有導出iTunes選擇列表的文本文件,它們是製表符分隔的數組。他們有27列,但爲了簡單起見,我只在示例中包括四個:批處理腳本逐行讀取一個製表符分隔的文本文件並將一列提取到一個新文件
Name Artist My Rating Location
Pod1 Show1 0 E:\Podcasts\Show1\Episode99.m4a
Pod2 Show2 100 E:\Podcasts\Show2\Show2 Ep 101 - Subtitle.mp3
Pod3 Show2 60 E:\Podcasts\Show2\News 11-17-2014.aicc
依此類推。我需要只提取位置(這始終是最後一列),並將其放置在一個新的文本文件,所以它看起來是這樣的:
E:\Podcasts\Show1\Episode99.m4a
E:\Podcasts\Show2\Show2 Ep 101 - Subtitle.mp3
E:\Podcasts\Show2\News 11-17-2014.aicc
這裏是我到目前爲止所實現這一目標的代碼:
@ECHO OFF
type Podcasts.txt | findstr /v Grouping > Podcasts1.txt
del Podcasts.txt
rename Podcasts1.txt Podcasts.txt
雖然我已經找到了一些關於修改單行和逐行讀取文本文件的單獨教程,但我一直很難按照自己喜歡的方式修改單行,更不用說合並兩個原則了。我想這可能是一個非常快速的答案,我只是沒有找到正確的搜索。
我發現,它可能使用下面的正則表達式來得到我想要的結果,在記事本++:
Find: .+(E\:)
Replace: \1
所以一個辦法做到這一點一行一行在批處理腳本將是有益的。
加分:我使用生成的文件作爲白名單來刪除不在播放列表中的文件。如果你有一個鏈接或者可以寫一段代碼,那會有幫助。否則,我有關於如何計劃完成這個需要使用單個文件夾的想法。
編輯:我發現,因爲有些列是空白的,使用此:
for /f "usebackq tokens=1-26,* delims= " %%a in ("Podcasts.txt") do (
echo %%q >> PodcastsTest.txt
)
有時會按錯列。我需要一些可以搜索兩個字符「E:」的東西,然後從那裏開始行動,或者行搜索從右向左找到第一個標籤。
我剛剛創建的快速和骯髒的方法,對於一個反斜槓搜索(目前僅出現在位置)如下:
for /f "usebackq tokens=1,* delims=\" %%a in ("Podcasts.txt") do (
echo E:\%%b >> PodcastsTest.txt
)
這不是一個安全的方法,因爲沒有什麼能阻止從其他領域有反斜槓,但作爲臨時解決方案,它的工作原理。我發現Linux SED is available for Windows。也許有一種方法可以適應以下Notepad ++ REGEX搜索嗎?
Find: .+(E\:)
Replace: \1
可能的副本[複製.csv中的列文件到另一個使用批次](http://stackoverflow.com/questions/22334682/copy-a-column-in-a-csv-file-to-another-using-batch)和其他人發現與[\ [batch-文件\] csv複製列](http://stackoverflow.com/search?q=%5Bbatch-file%5D+csv+copy+column)。在批處理文件中的'delims ='水平製表符後面指定,__FOR__默認情況下僅通過製表符而不是空格和製表符分隔字段值。在命令提示符窗口中運行'for /?'並讀取所有輸出幫助頁面以獲取此命令的詳細信息。 – Mofi