2016-07-07 101 views
0

我有一個目錄,我想輸出包含在單引號中的子文件夾名稱(例如:「folder_1」「folder2」「文件夾3」),然後每個逗號,轉換成一個txt文件。批量目錄輸出包括連接到一個txt文件

基於關閉@How to concatenate strings in a Windows batch file?我設法想出下面的批處理文件的解決方案:

@echo off 
set myvar=' 
for /f %%i in ('dir /b /o:n /ad') DO call :concat %%i 
echo %myvar% >>test.txt 
goto :eof 

:concat 
set myvar=%myvar%%1', 
goto :eof 

產生包含輸出.txt文件:

'folder_1', folder2', folder', 

我如何獲得輸出看起來更像這樣:

'folder_1', 
'folder2', 
'folder 3' 

- 需要每個子文件夾的名稱(包括空格/ s),後面加逗號。如果可能的話,我還希望每個文件夾放在一個單獨的行上,並且最後一個文件夾上沒有逗號。

回答

1

要處理缺少的字符,您從for語句中缺少一件事。

for /f "tokens=*" %%i in ('dir /b /o:n /ad') DO call :concat %%i 

"tokens=*"部分告訴for治療整行作爲一個變量。默認情況下,for會將每行分隔爲空格上的單獨變量,這會導致您僅獲取每行的第一個字

要修復單行問題,您需要發出多個echo語句。現在,您的代碼正在將所有內容收集到一個變量中,然後將其作爲一行回顯。相反,您可以通過將循環移動到:concat子例程中,每次在循環中追加一行文件。

for /f "tokens=*" %%i in ('dir /b /o:n /ad') DO call :concat %%i 
goto :eof 

:concat 
echo '%*', >>test.txt 
goto :eof 

echo線,%*代表 「所有的參數」。這裏不能使用%1,因爲CMD再次將空間參數分開。要了解有關CMD參數的更多信息,請參閱http://ss64.com/nt/syntax-args.html

另一種保留空格的方法是在call :concat "%%i"中加上引號以避免CMD分割參數。在子功能中,您使用%~1而不是%*

+0

謝謝!我不再需要'set myvar =''對嗎?另外,你知道'%% i'的目的是什麼,也是'echo'%*'的百分比,'? – Eats

相關問題