Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst if exist innerhalb for -Schlaufe funktioniert nicht

Mitglied: Jim-Knopf

Jim-Knopf (Level 1) - Jetzt verbinden

13.08.2009, aktualisiert 12:15 Uhr, 4334 Aufrufe, 9 Kommentare

Trotz den div. Hinweisen zu set innerhalb for-Schleifen, habe ich den Dreh noch nicht raus:

Hallo zusammen

Im folgenden Skriptteil, prüfe ich (danke Eurer Unterstützung) mit einer Schlaufe in einem Verzeichnis eine Liste von Dateien.
Wenn von heute noch keine Datei vorliegt, soll eine ältere Datei auf die heutige Datei umbenannt werden.
Wie ich feststellen musste, gibt ren aber keinen Errorlevel aus.
Also, habe ich mir gedacht, baue ich in die Schlaufe nach dem Rename noch eine Abfrage ein, ob die soeben umbenannte Datei noch existiert und würde dann auf Error gehen.

Der untenstehende Skriptteil macht nun folgendes:
Er nimmt ein älteres File z.B. 20090810.txt und nennt es auf 20090813.txt um.
Dann folgt die Prüfung, ob 20090810 noch da ist. Was ja nicht mehr der Fall ist. (Ist im Explorer auch ersichtlich). Trotzdem gibt das Skript die Zeile "... ERROR: rename "20090810.txt" nicht erfolgreich " aus.

Zuerst dachte ich, dass es evtl. im falschen Verzeichnis nachguckt, aber zwei, drei Zeilen weiter oben, hat ja das rename im richtigen Verzeichnis funktioniert. Die richtige Datei sucht es auch (gem. Log: 20090810.txt).

