¿Cómo copio un archivo elegido en un cuadro de diálogo de archivo y luego cambio el nombre del archivo copiado, todo en un script por lotes?

¿Cómo copio un archivo elegido en un cuadro de diálogo de archivo y luego cambio el nombre del archivo copiado, todo en un script por lotes?

Estoy intentando semiautomatizar la configuración de los archivos .sav de mi Nintendo e-Reader (sin embargo, el archivo no tiene que tener una extensión de archivo .sav) usando un script por lotes. La forma no automática que usaría sería hacer lo siguiente en este orden:

  1. Encuentra un archivo.
  2. Copie el archivo al mismo directorio quee-Reader (EE.UU.).gba(BIOS de mi Nintendo e-Reader).
  3. Cambie el nombre de la nueva copia del archivo ae-Reader (EE.UU.).saventonces funciona con el programa con el que elijo usar el archivo, que tiene el nombre de archivovisualboyadvance-m.exe.
  4. Cargae-Reader (EE.UU.).gbaen el programa, junto con el archivo, arrastrandoe-Reader (EE.UU.).gbaal programa.

La forma semiautomática funcionaría haciendo lo siguiente en este orden:

  1. Abra el script por lotes.
  2. Escoge un archivo.
  3. El script copia el archivo en el mismo directorio quee-Reader (EE.UU.).gba.
  4. El script cambia el nombre de la copia del archivo ae-Reader (EE.UU.).sav. Este nuevo nombre para el archivo se fija en el script.
  5. Se abre el guióne-Reader (EE.UU.).gba, junto con el archivo.

Estas son dos características que deseo que tenga mi script:

  1. Se puede ejecutar en cualquier lugar sin ser modificado, ya sea que el emulador esté en un directorio superior o inferior al script. Por ejemplo, un directorio superior sería como C:\Directorio Script\Directorio Guardar, mientras que un directorio inferior sería como C:\Directorio Guardar\Directorio Script.
  2. El archivo puede estar en un directorio diferente al script, pero debe estar en el mismo directorio quee-Reader (EE.UU.).gba.

Mi código permite seleccionar un archivo en un cuadro de diálogo de archivo y se abree-Reader (EE.UU.).gbaen el programa, pero ni siquiera puedo copiar el archivo, en lugar de darme unEl sistema no puede encontrar la ruta especificada.error. Este es ese código, que reproduce el problema al copiar el archivo y lo depura indicando la ruta completa del archivo que se seleccionó y también el directorio actual:

@echo off
set d="about:<input type=file id=FILE><script>FILE.click();new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).WriteLine(FILE.value);close();resizeTo(0,0)</script>"
for /f "tokens=*delims=" %%p in ('mshta.exe %d%')do set "f=%%p
echo Selected file: "%f%
echo Current directory: "%cd%
copy "%f%" "e-Reader (USA).sav
start "" visualboyadvance-m.exe "e-Reader (USA).gba"
pause

información relacionada