Windows 7 中的批处理文件问题

Windows 7 中的批处理文件问题

我是新手,以前从未做过任何编码或脚本,我正在尝试制作一个批处理文件......

  • 检查 iTunes 是否正在运行
  • 如果它正在运行,则打开我的播放列表的 vbs 文件
  • 如果没有运行,请打开 iTunes
  • 等待 30 秒
  • 再次检查,直到能够启动 vbs
  • 然后停止检查

我打算将其放在我的启动文件夹中,这样当我打开电脑时它就会从头开始播放音乐......

但是由于没有任何编码经验,我几乎只能通过 Google 搜索其他人的解决方案并盲目尝试,希望它们能够起作用......

到目前为止我发现并尝试过

@echo off

PATH=C:\Program Files\iTunes\iTunes.exe

iTunes.EXE YourProgram.exe >nul

if ERRORLEVEL 1 goto Process_NotFound

:Process_Found

echo iTunes is running

goto END

:Process_NotFound

echo iTunes is not running

Itunes.exe

goto END

:END

--

@echo off      
tasklist /FI "IMAGENAME eq iTunes.exe" | find /i "iTunes.exe"      

IF ERRORLEVEL 2 GOTO LOOP2
IF ERRORLEVEL 1 GOTO LOOP1 

:LOOP1 
  start notepad.exe
goto EXIT     

:LOOP1 
  start iTunes.exe 
goto EXIT 

:EXIT

tasklist /FI "IMAGENAME eq iTunes.exe" /FO CSV > search.log

FOR /F %%A IN (search.log) DO IF %%~zA EQU 0 GOTO end

start iTunes.exe

:end

当我测试它们时,第一个命令什么都不做,第二个命令只会打开一个空白的记事本,无论 iTunes 是否正在运行,第三个命令会将一个名为“search”的文本文件保存到我的桌面,并且根据 iTunes 是否正在运行,它会更改搜索内容。

INFO: No tasks are running which match the specified criteria.
  • 如果 iTunes 已关闭

"Image Name","PID","Session Name","Session#","Mem Usage"
"iTunes.exe","7208","Console","1","105,512 K"
  • 如果 iTunes 正在运行

看来最后一个最接近我的需要,但我仍然不知道如何改变它并将其更改为我需要的。

你们能帮我一下吗?

答案1

尝试使用如下所示的简单批处理脚本。我不确定您的 VB 脚本是什么,但如果您向我展示逻辑,我会将其添加到此脚本中,以便可以使用批处理脚本启动。...

这应该完全按照您列出的做,但请为我澄清一下 VB 脚本的内容,然后我会补充说:听起来相当简单。。。

1. 检查 iTunes 是否在内存中运行(如果正在运行则执行 #3)

2. 如果 iTunes 未运行,请启动它,然后等待 30 秒并再次检查它是否在内存中运行

3. 检查 iTunes 是否在内存中运行,如果是,请转到 VB 脚本例程为您的播放列表启动该程序等,然后结束该脚本。

@ECHO OFF

:CheckiTunesRunning
TASKLIST | FINDSTR /I "iTunes.exe"
IF ERRORLEVEL 1 (GOTO StartiTunes) ELSE (GOTO OpenPlayList)

:StartiTunes
START "iTunes" "C:\Program Files\iTunes\iTunes.exe"
::: 30 second pause
PING -n 30 127.0.0.1 > nul
GOTO CheckiTunesRunning

:OpenPlayList
<Open PlayList Logic VB, etc.>
GOTO EOF

答案2

你的第二个代码

@echo off      
tasklist /FI "IMAGENAME eq iTunes.exe" | find /i "iTunes.exe"      
IF ERRORLEVEL 2 GOTO LOOP2
IF ERRORLEVEL 1 GOTO LOOP1 
:LOOP1 
start notepad.exe
goto EXIT     
:LOOP1 
start iTunes.exe 
goto EXIT 
:EXIT

您有两个 :LOOP1,因此您将始终使用第一个来启动 notepad.exe。没有 :LOOP2 可供它转至,因此当它读取“GOTO LOOP2”时,它找不到它并继续执行,然后它会找到 LOOP1,启动记事本,然后转到 EXIT。

@echo off      
tasklist /FI "IMAGENAME eq iTunes.exe" | find /i "iTunes.exe"      
IF ERRORLEVEL 2 GOTO LOOP2
IF ERRORLEVEL 1 GOTO LOOP1 
:LOOP2
start notepad.exe
goto EXIT     
:LOOP1 
start iTunes.exe 
goto EXIT 
:EXIT

你的第三个代码

tasklist /FI "IMAGENAME eq iTunes.exe" /FO CSV > search.log

/FO CSV > search.log

用于 [文件输出] [CSV] [保存至] [search.log]

我使用 [] 来显示每个语法及其作用。

答案3

提供的第二个示例确实朝着正确的方向发展。尽管我发现了一些错误。

  • 你已经写下循环1两次,而不是循环1其次是循环2. 尝试使用更独特的名称来避免这种情况。
  • 查找字符串返回错误级别 0当找到字符串时,错误级别 1如果没有。您可以使用以下方法检查ECHO %错误级别%在您的批处理文件中。

希望下面的示例能够帮助您进一步扩展这一点。

tasklist.exe | findstr "iTunes.exe"

IF ERRORLEVEL 1 GOTO NOTFOUND
IF ERRORLEVEL 0 GOTO RUNNING

:RUNNING
ECHO "Application is running, replace this line with the code you want"  
GOTO END

:NOTFOUND
ECHO "Application not found, replace this line with the code you want"
GOTO END

:END

相关内容