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

batch dir output including concatenation to a txt file

我有一个目录,我想输出子文件夹名称(例如:"folder_1" "folder2" "folder 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'

--需要每个子文件夹名称(包括 space/s)用单引号括起来,后跟逗号。如果可能的话,我还希望每个文件夹都单独一行,最后一个文件夹不要有逗号。

为了处理缺失的字符,您在 for 语句中遗漏了一件事。

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

"tokens=*" 部分告诉 for 将整行视为一个变量。默认情况下,for 会将每一行拆分为空格上的单独变量,这会导致您只获得每行的第一个单词

要解决单行问题,您需要发出多个 echo 语句。现在,您的代码正在将所有内容收集到一个变量中,然后将其作为一行回显。相反,您可以通过将 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行中,%*表示"all of the arguments"。您不能在此处使用 %1,因为 CMD 再次将参数拆分为空格。要了解有关 CMD 参数的更多信息,请参阅 http://ss64.com/nt/syntax-args.html

另一种保留空格的方法是在 call :concat "%%i" 中的变量周围加上引号,这样可以防止 CMD 拆分参数。然后在子函数中使用 %~1 而不是 %*.