您好我实际上是尝试将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
答案 0 :(得分:2)
比较以下两行。生成a.txt
,b.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,退出代码管理。
注意:命令输出到文件的重定向(以及创建空文件)在执行命令之前发生,所以没有办法事先知道这样的输出将是空的......