我正在制作一个批处理脚本,当打开该批处理脚本时,将要求用户选择一个.sav文件在VisualBoyAdvance-M中打开,并且与批处理脚本的位置无关(只要它位于与VisualBoyAdvance-M)或.sav文件,相同的批处理脚本无需更改即可在任何目录中运行。
。sav文件将与我的Nintendo e-Reader BIOS文件复制到同一目录,并重命名为e-Reader(USA).sav,因为需要调用该文件才能与我的副本一起使用VisualBoyAdvance-M的名称,因为e-Reader(USA).gba是我的Nintendo e-Reader BIOS文件的名称,并且.sav文件的文件扩展名必须是.sav。但是,我什至无法复制.sav文件。相反,它告诉我“系统找不到指定的文件。”。但是,我可以显示文件目录,包括文件本身的名称,以及当前目录,即使在同一行之前出现文本也是如此。另外,我已经获得了仿真器来加载Nintendo e-Reader BIOS文件。无论如何,我该如何解决该问题?这是我的批处理脚本中使用的代码,它具有以下问题:
@echo off
setlocal enabledelayedexpansion
set dialog="about:<input type=file id=FILE><script>FILE.click();new ActiveXObject
set dialog=%dialog%('Scripting.FileSystemObject').GetStandardStream(1).WriteLine(FILE.value);
set dialog=%dialog%close();resizeTo(0,0);</script>"
for /f "tokens=*delims=" %%p in ('mshta.exe %dialog%')do set "file=%%p"
echo Selected file: "%file%
echo Current directory: "%cd%
copy "%file%" "e-Reader (USA).sav
start "" visualboyadvance-m.exe "e-Reader (USA).gba"
pause
这是因为在“复制”命令上缺少尾部双引号。
这里是经过重构的版本,经过测试并证明可以正常工作。
[我还对其进行了修改,以覆盖电子阅读器(USA).sav“文件(如果已经存在。)>
@(setlocal echo off ) CALL :Main ( ENDLOCAL PAUSE EXIT /B ) :Main SET "dialog=about:<input type=file id=FILE><script>FILE.click();new ActiveXObject" SET "dialog=%dialog%('Scripting.FileSystemObject').GetStandardStream(1).WriteLine(FILE.value);" SET "dialog=%dialog%close();resizeTo(0,0);</script>" FOR /f "tokens=*delims=" %%p in (' mshta.exe "%dialog%" ') DO ( SET "file=%%p" ) ECHO Selected file: "%file%" ECHO Script Directory: "%~dp0" COPY /V /Y "%file%" "%~dp0e-Reader (USA).sav" REM start "" visualboyadvance-m.exe "%~dp0e-Reader (USA).gba" GOTO :EOF
下面是示例输出
我选择了脚本本身,然后键入以显示该文件已按预期创建。
C:\Admin>C:\Admin\SO_GBA_File_Select.cmd
Selected file: "C:\Admin\SO_GBA_File_Select.cmd"
Script Directory: "C:\Admin\"
COPY /B /V /Y "C:\Admin\SO_GBA_File_Select.cmd" "C:\Admin\e-Reader (USA).sav"
1 file(s) copied.
Press any key to continue . . .
C:\Admin>type "C:\Admin\e-Reader (USA).sav"
@(setlocal
echo off
)
CALL :Main
( ENDLOCAL
PAUSE
EXIT /B
)
:Main
SET "dialog=about:<input type=file id=FILE><script>FILE.click();new ActiveXObject"
SET "dialog=%dialog%('Scripting.FileSystemObject').GetStandardStream(1).WriteLine(FILE.value);"
SET "dialog=%dialog%close();resizeTo(0,0);</script>"
FOR /f "tokens=*delims=" %%p in (' mshta.exe "%dialog%"
') DO ( SET "file=%%p" )
ECHO=Selected file: "%file%"
ECHO=Script Directory: "%~dp0"
ECHO=COPY /V /Y "%file%" "%~dp0e-Reader (USA).sav"
COPY /B /V /Y "%file%" "%~dp0e-Reader (USA).sav"
REM start "" visualboyadvance-m.exe "%~dp0e-Reader (USA).gba"
GOTO :EOF
C:\Admin>