繁体   English   中英

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

[英]batch dir output including concatenation to a txt file

我有一个目录,希望将用单引号引起来的子文件夹名称(例如:“ folder_1”,“ folder2”,“ folder 3”)输出到txt文件中,并在每个引号后加一个逗号。

基于解决方案@ 如何连接Windows批处理文件中的字符串? 我设法提出了以下批处理文件:

@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'

-需要用双引号引起来的每个子文件夹名称(包括空格),后跟逗号。 如果可能的话,我也希望每个文件夹都放在单独的行中,并且在最后一个文件夹中不要使用逗号。

为了处理丢失的字符,您在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行中, %*表示“所有参数”。 您不能在此处使用%1 ,因为同样,CMD会在空格处拆分参数。 要了解有关CMD参数的更多信息,请参见http://ss64.com/nt/syntax-args.html

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM