批处理文件条件执行日志记录

时间:2016-12-20 15:54:10

标签: windows rest batch-file curl

我正在使用curl使用批处理脚本在Windows中使用REST将批量文件上传到远程服务器。我需要跟踪成功和不成功的事件。对于不成功的事件,我想从远程服务器捕获JSON响应。

如果我在命令中添加一个附加项">> debug.log"我能捕捉到所有的事件;但是我正在处理大约50k或更多的文件,所以我只想捕获失败。我尝试过只写一次文件"> debug.log"然后在下一个循环之前解析出信息,但如果我没有追加,文件总是保持为空。

我很感激任何建议。

for %%f in (*) do ( 

    curl !url! --request POST --header "Accept:application/json" --header "Authorization:%auth%" -F "uploadFile=@%filepath%\%%f" >> %mypath%\%logfolder%\debuglog.txt && (
        echo %filepath%\%%f success >> %mypath%\%logfolder%\successlog.txt
    ) || (
        echo %filepath%\%%f error >> %mypath%\%logfolder%\errorlog.txt

        REM set JSONDEBUG=
        REM for /F "delims=" %%w in (%mypath%\%logfolder%\debuglog.txt) do ( set JSONDEBUG=!JSONDEBUG! %%w )

        REM set JSONDEBUGPARSE=!JSONDEBUG:~11,-1!
        REM echo !JSONDEBUGPARSE! >> %mypath%\%logfolder%\errorlog.txt
    )
)

1 个答案:

答案 0 :(得分:1)

您可以将curl输出写入临时文件,不附加,然后在您的故障分支中,您可以键入临时文件并将其附加到您的日志中。为了方便阅读,我添加了一些延续线。

for %%f in (*) do ( 
  curl !url! --request POST ^
             --header "Accept:application/json" ^
             --header "Authorization:%auth%" ^
             -F "uploadFile=@%filepath%\%%f" > curltemp.txt && (
    echo %filepath%\%%f success >> %mypath%\%logfolder%\successlog.txt
  ) || (
    echo %filepath%\%%f error >> %mypath%\%logfolder%\errorlog.txt
    type curlTemp.txt >> %mypath%\%logfolder%\debuglog.txt 
    REM set JSONDEBUG=
    REM for /F "delims=" %%w in (%mypath%\%logfolder%\debuglog.txt) do ( set JSONDEBUG=!JSONDEBUG! %%w )
    REM set JSONDEBUGPARSE=!JSONDEBUG:~11,-1!
    REM echo !JSONDEBUGPARSE! >> %mypath%\%logfolder%\errorlog.txt
  )
)
del curlTemp.txt