Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 创建日志的批处理文件不';我不工作,为什么?_Batch File - Fatal编程技术网

Batch file 创建日志的批处理文件不';我不工作,为什么?

Batch file 创建日志的批处理文件不';我不工作,为什么?,batch-file,Batch File,根据下面的脚本,我希望删除3天以上的文件,并创建已删除或未删除文件的日志列表。但是日志输出不起作用(不像我想要的那样),它应该像这样写日志: 如果存在文件: yyyy/mm/dd hh:mm:ss 如果没有: yyyy/mm/dd hh:mm:ss没有删除任何文件。 只有真正起作用,其他的都不起作用。有人能帮忙吗?哦,别介意日期/时间脚本,它只供参考 @echo off For /f "tokens=2-4 delims=/" %%a in ("%DATE%") do ( set YYY

根据下面的脚本,我希望删除3天以上的文件,并创建已删除或未删除文件的日志列表。但是日志输出不起作用(不像我想要的那样),它应该像这样写日志:

如果存在文件:
yyyy/mm/dd hh:mm:ss

如果没有:
yyyy/mm/dd hh:mm:ss没有删除任何文件。

只有真正起作用,其他的都不起作用。有人能帮忙吗?哦,别介意日期/时间脚本,它只供参考

@echo off
For /f "tokens=2-4 delims=/" %%a in ("%DATE%") do (
    set YYYY=%%c
    set MM=%%a
    set DD=%%b
)

For /f "tokens=1-4 delims=/:." %%a in ("%TIME%") do (
    SET HH24=%%a
    set MM=%%b
    set SS=%%c
    set FF=%%d
)

for /f "skip=1" %%x in ('wmic os get localdatetime') do if not defined MyDate set MyDate=%%x
for /f %%x in ('wmic path win32_localtime get /format:list ^| findstr "="') do set %%x
set fmonth=00%Month%
set fday=00%Day%

set datetime=%Year%/%fmonth:~-2%/%fday:~-2% %HH24%:%MM%:%SS% 
set num=forfiles /p "E:\data_integration\Data\LogFiles" /d -7 /c "cmd /c echo @fdate total : " | find /v ""
set search=forfiles /p "E:\data_integration\Data\LogFiles" /s /m *.* /d -7 /c "cmd /c"
set log_location=E:\data_integration\Data\LogFiles\LOG_DEL_HISTORY.txt
set log_delete=forfiles /p "E:\data_integration\Data\LogFiles" /s /m *.* /d -7 /c "cmd /c del @path & echo @path >> %log_location%"

echo | set /p = %datetime% >> %log_location%

if exist "%search%" (
    goto del
) else (
    goto notfound
)

:del
%log_delete%
goto exit

:notfound
echo | set /p ="There are no files deleted." >> %log_location%
echo. >> %log_location%
goto exit

:exit
echo | set /p = "Preparing to close..."
@echo off
echo. & echo. & echo.
rem set /p input="Press enter to exit..."
timeout /t 5

谢谢你们给我所有的建议,特别是@markdodsons,现在我的批处理脚本可以像我想要的那样工作了

这是我的最后一个批处理脚本,希望能帮助像我一样有同样问题的用户:

@echo off
for /f "tokens=1-4 delims=/:." %%a in ("%TIME%") do (
    set HH24=%%a
    set MM=%%b
    set SS=%%c
    set FF=%%d
)

for /f "skip=1" %%x in ('wmic os get localdatetime') do if not defined MyDate set MyDate=%%x
for /f %%x in ('wmic path win32_localtime get /format:list ^| findstr "="') do set %%x
set fmonth=00%Month%
set fday=00%Day%

for /f "tokens=*" %%a in ('forfiles /p "E:\data_integration\Data\LogFiles" /s /m *.* /d -30 /c "cmd /c echo total : " ^|find /v /c ""') do set /a filescount=%%a-1

set datetime=%Year%/%fmonth:~-2%/%fday:~-2%   %HH24%:%MM%:%SS% 
set log_location=E:\data_integration\Data\LogFiles\LOG_DEL_HISTORY.txt
set log_delete=forfiles /p "E:\data_integration\Data\LogFiles" /s /m *.* /d -30 /c "cmd /c del @path & echo | set /p = %datetime% >> %log_location% & echo @path >> %log_location%"

echo | set /p = %datetime% >> %log_location%
echo  Program Run >> %log_location%

if %filescount% geq 1 (goto del) else (goto notfound)

:del
%log_delete%
echo | set /p = %datetime% >> %log_location% 
echo | set /p = "There are " >> %log_location% & echo | set /p = %filescount% >> %log_location% & echo | set /p = "files deleted." >> %log_location%
echo. >> %log_location%
goto exit

:notfound
set /a filescount=0
echo | set /p = %datetime% >> %log_location% 
echo | set /p = "There are " >> %log_location% & echo | set /p = %filescount% >> %log_location% & echo | set /p = "files deleted." >> %log_location%
echo. >> %log_location%
goto exit

:exit
echo | set /p = %datetime% >> %log_location%
echo  Program Complete. >> %log_location%
echo Preparing to close...
echo. & echo. & echo.
timeout /t 5

批处理文件与bash不同。您不能使用
SET
命令将命令的输出分配给变量。即使我不使用SET命令分配命令的输出,而只是在IF命令中进行分配,仍然不起作用。你有合适的方法吗?你可以开始改进你的脚本,用这些
3
@Echo Off
For/F%%a In('WMIC OS Get LocalDateTime')如果不是“%%xA”=”Set“ds=%%nA”
Set“datetime=%ds:~,4%/%ds:~4,2%/%ds:~6,2%%ds:~10,2%:ds:~2%:-2%。”
。@Compo可能重复感谢您的建议,但我更喜欢使用我的日期/时间脚本,因为您可以轻松自定义日期/时间格式。我的主要问题是IF命令不能像我希望的那样工作,我不知道它出了什么问题。我尝试了[壁球手]的建议,但还是一样。