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

Frage Entwicklung Batch & Shell

Mitglied: Jim-Knopf

Jim-Knopf (Level 1) - Jetzt verbinden

13.08.2009, aktualisiert 12:15 Uhr, 4326 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
Apple

IOS 11.2.1 stopft HomeKit-Remote-Lücke

Tipp von BassFishFox vor 57 MinutenApple

Das Update für iPhone, iPad und Apple TV soll die Fernsteuerung von Smart-Home-Geräten wieder in vollem Umfang ermöglichen. Apple ...

Windows 10

Windows 10 v1709 EN murkst bei den Regionseinstellungen

Tipp von DerWoWusste vor 6 StundenWindows 10

Dieser kurze Tipp richtet sich an den kleinen Personenkreis, der Win10 v1709 EN-US frisch installiert und dabei die englische ...

Webbrowser

Kein Ton bei Firefox Quantum über RDP

Tipp von Moddry vor 6 StundenWebbrowser

Hallo Kollegen! Hatte das Problem, dass der neue Firefox bei mir auf der Kiste keinen Ton hat, wenn ich ...

Internet

EU-DSGVO: WHOIS soll weniger Informationen liefern

Information von sabines vor 18 StundenInternet4 Kommentare

Wegen der europäische Datenschutzgrundverordnung stehen die Prozesse um die Registrierung von Domains auf dem Prüfstand. Sollte die Forderungen umgesetzt ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
Von rj11 auf rj45
Frage von jensgebkenLAN, WAN, Wireless19 Kommentare

Hallo Gemeinschaft, könnt ihr mir vielleicht bei der anfertigung eines Kabels helfen - habe ein rj 11 stecker und ...

Netzwerkmanagement
Firefox Profieles im Roaming
gelöst Frage von Hendrik2586Netzwerkmanagement17 Kommentare

Hallo liebe Leute. :) Ich hab da ein kleines Problem, welches anscheinend nicht unbekannt ist. Wir nutzen hier in ...

LAN, WAN, Wireless
Häufig Probleme beim Anmelden in WLAN
Frage von mabue88LAN, WAN, Wireless15 Kommentare

Hallo zusammen, in einem Netzwerk gibt es relativ häufig (1-2 mal pro Woche) Probleme mit der WLAN-Verbindung. Zunächst mal ...

Windows Server
Remotesteuerung der Sitzung (Kennung XX) fehlgeschlagen
gelöst Frage von Stefan91Windows Server14 Kommentare

Hallo Zusammen, seit kurzem bekomme ich oben genannte Fehlermeldung, wenn ich versuche eine Remotesitzung über den Taskmanager fernzusteuern (Rechtsklick ...