我目前正在我的电脑上模拟ps2游戏,并希望获得损失保险 Savedata 所以在pcsx2中你可以通过按F1(和F2切换到下一个插槽)来保存
此片段是用于ps2目的的更大文件的一部分(如果需要,我可以发布) 但它应该基本实现的是检查pcsx2.exe是否正在运行 每0.1秒一次,每3分钟保存一次游戏 当我运行此代码时,Batch脚本立即退出而不可能 eveen看到一条错误消息。 任何人都可以告诉我这可能有什么问题,还是问题必须在其他地方?
SET /a time=0
:loop
if %time%==180(
nircmd.exe sendkey F1 press
nircmd.exe sendkey F2 press
SET /a time=0
)
tasklist /FI "IMAGENAME eq pcsx2-r5875.exe" 2>NUL | find /I /N "pcsx2r5875.exe">NUL
nircmd.exe wait 100
set /a time+=1
if "%ERRORLEVEL%"=="0" goto loop
编辑:为任何感兴趣的人完成工作脚本
@ echo off
nircmd.exe cmdwait 10 nircmd.exe sendkey 0x5B down
nircmd.exe cmdwait 10 nircmd.exe sendkey D press
nircmd.exe cmdwait 10 nircmd.exe sendkey 0x5B up
::simulates windows+D to close all windows
taskkill /f /im explorer.exe
::kills explorer
start /d "C:\Program Files (x86)\Google\Drive" googledrivesync.exe
::Google Drive to backup save files
start /d "C:\Program Files\MotioninJoy\ds3" DS3_Tool.exe
::DS3 Tool to play with wireless playstation controller
start %windir%\System32\DisplaySwitch.exe /internal
::switches to Single-Display mode
start /d "C:\Program Files (x86)\PCSX2 1.2.1" pcsx2-r5875.exe
::starts emulator
SET timeloop=0
goto loop2
:loop
SET timeloop=0
nircmd.exe sendkey F1 press
nircmd.exe sendkey F2 press
echo Saved at %time%
:loop2
nircmd.exe wait 100
set /a timeloop+=1
tasklist /FI "IMAGENAME eq pcsx2-r5875.exe" 2>NUL | find /I /N "pcsx2-r5875.exe">NUL || goto EndOfLoop
if %timeloop% LSS 1800 goto :loop2
goto loop
:EndOfLoop
::loop that autosaves to a different slot every 3 minutes and exits if emulator exits
start %windir%\System32\DisplaySwitch.exe /extend
taskkill /f /im googledrivesync.exe
taskkill /f /im explorer.exe
taskkill /f /im DS3_Tool.exe
start explorer.exe
::finally everything is cleaned up
感谢您的帮助!
答案 0 :(得分:1)
由于您只向我们展示了批次的一部分,这很难说,但是
if %time%==180(
在语法上是不正确的两个计数。
首先,必须是180
和(
之间的空格
其次,time
是magic variable
,它以用户当前选择的格式返回当前系统时间。在我的例子中,这是hh:mm:ss:ms - 最不可能匹配180
。设置名为time
的用户环境变量后,用户变量将覆盖magic variable
。 (这是一个副作用,但通常不是一个好主意)
可能修复这些可以解决您的问题 - 并且策略性地插入pause
命令可以让您看到错误消息(就像在if
行之后......当然,您必须能够猜测策略在哪里,并伴随着练习......)
答案 1 :(得分:1)
这应该有效 - 并且在关闭可执行文件并完成循环时退出。
不要将系统变量用作普通变量,例如time
date
username
等。
:loop
SET timeloop=0
tasklist /FI "IMAGENAME eq pcsx2-r5875.exe" 2>NUL | find /I /N "pcsx2r5875.exe">NUL || goto :EOF
nircmd.exe sendkey F1 press
nircmd.exe sendkey F2 press
:loop2
nircmd.exe wait 100
set /a timeloop+=1
if %timeloop% LSS 180 goto :loop2
goto loop