如果你来到这里寻找一个回答这个问题,但没有确切的OP的意思的方式,也就是你怎么在获得多行CMD工作单行,我有一种适合你危险的答案。
试图将其与实际使用管道的东西一起使用,例如说findstr
是相当成问题的。处理else
s也是如此。但是,如果您只想直接从CMD而不是通过批处理文件执行多行条件命令,那么这应该可以很好地工作。
假设您要在命令提示符下直接运行批处理中的以下内容:
@echo off
for /r %%T IN (*.*) DO (
if /i "%%~xT"==".sln" (
echo "%%~T" is a normal SLN file, and not a .SLN.METAPROJ or .SLN.PROJ file
echo Dumping SLN file contents
type "%%~T"
)
)
现在,您可以使用行连续克拉(^
)并像这样手动将其键入,但是警告,这很乏味,如果您搞砸了,可以学习再次将其全部键入的乐趣。
那么,它不会只工作^
由于逃逸机制的括号内耸肩至少不会像写。实际上,您实际上需要像这样将克拉数加倍:
@echo off ^
More? for /r %T IN (*.sln) DO (^^
More? if /i "%~xT"==".sln" (^^
More? echo "%~T" is a normal SLN file, and not a .SLN.METAPROJ or .SLN.PROJ file^^
More? echo Dumping SLN file contents^^
More? type "%~T"))
取而代之的是,您可以从不需要|
循环数的轨道的另一端成为肮脏的偷偷摸摸的脚本编写者,方法是在每次循环/表达式的连续执行中将它们换成单个管道():
@echo off
for /r %T IN (*.sln) DO if /i "%~xT"==".sln" echo "%~T" is a normal SLN file, and not a .SLN.METAPROJ or .SLN.PROJ file | echo Dumping SLN file contents | type "%~T"