Como copio um arquivo escolhido em uma caixa de diálogo de arquivo e renomeio o arquivo copiado, tudo em um script em lote?

Como copio um arquivo escolhido em uma caixa de diálogo de arquivo e renomeio o arquivo copiado, tudo em um script em lote?

Estou tentando semiautomatizar a configuração dos arquivos .sav do meu Nintendo e-Reader (no entanto, o arquivo não precisa ter uma extensão .sav) usando um script em lote. A maneira não automatizada que eu usaria seria fazer o seguinte nesta ordem:

  1. Encontre um arquivo.
  2. Copie o arquivo para o mesmo diretório quee-Reader (EUA).gba(BIOS do meu Nintendo e-Reader).
  3. Renomeie a nova cópia do arquivo parae-Reader (EUA).saventão funciona com o programa que escolhi para usar o arquivo, que tem o nome do arquivovisualboyadvance-m.exe.
  4. Carregare-Reader (EUA).gbano programa, junto com o arquivo, arrastandoe-Reader (EUA).gbapara o programa.

A forma semiautomática funcionaria fazendo o seguinte nesta ordem:

  1. Abra o script em lote.
  2. Escolha um arquivo.
  3. O script copia o arquivo para o mesmo diretório quee-Reader (EUA).gba.
  4. O script renomeia a cópia do arquivo parae-Reader (EUA).sav. Este novo nome para o arquivo é fixado no script.
  5. O script abree-Reader (EUA).gba, junto com o arquivo.

Esses são dois recursos que desejo que meu script tenha:

  1. Ele pode ser executado em qualquer lugar sem ser modificado, esteja o emulador em um diretório superior ou inferior ao script. Por exemplo, um diretório superior seria como C:\Script directory\Save directory, enquanto um diretório inferior seria como C:\Save directory\Script directory.
  2. O arquivo pode estar em um diretório diferente do script, mas deve estar no mesmo diretório quee-Reader (EUA).gba.

Meu código permite que um arquivo seja selecionado em uma caixa de diálogo de arquivo e abree-Reader (EUA).gbano programa, mas não consigo nem copiar o arquivo, em vez disso me dando umO sistema não consegue encontrar o caminho especificado.erro. Este é aquele código que reproduz o problema de cópia do arquivo e depura o problema informando o caminho completo do arquivo que foi selecionado e também o diretório atual:

@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

informação relacionada