BATCH - Copy vers une variable

Bonjour,

Voilà j'ai stocké un répertoire dans une variable de cette manière :

REG EXPORT "HKLM\SOFTWARE\Wow6432Node\THQ\Dawn of War - Dark Crusade" var1.txt
FIND /I "InstallLocation" var1.txt>var2.txt
FOR /F "usebackq skip=2 tokens=2* delims==" %%v in (var2.txt) DO ECHO %%v>var3.txt && SET /p var1=<var3.txt
set var2=%var1:"=%
set gamelocation=%var2:\\=\%

del var*.txt

Seulement une fois que je veux copier des fichiers vers ce repertoire, il me dit que le chemin est introuvable. Fail.

la syntaxe n'est peut être pas bonne, la voici :
copy monfichier.txt "%gamelocation%"

C'est triste de rencontrer une erreur comme ça ^^.

Si quelqu'un peut m'aider, je le remercierai bien !

Merci d'avance en tout cas !

7 réponses

  1. Contributeur
    enlever le @echo off pour que le script affiche tout ce qu'il fait, surtout le contenu des variables
    1. Désolé de mon retard, ouaip je teste ça.
    2. Ah oui en effet, j'ai trouvé le bug :3. Il a ajouté un espace après le chemin. Donc au lieu de "C:\monchemin", j'ai "C:\monchemin ". Ce qui fausse tout.
    3. Contributeur
      d'où les + : echo +%gamelocation%+
      on voit tout de suite l'espace
    4. Voilà l'espace est enlevé. Juste question, le code que j'ai utilisé ici je l'ai trouvé, car je ne maitrise pas encore la commande for. Ca fonctionne, mais je ne comprends ce qu'est le "%%a". Tu peux m'expliquer ?

      FOR /F "tokens=* delims= " %%a IN ("%gamelocation1%") DO (
      	CALL :spacestrip %%a
      	>> var2.txt	ECHO.!S!
      	SET /P gamelocation=<var2.txt
      )
      
      GOTO voicemenu
      
      :spacestrip
      SET S=%*
      GOTO :eof
      
    5. Contributeur
      %%a est une variable qui prend la valeur de tous les champs (tokens=*) de %gamelocation1%
  2. Contributeur
    hello
    affiche la variable, avec des + pour repérer les espaces
    echo +%gamelocation%+
    ou essayer
    setlocal enableDelayedExpansion
    REG EXPORT "HKLM\SOFTWARE\Wow6432Node\THQ\Dawn of War - Dark Crusade" var1.txt
    FIND /I "InstallLocation" var1.txt>var2.txt
    FOR /F "usebackq skip=2 tokens=2* delims==" %%v in (var2.txt) DO ECHO %%v>var3.txt && SET /p var1=<var3.txt
    set var2=!var1:"=!
    set gamelocation=!var2:\\=\!
    
    1. Le problème c'est que ce n'est pas dans un "echo", mais dans un "copy", c'est ça qui diffère ^^. J'essaye la deuxième solution !

      EDIT : La deuxième solution ne fonctionne pas. Je ne pense pas que ce soit les espaces le problème, vu que j'entoure le dossier de destination de guillemets.

      De plus quand je fais un echo de %gamelocation%, je tombe bien sur le dossier exact : C:\Jeux\Dawn of War - Dark Crusade avec les espaces sans problème. C'est ça qui est bizarre, en "echo" le chemin est ok, mais en "copy" il ne le trouve pas.
      1. non non j'ai essaye sur un autre dossier ca fonctionne.
        1. Contributeur
          essaye
          type  monfichier.txt > "%gamelocation%\test.txt"
          1. A la place de copy je suppose.
          2. Contributeur
            oui tester si il est possible de créer un fichier dans ce dossier
          3. Et test.txt, j'en fais quoi ? Je comprends pas ta syntaxe, comment on peut faire un type sur deux fichiers differents ?
          4. Contributeur
            a la place d'afficher sur l'écran, il va écrire dans un fichier, le > est une redirection
            c'est un équivalent de copy
          5. Est ce que test.txt doit déjà exister ?
        2. @echo off
          color 02
          
          setlocal enableDelayedExpansion
          REG EXPORT "HKLM\SOFTWARE\Wow6432Node\THQ\Dawn of War - Dark Crusade" var1.txt
          FIND /I "InstallLocation" var1.txt>var2.txt
          FOR /F "usebackq skip=2 tokens=2* delims==" %%v in (var2.txt) DO ECHO %%v>var3.txt && SET /p var1=<var3.txt
          set var2=!var1:"=!
          set gamelocation=!var2:\\=\!
          
          del var*.txt
          cls
          
          goto menu
          :menu
          echo.
          echo              *******************************************************
          echo              *                                                     *
          echo              *   LANGUAGE CHANGER FOR DAWN OF WAR - DARK CRUSADE   *
          echo              *                                                     *
          echo              *******************************************************
          echo.
          echo              Game location found : %gamelocation%
          
          goto voicemenu
          :voicemenu
          echo.
          echo              Which language would you like to setup for voices ?
          echo.
          echo              1) English
          echo              2) French
          echo              3) Exit
          echo.
          echo              Please enter your number choice here :
          echo.
          set /P V=
          if "%V%"=="1" set VoiceLanguage=English
          if "%V%"=="2" set VoiceLanguage=French
          if "%V%"=="1" goto EnglishVoices
          if "%V%"=="2" goto FrenchVoices
          if "%V%"=="3" exit
          
          :EnglishVoices
          echo.
          copy "ANGLAIS\VOIX ANGLAISES\DXP2Data-Sound-Speech.sga" "%gamelocation%\DXP2\Locale\English\" /Y
          copy "ANGLAIS\VOIX ANGLAISES\W40kData-Sound-Speech.sga" "%gamelocation%\W40k\Locale\English\" /Y
          echo.
          PING 1.1.1.1 -n 1 -w 2000 >NUL
          goto textmenu
          
          
          :FrenchVoices
          echo.
          copy test.txt "+%gamelocation%+\DXP2\Locale\English\" /Y              // Ici, c'est les deux lignes de test, donc si su tu veux modifier le fichier, essaye de le faire ici.
          copy test.txt "%gamelocation%" /Y
          echo.
          PING 1.1.1.1 -n 1 -w 2000 >NUL
          goto textmenu
          
          :textmenu
          echo.
          echo              Which language would you like to setup for texts ?
          echo.
          echo              1) English
          echo              2) French
          echo              3) Exit
          echo.
          echo              Please enter your number choice here :
          echo.
          set /P T=
          if "%T%"=="1" set TextLanguage=English
          if "%T%"=="2" set TextLanguage=French
          if "%T%"=="1" goto EnglishTexts
          if "%T%"=="2" goto FrenchTexts
          if "%T%"=="3" exit
          
          :EnglishTexts
          echo.
          copy "ANGLAIS\TEXTES ANGLAIS\DXP2.ucs" "%gamelocation%\DXP2\Locale\English\" /Y
          copy "ANGLAIS\TEXTES ANGLAIS\W40k.ucs" "%gamelocation%\W40k\Locale\English\" /Y
          copy "ANGLAIS\TEXTES ANGLAIS\Engine.ucs" "%gamelocation%\Engine\Locale\English\" /Y
          echo.
          PING 1.1.1.1 -n 1 -w 2000 >NUL
          goto endmenu
          
          :FrenchTexts
          echo.
          copy "FRANCAIS\TEXTES FRANCAIS\DXP2.ucs" "%gamelocation%\DXP2\Locale\English\" /Y
          copy "FRANCAIS\TEXTES FRANCAIS\W40k.ucs" "%gamelocation%\W40k\Locale\English\" /Y
          copy "FRANCAIS\TEXTES FRANCAIS\Engine.ucs" "%gamelocation%\Engine\Locale\English\" /Y
          echo.
          PING 1.1.1.1 -n 1 -w 2000 >NUL
          goto endmenu
          
          :endmenu
          echo              Language for the voices applied : %VoiceLanguage%
          echo              Language for the texts applied : %TextLanguage%
          echo.
          pause