Problem Batch Ausgabe in File
Guten Tag,
ich versuche mich gerade an Batch Skripting und habe schon viele hilfreiche Tips von hier, ohne die ich nie so weit gekommen wäre. Nun fehlt mir noch ein Baustein zum Ziel und ich hoffe ihr könnt mir dabei helfen. Worum gehts?
Ich hole hier ein bisschen weiter aus, damit ihr auch nachvollziehen könnt, was ich mache: Es gibt ein Netzlaufwerk. Darauf soll mittels Robocopy im Mirror Mode ein Abbild eines lokalen Ordners erstellt werden. Die Namen der Ordner, welche Lokal und auf dem Netzlaufwerk existieren, werden vom Admin vorgegeben. Um nun einen neuen Ordner inkl. dazugehörigem Batch Script zum automatischen Kopieren mittels Robocopy zu erstellen, gibt es folgendes Script. Dieses liest den Firmennamen ein und erstellt einen Ordner inkl. Script:
Das Script lautet:
Wenn ich das Script ausführe und als Kundennamen "Testkunde3" eingebe, lautet die Ausgabe:
Leider entspricht die Ausgabe nicht dem gewünschten Ergebnis, denn folgende Zeile fehlt in der Ausgabe zw. Zeile 8 und 9 vollständig:
Die Ausgabe auf der Kommandozeile sieht so aus:
So weit ich es sehe, werden gewisse Variablen in dieser Zeile ersetzt, obwohl ich sie mittels zusätzlichem "%" eingetragen habe. Ist das überhaupt die korrekte Vorgehensweise, wenn ein Batch Script bestimmte Variablen nicht ersetzen soll, sie mit jeweils doppeltem "%" davor und danach zu kennzeichnen? Bei den restlichen Zeilen funktioniert es wunderbar.
Für Hilfe wäre ich sehr dankbar.
Mit freundlichen Grüßen,
Daniel
ich versuche mich gerade an Batch Skripting und habe schon viele hilfreiche Tips von hier, ohne die ich nie so weit gekommen wäre. Nun fehlt mir noch ein Baustein zum Ziel und ich hoffe ihr könnt mir dabei helfen. Worum gehts?
Ich hole hier ein bisschen weiter aus, damit ihr auch nachvollziehen könnt, was ich mache: Es gibt ein Netzlaufwerk. Darauf soll mittels Robocopy im Mirror Mode ein Abbild eines lokalen Ordners erstellt werden. Die Namen der Ordner, welche Lokal und auf dem Netzlaufwerk existieren, werden vom Admin vorgegeben. Um nun einen neuen Ordner inkl. dazugehörigem Batch Script zum automatischen Kopieren mittels Robocopy zu erstellen, gibt es folgendes Script. Dieses liest den Firmennamen ein und erstellt einen Ordner inkl. Script:
Das Script lautet:
@set /p namevar=Bitte Firmennamen eingeben:
@echo Firmenordner und Upload Skript werden erstellt. Einen Moment bitte...
@mkdir "%namevar%"
@echo @echo off>"%namevar%\rc_upload_%namevar%.bat"
@echo REM === ATTENTION === ATTENTION ===>>"%namevar%\rc_upload_%namevar%.bat"
@echo REM ===============================>>"%namevar%\rc_upload_%namevar%.bat"
@echo REM === DO NOT MODIFY THIS FILE ===>>"%namevar%\rc_upload_%namevar%.bat"
@echo REM ==== DATEI NICHT VERÄNDERN ====>>"%namevar%\rc_upload_%namevar%.bat"
@echo REM ===============================>>"%namevar%\rc_upload_%namevar%.bat"
@echo REM ==== ACHTUNG ==== ACHTUNG =====>>"%namevar%\rc_upload_%namevar%.bat"
@echo REM ===============================>>"%namevar%\rc_upload_%namevar%.bat"
@echo for /f "delims=" %%%i in ('echo %%cd%%') do set "Verzeichnispfad=%%%~ni">>"%namevar%\rc_upload_%namevar%.bat"
@echo if "%%Verzeichnispfad%%"=="%namevar%" goto Verzeichnisstimmt>>"%namevar%\rc_upload_%namevar%.bat"
@echo :Verzeichnisstimmtnicht>>"%namevar%\rc_upload_%namevar%.bat"
@echo robocopy.exe %namevar% "\\<pfad.zu.netzlaufwerk>\%namevar%\%%lun%%" /TEE /LOG:log_%namevar%.txt /MIR /Z /XD *privat* /XF rc_upload_%namevar%.bat>>"%namevar%\rc_upload_%namevar%.bat"
@echo goto :eof>>"%namevar%\rc_upload_%namevar%.bat"
@echo :Verzeichnisstimmt>>"%namevar%\rc_upload_%namevar%.bat"
@echo robocopy.exe ../%namevar% "\\<pfad.zu.netzlaufwerk>\%namevar%\%%lun%%" /TEE /LOG:../log_%namevar%.txt /MIR /Z /XD *privat* /XF rc_upload_%namevar%.bat>>"%namevar%\rc_upload_%namevar%.bat"
@echo REM === ATTENTION === ATTENTION ===>>"%namevar%\rc_upload_%namevar%.bat"
@echo REM ===============================>>"%namevar%\rc_upload_%namevar%.bat"
@echo REM === DO NOT MODIFY THIS FILE ===>>"%namevar%\rc_upload_%namevar%.bat"
@echo REM ==== DATEI NICHT VERÄNDERN ====>>"%namevar%\rc_upload_%namevar%.bat"
@echo REM ===============================>>"%namevar%\rc_upload_%namevar%.bat"
@echo REM ==== ACHTUNG ==== ACHTUNG =====>>"%namevar%\rc_upload_%namevar%.bat"
@echo REM ===============================>>"%namevar%\rc_upload_%namevar%.bat"
Wenn ich das Script ausführe und als Kundennamen "Testkunde3" eingebe, lautet die Ausgabe:
@echo off
REM === ATTENTION === ATTENTION ===
REM ===============================
REM === DO NOT MODIFY THIS FILE ===
REM ==== DATEI NICHT VERÄNDERN ====
REM ===============================
REM ==== ACHTUNG ==== ACHTUNG =====
REM ===============================
if "%Verzeichnispfad%"=="Testkunde3" goto Verzeichnisstimmt
:Verzeichnisstimmtnicht
robocopy.exe Testkunde3 "\\<pfad.zu.netzlaufwerk>\Testkunde3\%lun%" /TEE /LOG:log_Testkunde3.txt /MIR /Z /XD *privat* /XF rc_upload_Testkunde3.bat
goto :eof
:Verzeichnisstimmt
robocopy.exe ../Testkunde3 "\\<pfad.zu.netzlaufwerk>\Testkunde3\%lun%" /TEE /LOG:../log_Testkunde3.txt /MIR /Z /XD *privat* /XF rc_upload_Testkunde3.bat
REM === ATTENTION === ATTENTION ===
REM ===============================
REM === DO NOT MODIFY THIS FILE ===
REM ==== DATEI NICHT VERÄNDERN ====
REM ===============================
REM ==== ACHTUNG ==== ACHTUNG =====
REM ===============================
Leider entspricht die Ausgabe nicht dem gewünschten Ergebnis, denn folgende Zeile fehlt in der Ausgabe zw. Zeile 8 und 9 vollständig:
for /f "delims=" %%i in ('echo %cd%') do set "Verzeichnispfad=%%~ni"
Die Ausgabe auf der Kommandozeile sieht so aus:
T:\>make_kunde_v3.bat
Bitte Firmennamen eingeben:Testkunde3
Firmenordner und Upload Skript werden erstellt. Einen Moment bitte...
for /f "delims=" %T:\%~ni">>"Testkunde3\rc_upload_Testkunde3.bat"
T:\>
So weit ich es sehe, werden gewisse Variablen in dieser Zeile ersetzt, obwohl ich sie mittels zusätzlichem "%" eingetragen habe. Ist das überhaupt die korrekte Vorgehensweise, wenn ein Batch Script bestimmte Variablen nicht ersetzen soll, sie mit jeweils doppeltem "%" davor und danach zu kennzeichnen? Bei den restlichen Zeilen funktioniert es wunderbar.
Für Hilfe wäre ich sehr dankbar.
Mit freundlichen Grüßen,
Daniel
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 101303
Url: https://administrator.de/forum/problem-batch-ausgabe-in-file-101303.html
Ausgedruckt am: 22.05.2025 um 12:05 Uhr
2 Kommentare
Neuester Kommentar
Hallo schilling und willkommen als schreibendes Mitglied
!
Noch eine Anmerkung: Für Dein obiges Vorhaben würde ich eher zu folgender Schreibweise greifen:
Vorteil: Die unterschiedliche Länge der zu schreibenden Batchbefehle stört (mich) viel weniger, wenn sie am Ende der Zeile auftritt - so wird der zu erstellende Batch leichter lesbar (zumindest im Editor
).
Wenn Du dann noch den Pfad der Batchdatei in eine Variable packst, könnte das so aussehen:
Grüße
bastla
Ist das überhaupt die korrekte Vorgehensweise, wenn ein Batch Script bestimmte Variablen nicht ersetzen soll, sie mit jeweils doppeltem "%" davor und danach zu kennzeichnen?
Grundsätzlich ja, nur musst Du das auch konsequent umsetzen und jedes "%"-Zeichen verdoppeln:@echo for /f "delims=" %%%%i in ('echo %%cd%%') do set "Verzeichnispfad=%%%%~ni">>"%namevar%\rc_upload_%namevar%.bat"
@echo off & setlocal
set /p namevar=Bitte Firmennamen eingeben:
echo Firmenordner und Upload Skript werden erstellt. Einen Moment bitte...
mkdir "%namevar%"
>"%namevar%\rc_upload_%namevar%.bat" echo @echo off
>>"%namevar%\rc_upload_%namevar%.bat" echo REM === ATTENTION === ATTENTION ===
>>"%namevar%\rc_upload_%namevar%.bat" echo REM ===============================
...
Wenn Du dann noch den Pfad der Batchdatei in eine Variable packst, könnte das so aussehen:
@echo off & setlocal
set /p namevar=Bitte Firmennamen eingeben:
echo Firmenordner und Upload Skript werden erstellt. Einen Moment bitte...
mkdir "%namevar%"
set B="%namevar%\rc_upload_%namevar%.bat"
>%B% echo @echo off
>>%B% echo REM === ATTENTION === ATTENTION ===
>>%B% echo REM ===============================
...
Grüße
bastla