我有一个目录,我想输出子文件夹名称(例如:" 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)。如果可能的话,我也喜欢单独一行的每个文件夹,最后一个文件夹上没有逗号。
答案 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
代替%*
。