批处理 - 在 for 循环中回显多个 do

batch - echo multiple do in for loop

我无法使用 for /r 在同一行上输出 2 个值。 for 循环是:

FOR /R C:\users\<user_name>\desktop\<folder_path> %%F in (*.*) do (
echo %%~nF >> C:\users\usernameA\desktop\test-forr.txt, #Output 1
C:\folderB\tail -n 1 C:\users\usernameA\desktop\folderABC\%%~nF.txt >> C:\users\joseph.borg\desktop\test-forr.txt # Output 2

问题是这个循环将输出打印在彼此之上。我可以将它们放在同一行并排放置吗(在同一行上用逗号分隔)?

变量 %%~nf 将文本文件名(不带扩展名)存储在同一目录中。 C:\folderB\tail -n 1 行指的是 linux 命令尾部,它允许您从指定文件的底部开始检索 'n' 行(在本例中为指定的文件是 C:\users\usernameA\desktop\folderABC\%%~nF.txt).

提前致谢

如果将带有“>”或“>>”的命令输出定向到文件,它将始终以行尾字符终止。因此,您必须创建一个组合两个输出的变量,然后将该变量回显到文件中。但是,您的第二个输出是由命令生成的,因此无法将其存储在变量中。这是windows批处理的限制。总之,您当前的问题仅使用批处理脚本是无法解决的。

setlocal enabledelayedexpansion
FOR /R C:\users\<user_name>\desktop\<folder_path> %%F in (*.*) do (
 for /f %%a in ('C:\folderB\tail -n 1 C:\users\usernameA\desktop\folderABC\%%~nF.txt') do set "line=%%a"
 echo %%~nF,!line!>> C:\users\joseph.borg\desktop\test-forr.txt
)

我没有尝试过这个,因为我没有 tail 但它应该将 filename,lastlineofthefile 附加到给定的输出文件(其名称对于您的两个单独重定向而言似乎不同问题。)