我正在尝试将我的编译结果写入一个文件夹:如果存在一种文件类型(file1或file2),则表示我的编译成功。我想将此结果报告为txt文件
我尝试使用布尔值来做一个标志,但是它不起作用。我解析我的文件夹,并在每个输出/ NameofaRun中,我正在寻找是否有file1或file2。
for /D %%X in (%1\*) do (
set flag = 0
if exist %%X\OUTPUT\%2\file1.txt ( flag = 1)
if exist %%X\OUTPUT\%2\file2.txt ( flag = 1)
if %flag% == 1 ( echo %%X>>%3\Compilation_Check.txt Succeeded )
if %flag% == 0 (
echo %%X>>%3\Compilation_Check.txt Failed Warning
)
)
我想在“ compilation_check.txt”中写入我的txt结果。并且我正在运行该批处理,并将文件夹路径/文件夹名称作为参数
答案 0 :(得分:1)
您的逻辑是正确的;没有几个细节...
set
命令将等号之前的所有字符(包括空格)作为变量名。您应该使用set flag=0
,或者最好使用set "flag=0"
。set
的值时错过了flag
命令。(block)
中更改时,无法通过%var%
访问新值,而是使用!var!
语法并包括{{1 }}在程序开头的命令。关于这一点,有很多详细的解释。寻找“延迟扩展”。这是您先前修改过的代码:
setlocal EnableDelayedExpansion
但是,我会这样:
setlocal EnableDelayedExpansion
for /D %%X in (%1\*) do (
set "flag=0"
if exist "%%X\OUTPUT\%2\file1.txt" ( set "flag=1" )
if exist "%%X\OUTPUT\%2\file2.txt" ( set "flag=1" )
if !flag! == 1 ( echo %%X Succeeded >> "%3\Compilation_Check.txt")
if !flag! == 0 (
echo %%X Failed Warning >> "%3\Compilation_Check.txt"
)
)
您没有使用for /D %%X in (%1\*) do (
set "anyFile="
if exist "%%X\OUTPUT\%2\file1.txt" set "anyFile=1"
if exist "%%X\OUTPUT\%2\file2.txt" set "anyFile=1"
(if defined anyFile (
echo %%X Succeeded
) else (
echo %%X Failed Warning
)) >> "%3\Compilation_Check.txt"
)
变量的值。 flag
命令允许检查变量是否存在;该“技巧”可以避免延迟扩展问题...
您可以将几个命令括在if defined
中,以便将所有命令的输出重定向到同一文件...