Batchprogrammierung, Probleme bei Variable
Ich möchte gerne in einer Batchdatei eine kleine Abfrage machen ob eine bestimmte Datei überschrieben werden soll wenn Sie denn schon vorhanden ist.
Hier ist mal ein kleiner Auszug aus dem was ich bisher gemacht habe:
@echo off
set SORTDATE=%date:~0,2%%date:~3,2%%date:~-4%
for /L %%N IN (100000, 1, 130000) DO IF EXIST "\\Peha01\pcdata\%%N.N01" (MKDIR "\\Peha01\pcdata\%%N\%SORTDATE%"
IF EXIST "\\Peha01\pcdata\%%N\%SORTDATE%\Datanorm.001" (echo.
echo.
echo Datei Datanorm.001 bereits vorhanden.
echo Soll die Datei ueberschrieben werden?
set /p var=J/N:
IF %var%==J (Move "\\Peha01\pcdata\%%N.N01" "\\Peha01\pcdata\%%N\%SORTDATE%\Datanorm.001"
Move "\\Peha01\pcdata\%%N.P01" "\\Peha01\pcdata\%%N\%SORTDATE%\Datpreis.001"
)else (
echo %%N ))
das Problem ist wie folgt:
Wenn ich das sowie es da jetzt steht schreibe funktioniert das Programm im vorhinein nicht und wenn ich das so ändere das es so aussieht:
IF "%var%"==J (Move ...
also die Variable in Anführungszeichen schreibe, denn startet das Programm zwar aber er Ignoriert die eingabe.
Also wenn ich "J" eingebe macht er den Befehl trotzdem nicht.
Hier ist mal ein kleiner Auszug aus dem was ich bisher gemacht habe:
@echo off
set SORTDATE=%date:~0,2%%date:~3,2%%date:~-4%
for /L %%N IN (100000, 1, 130000) DO IF EXIST "\\Peha01\pcdata\%%N.N01" (MKDIR "\\Peha01\pcdata\%%N\%SORTDATE%"
IF EXIST "\\Peha01\pcdata\%%N\%SORTDATE%\Datanorm.001" (echo.
echo.
echo Datei Datanorm.001 bereits vorhanden.
echo Soll die Datei ueberschrieben werden?
set /p var=J/N:
IF %var%==J (Move "\\Peha01\pcdata\%%N.N01" "\\Peha01\pcdata\%%N\%SORTDATE%\Datanorm.001"
Move "\\Peha01\pcdata\%%N.P01" "\\Peha01\pcdata\%%N\%SORTDATE%\Datpreis.001"
)else (
echo %%N ))
das Problem ist wie folgt:
Wenn ich das sowie es da jetzt steht schreibe funktioniert das Programm im vorhinein nicht und wenn ich das so ändere das es so aussieht:
IF "%var%"==J (Move ...
also die Variable in Anführungszeichen schreibe, denn startet das Programm zwar aber er Ignoriert die eingabe.
Also wenn ich "J" eingebe macht er den Befehl trotzdem nicht.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 180429
Url: https://administrator.de/contentid/180429
Ausgedruckt am: 22.11.2024 um 19:11 Uhr
8 Kommentare
Neuester Kommentar
Hallo, warum nutzt du nicht die Abfrage von move?
Dann kannst du dir die IF Abfrage sparen.
Edit: Nicht richtig gelesen. Glaube "move" ist nicht für Netzlaufwerke gedacht. Würde es daher mal mit "robocopy" und "/MOV" versuchen.
Noch eine kleine Ergänzung zu dem "SORTDATE". Wenn die Punkte weg sollen, kannst du das auch so schreiben: %date:.=%
move /-Y "c:\datei1" "c:\test\datei1"
Dann kannst du dir die IF Abfrage sparen.
Edit: Nicht richtig gelesen. Glaube "move" ist nicht für Netzlaufwerke gedacht. Würde es daher mal mit "robocopy" und "/MOV" versuchen.
Noch eine kleine Ergänzung zu dem "SORTDATE". Wenn die Punkte weg sollen, kannst du das auch so schreiben: %date:.=%
angenommen, der werte benutzer gibt an dieser Stelle
echo Soll die Datei ueberschrieben werden?
set /p var=J/N:
... ein "j" oder ein "J" oder ein "X" oder ein "U" ein...
...dann...
...lautet die stumpf eingesetzte Abfrage
IF "%var%"==J (Move ...
-> IF "j"==J (Move ...
-> IF "J"==J (Move ...
-> IF "X"==J (Move ...
-> IF "U"==J (Move ...
In welchen Fällen kann denn jemals das Gleiche auf beiden Seite des doppelten Gleichheitszeichens stehen?
echo Soll die Datei ueberschrieben werden?
set /p var=J/N:
... ein "j" oder ein "J" oder ein "X" oder ein "U" ein...
...dann...
...lautet die stumpf eingesetzte Abfrage
IF "%var%"==J (Move ...
-> IF "j"==J (Move ...
-> IF "J"==J (Move ...
-> IF "X"==J (Move ...
-> IF "U"==J (Move ...
In welchen Fällen kann denn jemals das Gleiche auf beiden Seite des doppelten Gleichheitszeichens stehen?
- keine Gruß
- keine Codetags
- keine identische Anzahl von geöffneten und geschlossenen Klammern
Wären IHMO mal 3 Punkte, da du aber mit einem führenden @echo off beginnst, passt das dann wieder.
moin Snitch0r,
Dein Problem ist u.a. der Klammerblock
Hättste mal die Tags <code>
:: Batch inhalt
rem bei Fehler MIT echo ON
rem ....
benutzt, dann ware es eher ersichtlich gewesen.
Gruß Phil
Dein Problem ist u.a. der Klammerblock
rem Klammerblock
(
rem
set /p var=J/N
if /i "%var%" equ "j" (echo ...nix passiert ) else echo der Frische Variablenwert kann nicht in der Klammer benutzt werden
if defined var echo Nixpassiert trotz gesetzter Variable %var%.
setlocal enabledelayedexpansion
rem völlig wurst ob ohne Anführungszeichen ... ist ja verzögert aufgelöst
if /i !var! equ j (echo Diesmal klappt es mit dem lesen) else echo doch kein j
endlocal
rem oder es wird in ein Unterprogramm gesprungen
call echo "%%var%%" |findstr "j" >nul && echo isn j im call drinnen
rem oder so eins
call :submarine "%%var%%"
rem nun is der hier fertich - der nächste Bitte
)
pause
goto :eof
:submarine
if /i "%~1" equ "j" echo in der Sub isn j drin
rem oder auch so
if /i "%var%" equ "j" echo mit dem zweiten sieht man besser auchn j drin
Hättste mal die Tags <code>
:: Batch inhalt
rem bei Fehler MIT echo ON
rem ....
benutzt, dann ware es eher ersichtlich gewesen.
Gruß Phil