批处理dir输出,包括连接到txt文件

时间:2016-07-07 05:38:06

标签: windows batch-file cmd concatenation string-concatenation

我有一个目录,我想输出子文件夹名称(例如:" folder_1"" folder2""文件夹3")单引号,后面跟一个逗号,分别为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 个答案:

答案 0 :(得分: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代替%*