Ich blick da leider nicht durch. Ihr vielleicht`

Gruss
Jim

set FILENAME-TODAY=20090813.txt

:CHECKTXTTODAY
if not exist "%FILENAME-TODAY%" (
for /f "delims=" %%i in ('dir /b /a-d "*.txt" 2^>nul') do (ren "%%i" "%FILENAME-TODAY%"
if exist "%%i" do (
echo ... ERROR: rename "%%i" nicht erfolgreich >> %JOBLOG%
goto :Error
)
echo ... INFO: rename "%%i" "%FILENAME-TODAY%" >> %JOBLOG%

call :CHECKERRORLEVEL

goto :APPENDIDX
)
)


LOG:
... ERROR: rename "20090810.txt" nicht erfolgreich
Mitglied: 60730
13.08.2009 um 12:44 Uhr
Servus,

Wie ich feststellen musste, gibt ren aber keinen Errorlevel aus.

kann ich leider nicht nachvollziehen
ren a b
echo %errorlevel%
1

bzw. im Ordner Test - wo es eine Test.ini gibt:
C:\test>ren test.ini test.ini.ini
C:\test>echo %errorlevel%
0

Von daher würde ich den ganzen Salat mal genauer betrachten wollen, bevor ich dazu ne Aussage mache.

Im folgenden Skriptteil, prüfe ich (danke Eurer Unterstützung) mit einer Schlaufe in einem Verzeichnis eine Liste von Dateien.

Welche "Unterstützung" / Thread meinst du?

Gruß
Bitte warten ..
Mitglied: rubberman
13.08.2009 um 12:49 Uhr
Ich würde da mit
01.
@echo off &setlocal enabledelayedexpansion
starten, und im besagten Abschnitt
01.
if not exist "%FILENAME-TODAY%" ( 
02.
 for /f "delims=" %%i in ('dir /b /a-d "*.txt" 2^>nul') do ( 
03.
  ren "%%i" "!FILENAME-TODAY!" 
04.
  if exist "%%i" do ( 
05.
    echo ... ERROR: rename "%%i" nicht erfolgreich >> !JOBLOG! 
06.
   goto :Error 
07.
   echo ... INFO: rename "%%i" "!FILENAME-TODAY!" >> !JOBLOG! 
08.
 
09.
   call :CHECKERRORLEVEL 
10.
 
11.
   goto :APPENDIDX 
12.
13.
14.
)
Ob das so schon funktioniert, musst du ausprobieren. Prinzip ist aber, überall wo eine Variale zur Laufzeit einer Befehlszeile mehrfach expandiert werden soll (auch wenn die Zeile auf mehrere verteilt wurde ) statt % entsprechende ! verwenden.

Grüße
rubberman
Bitte warten ..
Mitglied: bastla
13.08.2009 um 14:32 Uhr
@rubberman
Solange sich nicht der gesamte dargestellte Batch(teil) selbst in einer Schleife befindet, ist "delayedExpansion" nicht nötig, da ja innerhalb der Schleife keine Variable einen neuen Wert erhält ...

@Jim-Knopf
Unter der Annahme, dass es nur eine einzige (wenn auch namentlich nicht bekannte) Textdatei im aktuellen Ordner gibt (ansonsten würde ja das "Rename" ohnehin nur einmal funktionieren können), würde eigentlich ein simples
ren *.txt "%FILENAME-TODAY%"
genügen - egal, wie die Datei vorher geheißen haben sollte, danach heißt sich sicher "%FILENAME-TODAY%" (es sei denn, sie wäre versteckt oder hätte das "System"-Attribut gesetzt - entsprechende NTFS-Rechte setze ich mal voraus) ...
Die "gewöhnliche" Kontrolle des "ren" per Errorlevel könnte etwa so aussehen:
ren "%%i" "%FILENAME-TODAY%" || (echo ... ERROR: rename "%%i" nicht erfolgreich & goto :Error)
aber falls Du den Erfolg tatsächlich "hintenrum" prüfen willst, sollte es zB so klappen:
01.
:CHECKTXTTODAY 
02.
if not exist "%FILENAME-TODAY%" ( 
03.
    for /f "delims=" %%i in ('dir /b /a-d "*.txt" 2^>nul') do ( 
04.
        ren "%%i" "%FILENAME-TODAY%" 
05.
        type "%%i">nul 2>nul && (echo ... ERROR: rename "%%i" nicht erfolgreich & goto :Error) 
06.
         
07.
        echo ... INFO: rename "%%i" "%FILENAME-TODAY%" 
08.
 
09.
        call :CHECKERRORLEVEL 
10.
 
11.
        goto :APPENDIDX 
12.
13.
)
Grüße
bastla

P.S.:
... (danke Eurer Unterstützung) mit einer Schlaufe ...
Ich bezweifle, dass irgendjemand hier im Forum zum Scripten mit "Schlaufen" beigetragen hat ...

... insbesondere auch, da ja für wirklich robuste Programmierung sogar empfohlen wird: "Knoten statt Schleifen!"
Bitte warten ..
Mitglied: Jim-Knopf
13.08.2009 um 15:50 Uhr
Hi rubberman

Besten Dank. Hab' mal % durch ! ersetzt.. dann ging gar nichts mehr. D.h. die >> !Joblog! wurde nicht ausgegeben. Hab's wieder zurück auf >> %Joblog% geändert. Dann ging's wieder.

Ich glaube die Ursache am Tilt lag mehr daran, dass ein "do" im if exist nicht hingehörte:
Folgender Skriptteil scheint zu funktionieren:


:APPENDTXT
for /f "delims=" %%i in ('dir /b /a-d "*.txt" 2^>nul^|findstr /i /v /c:"%FILENAME-TODAY%"') do (
type "%%i">>"%FILENAME-TODAY%"
echo ... INFO: append von %%i in "%FILENAME-TODAY%" >> %JOBLOG%
del "%%i"

if exist %%i (
echo ... ERROR: delete "%%i" nicht erfolgreich >> %JOBLOG%
goto :Error
)

echo ... INFO: %%i geloescht >> %JOBLOG%

)

Troztdem vielen Dank für Deine Hilfe.

Gruss
Jim
Bitte warten ..
Mitglied: Jim-Knopf
13.08.2009 um 17:08 Uhr
Hi Timo

Danke für den Input betr. Errorlevel und Rename.
Ich hab's so ausprobiert wie Du beschrieben hast und ich hab dieselben Resulate erhalten.

Erstell aber mal eine Datei a.txt und b.txt. Setze beide auf schreibgeschützt und gib ren a.txt. b.txt ein. Das Rename klappt nicht und der Errorlevel bleibt 0. Wieso auch immer.

Dasselbe bei Delete.

Wie schon erwähnt habe ich aber festgestellt, dass das DO nach dem if exist überflüssig ist.
Der Check funktioniert also wie folgt:

:CHECKTXTTODAY
if not exist "%FILENAME-TODAY%" (
echo nach exist
pause
for /f "delims=" %%i in ('dir /b /a-d "*.txt" 2^>nul') do (ren "%%i" "%FILENAME-TODAY%"
if exist "%%i" (
echo ... ERROR: rename "%%i" nicht erfolgreich >> %JOBLOG%
goto :Error
)
echo ... INFO: rename "%%i" "%FILENAME-TODAY%" >> %JOBLOG%
goto :APPENDTXT
)
)

Vielen Dank für Eure Unterstützung.

Gruss
Jim
Bitte warten ..
Mitglied: Jim-Knopf
13.08.2009 um 17:16 Uhr
Hi bastla

Ob Schlaufen oder Schliefen. Hauptsache immer im Kreis.
Die Problematik ist aus der ersten Anfrage, die von Dir supercool beantwortet wurde, ja etwas komplexer.

Da mein Vorschlag nun doch noch irgendwie funktioniert, bin ich damit aber vorerst mal voll happy.

Gruss
Jim
Bitte warten ..
Mitglied: bastla
13.08.2009 um 17:21 Uhr
Hallo Jim-Knopf!
Erstell aber mal eine Datei a.txt und b.txt. Setze beide auf schreibgeschützt und gib ren a.txt. b.txt ein. Das Rename klappt nicht und der Errorlevel bleibt 0. Wieso auch immer.
Den Schreibschutz braucht's gar nicht - wenn eine gleichnamige Datei existiert, funktioniert das "Rename" nicht ...

... allerdings ist der Errorlevel dann 1 - soferne er richtig abgefragt wird, also entweder mit
if errorlevel 1 echo Fehler
oder gleich direkt an den "ren"-Befehl angefügt:
ren a.txt b.text || echo Fehler
Was (in einer Schleife) nicht klappen kann, ist, die Variable %errorlevel% abzufragen; hier tritt der von rubberman angesprochene Fall ein, dass Du dafür vorweg
setlocal enabledelayedexpansion
und für die Abfrage die Schreibweise
if !errorlevel! gtr 0 echo Fehler
benötigst.

Grüße
bastla
Bitte warten ..
Mitglied: Jim-Knopf
13.08.2009 um 20:42 Uhr
Hi bastla

Ich bin schon ein wenig neidisch über all Dein Wissen.
Super herzlichen Dank.
Erst wir mir einiges klarer, wieso die Errorlevelabfrage mal klappte und an anderer Stelle nicht.
Grummel.

Aber super herzlichen Dank für Dein Infos.
Werde mich morgen gleich wieder dahinter klemmen

Viele Grüsse
Jim
Bitte warten ..
Mitglied: Biber
14.08.2009 um 14:27 Uhr
Moin Jim-Knopf,

hast Du es nun denn heute den ganzen Tag über zu Ende verifiziert?
Können wir einen haken dran machen?

Ich möchte ja in "Batch & Shell" die Dinge nicht so schlaufen lassen...

Grüße
Biber
Bitte warten ..
Ähnliche Inhalte
VB for Applications
If exist - if not exist in .vbs - Datei
gelöst Frage von Komoran12VB for Applications24 Kommentare

Moin, moin, vielleicht hat jemand ja einen Tipp für mich. Mit nachfolgender .vbs lasse ich mir einen Messagebox ausgeben: ...

Batch & Shell

If Exists auf Datei in Pfad mit Leerzeichen?

Frage von TheRealErebosBatch & Shell6 Kommentare

Hallo, ich habe ein Problem mit einem Batch. Ich möchte gerne prüfen ob Datei 1 nicht mehr vorhanden ist ...

Batch & Shell

Rename und if exist ergibt endlos loop

gelöst Frage von RaidManBatch & Shell4 Kommentare

Hallo Leutz, mit einer kleinen batch will ich in einem Verzeichnis auf eine Datei prüfen diese Datei umbenennen und ...

Suse

Cronjob wird nicht ausgeführt - File not Exists obwohl die da ist

gelöst Frage von killtecSuse6 Kommentare

Hallo, ich wolllte einen Cronjob laufen lassen. Dieser startet jedoch nicht. Die Datei existiert jedoch und funktioniert auch. Hat ...

Neue Wissensbeiträge
Sicherheit
Sicherheitsrisiko: Die Krux mit 7-Zip
Information von kgborn vor 8 StundenSicherheit

Bei vielen Anwendern ist das Tool 7-Zip zum Entpacken von Archivdateien im Einsatz. Die Software ist kostenlos und steht ...

Internet

Datendealing im WWW Tracking Methoden immer brutaler

Information von sabines vor 18 StundenInternet

Interessanter Artikel zum Thema Tracking im WWW und die immer "besseren" Methoden des Trackings. Professor Arvind Narayanan (Princeton-Universität) betreibt ...

Erkennung und -Abwehr

Ups: Einfaches Nullzeichen hebelte den Anti-Malware-Schutzt in Windows 10 aus

Information von kgborn vor 1 TagErkennung und -Abwehr

Windows 10 ist das sicherste Windows aller Zeiten, wie Microsoft betont. Insidern ist aber klar, das es da Lücken, ...

Windows 10

Windows 10 on ARM: von Microsoft entfernte Info - Klartext, was nicht geht

Information von kgborn vor 1 TagWindows 10

Windows 10 on ARM ist ja eine neue Variante, die Microsoft im Verbund mit Geräteherstellern am Markt etablieren will. ...

Heiß diskutierte Inhalte
Server
Route-Befehl Unterstützung (unter CMD)
gelöst Frage von FKRR56Server36 Kommentare

Guten Tag , i.M. habe ich Probleme über den CMD-Route-Befehl ein Routing auf einen entfernten Server zuzulassen. Der Server ...

Windows 10
Windows 10 (1709) Tastur und Maus wieder einschalten?
Frage von LochkartenstanzerWindows 1028 Kommentare

Moin, Ich habe von einem Kunden einen Win10-Rechner bekommen, bei dem weder Tastatur noch Maus geht. Die Hardware funktioniert ...

Microsoft
TV-Tipp: Das Microsoft-Dilemma
Information von kgbornMicrosoft17 Kommentare

Aktuell gibt es in Behörden und in Firmen eine fatale Abhängigkeit von Microsoft und dessen Produkten. Planlos agieren die ...

Webbrowser
Welcher Browser ist der Beste?
Frage von justtinWebbrowser15 Kommentare

Hallo Leute Ich habe eine interessante Frage. Mich wurde mal interessieren welcher Browser ist eure meinung nach der beste? ...