Redirect CMD-如果存在<;文件>;

Redirect CMD-如果存在<;文件>;,redirect,if-statement,cmd,exists,Redirect,If Statement,Cmd,Exists,根据我的理解,下面的命令(添加了调试行-缩进)应该只将echo的输出重定向到一个文件,如果它已经存在的话 然而,似乎如果存在%test0%总是用echo的输出填充文件(如果不存在则创建它) 有人知道怎么回事吗 @echo off type test.bat set test0="e:\documents and settings\administrator\desktop\test.log" echo.&echo. if exist %test0% (echo !!Exist

根据我的理解,下面的命令(添加了调试行-缩进)应该只将echo的输出重定向到一个文件,如果它已经存在的话

然而,似乎
如果存在%test0%
总是用echo的输出填充文件(如果不存在则创建它)

有人知道怎么回事吗

@echo off
type test.bat
set test0="e:\documents and settings\administrator\desktop\test.log"
   echo.&echo.
   if exist %test0% (echo !!Exists!!) else (echo !!Doesn't Exist!!)
(if exist %test0% echo.&echo.&echo -------------------------------------------------&echo.&echo.)>>%test0%

然后创建文件(!)




EDIT:上面的示例是一个简化的示例,不幸的是,这个答案并不能帮助我解决完整的命令(我希望它会)。完整的单行if语句是:
if exist%test0%(echo&echo&echo------------------------------------------------------------------&echo&echo.)else(set/p.=>%test0%&set errorlevel=0 | | set errorlevel=1

如果
if
的任何条件与文件的输出相匹配(希望只有一个文件引用,即每个
if
条件中没有一个),我将如何根据文件的
存在设置
错误级别


有人可以帮助解决实际的完整命令问题吗?

检查括号。
(x)>>output.log
x
的输出重定向到
output.log
。这意味着无论输出是什么,都会发生重定向,尤其是始终创建文件

现在,如果您编写
if Y(echo Text>>output.log)
重定向将以
Y
为条件,并且可能不会发生

[编辑] 按照现在的措辞,简单的解决方案似乎是:

  • 基于
    存在%test0%
    设置
    %ERRORLEVEL%
    。此时未发生重定向
  • 使用
    %ERRORLEVEL%
    确定要执行的操作。您可以更改
    %test0%
    ,而无需更改
    %ERRORLEVEL%
  • 顺便说一句,

    您应该不要直接设置ERRORLEVEL。该名称保留用于报告上一个命令的结果。当您直接设置该值时,您覆盖了预期的功能,它不再扩展到实际的ERRORLEVEL,而是扩展到您设置的值。这可能会破坏所有类型的代码


    您可以通过运行具有已知结果的命令,将输出重定向到nul(如有必要):
    ver>nul
    将ERRORLEVEL设置为0,
    set/p.=感谢MSalters-我原以为
    if
    语句不会解析
    echo
    的if
    exist
    没有返回true,因此没有输出到s结束到文件(虽然接受文件可能已创建为空)。我实际上简化了问题,因此如果我可以问如何进行以下操作(根据您的答案,根据我的最佳猜测进行调整,这不起作用),
    if exist%test0%((echo.&echo.&echo---------------------------------------------------&echo.&echo.)else(echo.))>>%test0%
    非常感谢。我意识到这是我第三次移动目标帖子,可以这么说,但是
    errorlevel
    不是实际的变量名(虽然这可能是个坏主意,但比真正的变量名更容易阅读-谢谢提醒)。至于
    set/p.=1)如果文件不存在,则创建一个不包含任何内容的文件;或者用双空行+破折号行+双空行填充(最好只使用一个
    >文件
    指令,而不是在每个if条件下使用一个)。2) 根据重定向是否成功,设置一个变量或
    %errorlevel%
    。谢谢,第一个变量似乎同时满足两个条件;第二个总是用空白行+破折号创建(或修改)文件,但从不只是创建一个空文件,即使在运行之前不存在。然而,我很好奇,在第二个例子中,是否没有办法将true或false条件输出到文件中,它是否必须是其中一个,或者谁声明了两个重定向?@user66001-您是否实际运行了第二个编辑的代码?如果不存在空文件,则追加重定向将创建该空文件它总是有空行+破折号,每次运行后删除.log文件。
    if exist %test0% (
      echo.
      echo.
      echo -------------------------------------------------
      echo.
      echo.
      ver >nul
    ) >>%test0% else (
      set /p .=<nul
    )
    
    if exist %test0% (
      (
        echo.
        echo.
        echo -------------------------------------------------
        echo.
        echo.
        set ERR=0
      ) >>%test0%
    ) else (
      copy nul %test0%
      set ERR=1
    )