我无法将从文件对话框中选择的文件复制到与批处理脚本相同的目录,并将其重命名为e-Reader(USA).sav

问题描述 投票:0回答:1

我正在制作一个批处理脚本,当打开该批处理脚本时,将要求用户选择一个.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
windows batch-file copy emulation nintendo
1个回答
0
投票

这是因为在“复制”命令上缺少尾部双引号。

这里是经过重构的版本,经过测试并证明可以正常工作。

[我还对其进行了修改,以覆盖电子阅读器(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>
© www.soinside.com 2019 - 2024. All rights reserved.