BATCH - Copy vers une variable [Fermé]

Signaler
Messages postés
13
Date d'inscription
samedi 19 mai 2012
Statut
Membre
Dernière intervention
9 juin 2012
-
Messages postés
18242
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
13 juin 2021
-
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

Messages postés
18242
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
13 juin 2021
5 305
enlever le @echo off pour que le script affiche tout ce qu'il fait, surtout le contenu des variables
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
13
Date d'inscription
samedi 19 mai 2012
Statut
Membre
Dernière intervention
9 juin 2012

Désolé de mon retard, ouaip je teste ça.
Messages postés
13
Date d'inscription
samedi 19 mai 2012
Statut
Membre
Dernière intervention
9 juin 2012

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.
Messages postés
18242
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
13 juin 2021
5 305
d'où les + : echo +%gamelocation%+
on voit tout de suite l'espace
Messages postés
13
Date d'inscription
samedi 19 mai 2012
Statut
Membre
Dernière intervention
9 juin 2012

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
Messages postés
18242
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
13 juin 2021
5 305
%%a est une variable qui prend la valeur de tous les champs (tokens=*) de %gamelocation1%
Messages postés
18242
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
13 juin 2021
5 305
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:\\=\!
Messages postés
13
Date d'inscription
samedi 19 mai 2012
Statut
Membre
Dernière intervention
9 juin 2012

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.
Messages postés
18242
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
13 juin 2021
5 305
c'est peut être monfichier.txt qu'il ne trouve pas
Messages postés
13
Date d'inscription
samedi 19 mai 2012
Statut
Membre
Dernière intervention
9 juin 2012

non non j'ai essaye sur un autre dossier ca fonctionne.
Messages postés
18242
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
13 juin 2021
5 305
essaye
type  monfichier.txt > "%gamelocation%\test.txt"
Messages postés
18242
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
13 juin 2021
5 305
a la place d'afficher sur l'écran, il va écrire dans un fichier, le > est une redirection
c'est un équivalent de copy
Messages postés
13
Date d'inscription
samedi 19 mai 2012
Statut
Membre
Dernière intervention
9 juin 2012

Est ce que test.txt doit déjà exister ?
Messages postés
18242
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
13 juin 2021
5 305
c'est égal, si il existe, il l'écrase sinon il le crée
Messages postés
13
Date d'inscription
samedi 19 mai 2012
Statut
Membre
Dernière intervention
9 juin 2012

Même résultat, le chemin spécifié est introuvable.
Messages postés
13
Date d'inscription
samedi 19 mai 2012
Statut
Membre
Dernière intervention
9 juin 2012

Pourtant quand je demande à l'utilisateur via "set" le chemin du jeu, celui ci est stocké dans une variable aussi, mais ca fonctionne :/. Je t'envoie mon code.
Messages postés
13
Date d'inscription
samedi 19 mai 2012
Statut
Membre
Dernière intervention
9 juin 2012

@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