如果批处理

时间:2018-04-05 06:06:06

标签: windows batch-file cmd

您好我实际上是尝试将for循环的输出重定向到批处理文件中,如果for循环没有输出,我不想创建一个空文件。 在下面的代码中,我试图将特定目录中文件的名称和日期重定向到一个名为Errorfiles.txt的文件,这些文件超过60分钟。如果没有在过去60分钟内修改过的文件,那么我不应该得到一个空文件但是我得到的文件大小为0KB。无论如何,如果for循环没有输出,我可以停止生成该文件吗? 任何帮助将不胜感激谢谢! -------------------------------------------------- --------- MAIN.bat -------------------------------------- ---------------------

    @Echo off
    @setlocal EnableDelayedExpansion
    CALL function.bat %TIME%,CurrentTime

    (for /f "tokens=2,4" %%A in ('dir c:\Users\Administrator
    \Batch\*.* ^| find "/"') do (
    CALL function.bat %%A,FileTime
    REM echo !CurrentTime! !FileTime!
    set /a diff=!CurrentTime!-!FileTime!  
    if !diff! geq 60 (
    echo Filename: %%B Date Modified %%A 
    )
    )) 1>ErrorFiles.txt 2>nul

----------------------------------------------- -------------------- Function.bat --------------------------- -----------------

    @Echo off

    SET time1=%1
    set HH=%time1:~0,2%
    set MM=%time1:~3,2%
    set /a MM=%MM%
    set /a HH=%HH% * 60
    set /a ctime=%HH% + %MM%
    set /a "%~2=%ctime%"
    EXIT /B      

2 个答案:

答案 0 :(得分:2)

比较以下两行。生成a.txtb.txt没有生成。

(for /f %a in ('REM') do echo %a) >a.txt
for /f %a in ('REM') do (echo %a >b.txt)

如果你想保持一次重定向的速度(可能是大文件,只需删除文件,如果它是空的:

for %%a in (a.txt) do if %%~za == 0 del %%a

答案 1 :(得分:0)

下面显示的方法是测试for /F命令是否生成无输出的最简单,最快速的方法,因此在这种情况下删除空输出文件:

(for /F %%A in ('a command') do echo %%A) > output.txt || rem
if errorlevel 1 del output.txt

此方法的详细说明见this answer退出代码管理

注意:命令输出到文件的重定向(以及创建空文件)在执行命令之前发生,所以没有办法事先知道这样的输出将是空的......