批处理程序不会打开上一个文件

时间:2014-12-17 09:00:29

标签: windows batch-file

我需要全屏打开最后一张图片。并且让脚本监听,并且当在dir中创建更新的图像时,需要打开它。我有这个代码,但它无法正常工作。

有人能帮助我吗?

:loop
for /f %%i in ('dir /b/a-d/od/t:c') do set LAST=%%i
echo Siste filen lagd er %LAST%
"C:\Program Files\Internet Explorer\Iexplore.exe" -k "%CD%/%LAST%"
ping localhost -n 1 > nul
goto loop

它适用于第一张图片,但是当我向文件夹添加新图片时,它不会更新......

3 个答案:

答案 0 :(得分:1)

您真的使用Internet Explorer作为图像查看器吗?

在我看来,这不是一个好主意。

但是,批处理文件会等待执行,直到用户终止Internet Explorer。因此,启动IE后,下面的启动Internet Explorer的命令不会立即执行。

只需1次尝试的 ping 总是在1毫秒内成功,因为 localhost 是自己的PC。所以这个命令完全没用,因为这里用了1秒的等待,我认为你想用这个命令。

工作批处理代码为:

@echo off
set "PreviousImage=none"
:loop
set "NewestImage="
echo Looking for new image.
for /f %%i in ('dir /b /a-d /o-d /t:c *.bmp *.gif *.jpg *.jpeg *.png 2^>nul') do (
    set "NewestImage=%%~fi"
    goto CheckImage
)
:CheckImage
if not "%NewestImage%"=="" (
    if not "%PreviousImage%"=="%NewestImage%" (
        echo Siste filen lagd er %NewestImage%
        start "Display Image" "C:\Program Files\Internet Explorer\Iexplore.exe" -k "%NewestImage%"
        set "PreviousImage=%NewestImage%"
    )
)
rem Wait 5 seconds (5000 milliseconds).
%SystemRoot%\System32\ping.exe 1.1.1.0 -n 1 -w 5000 >nul
goto loop

检查图像文件是否完全存储在当前目录中非常重要。

更重要的是检查最新的图像是否与之前已在IE中打开的图像不同,否则批处理文件会一次又一次地打开相同的图像,用户将无法再使用Windows直到使用Windows任务管理器终止批处理文件。

有关其他方法,请参阅Sleeping in a batch file,而不是使用命令 ping 让批处理文件等待X秒,就像使用命令超时一样。

请注意,上面的批处理文件要求较新的图像文件具有与上一个图像文件不同的名称。否则,有必要比较文件时间。

以下是使用文件日期/时间的修改版本:

@echo off
set "PreviousTime=none"
:loop
set "NewestImage="
echo Looking for new image.
for /f %%i in ('dir /b /a-d /o-d /t:c *.bmp *.gif *.jpg *.jpeg *.png 2^>nul') do (
    set "NewestImage=%%~fi"
    set "NewestTime=%%~ti"
    goto CheckImage
)
:CheckImage
if "%NewestImage%"=="" goto WaitSeconds
if "%PreviousTime%"=="%NewestTime%" goto WaitSeconds
echo Siste filen lagd er %NewestImage%
start "Display Image" "C:\Program Files\Internet Explorer\Iexplore.exe" -k "%NewestImage%"
set "PreviousTime=%NewestTime%"
:WaitSeconds
rem Wait 5 seconds (5000 milliseconds).
%SystemRoot%\System32\ping.exe 1.1.1.0 -n 1 -w 5000 >nul
goto loop

注意: %%~ti在计算机上引用文件日期和时间,没有秒,只有日期,小时和分钟。因此,使用此批处理代码无法识别一分钟内文件的续订。

答案 1 :(得分:0)

目前,脚本会一直等到你继续关闭之前关闭它。哪个好,因为否则它会每秒重新打开最新的图像,充斥着你的PC与Internet Explorer的实例。您不能以这种方式自动更新显示的图像,但如果您通过关闭浏览器可以手动更新,那就可以了(在这种情况下甚至可以删除ping行)。

答案 2 :(得分:0)

for循环:应该如下工作

@ECHO OFF >NUL
@SETLOCAL enableextensions enabledelayedexpansion
for /f %%i in ('dir /b/a-d/od/t:c') do (
   set LAST=%%i
   echo Siste filen lagd er !LAST!
   echo "C:\Program Files\Internet Explorer\Iexplore.exe" -k "%CD%\!LAST!"
   ping localhost -n 1 > nul
   rem pause
)
@ENDLOCAL
@goto :eof
当你看到好的(为你)输出时,

Unrem / uncho所需的行