[batch] xcopy und del problem mit variablen

froesch

Grünschnabel
ich schreibe mir gerade eine batch um einige files zu kopieren. so langsam weiß ich nicht mehr weiter...

Code:
@ECHO off
cls

:: pfade werde zugewiesen

:: quelle:
set path1=%~dp0%
echo.

:: ziel:
echo Target folder for the files to be copied (eg D:\test 1\):
set /p path2=D:\test 1\
echo.

:: zu kopierende dateien werden uebertragen

echo Files will now be copied. please wait...
echo.
xcopy "%path1%Data\Win32\Loc" "%path2%Data\Win32\Loc" /Y /I /Q
xcopy "%path1%Update\Patch\Data\Win32\Loc" "%path2%Update\Patch\Data\Win32\Loc" /Y /I /Q

:: aufräumen

del "%path2%\Data\Win32\Loc\ru.sb"
del "%path2%\Data\Win32\Loc\ru.toc"
del "%path2%\Update\Patch\Data\Win32\Loc\ru.sb"
del "%path2%\Update\Patch\Data\Win32\Loc\ru.toc"

hierbei sollen zuerst einige dateien kopiert werden und danach alte dateien mit anderem namen gelöscht werden. weder xcopy noch del scheinen mit den variablen der pfade klarzukommen :-(
 
Zuletzt bearbeitet:
Code:
set /p path2=D:\test 1\

also ich habe rausgefunden, dass diese variable überhaupt nicht behalten wird. als echo wird die variable jedenfalls nicht ausgegeben.

sobald ich /p entferne geht alles reibungslos. nur fraglich ist nun wie ich die eingabeaufforderung jetzt manage?
 
Zuletzt bearbeitet:
das p steht doch nur für den promt oder nicht? sobald ich also an der stelle (z.b. bei default) enter drücke sollte der angegebene pfad doch auch als variable gelten oder nicht? oder würde das bedeuten ich muß D:\test 1\ beim prompt löschen und nochmals selber eintippen dass es als eingabe für die variable anerkannt wird?
 
Zuletzt bearbeitet:
das p steht doch nur für den promt oder nicht? sobald ich also an der stelle (z.b. bei default) enter drücke sollte der angegebene pfad doch auch als variable gelten oder nicht? oder würde das bedeuten ich muß D:\test 1\ beim prompt löschen und nochmals selber eintippen dass es als eingabe für die variable anerkannt wird?
Das /p bei set führt dazu, das set sich anders verhält als normalerweise.

Es zeigt einfach den Text hinter dem = Zeichen als "Prompt" an. Der Wert der Variablen wird auf den Wert gesetzt, den der Benutzer (also du) hinter diesem Prompt (den man im übrigen nicht löschen kann) eingibt.

Bsp:
Code:
set /p eingabe=Bitte geben sie einen Text ein: 
echo.sie haben %eingabe% eingegeben.
Ausführung:
Code:
Bitte geben sie einen Text ein: Bla, bla, bla
sie haben Bla, bla, bla eingegeben.
Was willst du denn erreichen? Willst du einen Wert vom Benutzer abfragen? Mit einem Standardwert belegen?
Code:
set /p eingabe=Zielpfad (d:\test 1) 
if not defined eingabe set eingabe=d:\test 1
Gruß
 
jepp genau so hatte ich das in etwa vor. somit macht mir das später die installation meines russischen battlefield 3 nun einfacher mit dem language changer. thx

Code:
@ECHO off
cls

:: quelle:
set path1=%~dp0
echo.

:: ziel:
echo Target folder for the files to be copied
echo Default is C:\Program Files (x86)\Origin Games\Battlefield 3
echo if you have changed installationpath change here or press enter for default
echo Hint: without slash at the end when editing here!
set /p path2=
if not defined path2 set path2=C:\Program Files (x86)\Origin Games\Battlefield 3
echo.
echo Files will now be copied to
echo %path2%
echo please wait...
echo.
xcopy "%path1%Data\Win32\Loc" "%path2%\Data\Win32\Loc" /Y /I /Q /J
xcopy "%path1%Update\Patch\Data\Win32\Loc" "%path2%\Update\Patch\Data\Win32\Loc" /Y /I /Q
copy "%path1%GDFBinary_en_US.dll" "%path2%\GDFBinary_en_US.dll" /Y
cls
echo.
echo deleting old russian language files
echo.
del "%path2%\Data\Win32\Loc\ru.sb"
del "%path2%\Data\Win32\Loc\ru.toc"
del "%path2%\Update\Patch\Data\Win32\Loc\ru.sb"
del "%path2%\Update\Patch\Data\Win32\Loc\ru.toc"
echo.
echo If you get an error these files are already deleted.

echo.
:start
ECHO Auswahl
ECHO 1. x64
ECHO 2. x32
set /p choice=Type the number for your system:
if not '%choice%'=='' set choice=%choice:~0,1%
if '%choice%'=='1' goto x64
if '%choice%'=='2' goto x32
ECHO "%choice2%" is not valid please try again
ECHO.
goto start

:x64
ECHO x64 registry keys will be written now
set path2=D:\origin games\Battlefield 3
REG ADD "HKLM\SOFTWARE\Wow6432Node\Electronic Arts\Battlefield 3" /v "Locale" /t REG_SZ /d "en" /f
REG ADD "HKLM\SOFTWARE\Wow6432Node\Electronic Arts\Battlefield 3" /v "Language" /t REG_SZ /d "English" /f
REG ADD "HKLM\SOFTWARE\Wow6432Node\EA Games\Battlefield 3" /v "Locale" /t REG_SZ /d "en_US" /f
REG ADD "HKLM\SOFTWARE\Wow6432Node\Origin Games\DGR01609244" /v "Locale" /t REG_SZ /d "en_US" /f
REG ADD "HKLM\SOFTWARE\Wow6432Node\EA Games\Battlefield 3" /v "GDFBinary" /t REG_SZ /d "%path2%\GDFBinary_en_US.dll" /f
goto end

:x32
ECHO x32 registry keys will be written now
REG ADD "HKLM\SOFTWARE\Electronic Arts\Battlefield 3" /v "Locale" /t REG_SZ /d "en" /f
REG ADD "HKLM\SOFTWARE\Electronic Arts\Battlefield 3" /v "Language" /t REG_SZ /d "English" /f
REG ADD "HKLM\SOFTWARE\Wow6432Node\EA Games\Battlefield 3" /v "Locale" /t REG_SZ /d "en_US" /f
REG ADD "HKLM\SOFTWARE\Wow6432Node\Origin Games\DGR01609244" /v "Locale" /t REG_SZ /d "en_US" /f 

goto end

:end

echo have a nice day!
echo froesch

pause
exit
 
Zurück