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 Probleme mit For-Schleife und Variablen

Mitglied: hiob08

hiob08 (Level 1) - Jetzt verbinden

25.03.2009, aktualisiert 20:44 Uhr, 3269 Aufrufe, 6 Kommentare

Hallo zusammen,

ich hab ein kleines Problem mit meinem Skript.
Zunächst zum Hintergrund:
Ich prüfe einen Ordner auf eine txt Datei. Ist diese vorhanden, prüfe ich noch ob die gleichnamigen pdf und
doc Dateien vorhanden sind. Ist dies der Fall, werden die Dateien gemoved.
Sofern sie nicht vorhanden sind, werden alle vorhandenen Dateien in ein Error Verzeichnis gemoved.

Hier der Quelltext:

01.
 
02.
@echo off 
03.
 
04.
--- Hier werden die Ordnervariablen Error, Target , Log und Workdir gesetzt ---- 
05.
 
06.
for %%i in ("C:\Test\*.TXT") do ( 
07.
    if exist "%workdir%\%%~ni.pdf" (set pdf_ja="x") 
08.
    if exist "%workdir%\%%~ni.doc" (set doc_ja="x") 
09.
 
10.
    if "%pdf_ja%"=="x" ( 
11.
	if "%doc_ja%"=="x" ( 
12.
  		 move %%~ni.pdf %target% 
13.
   		 move %%~ni.doc %target% 
14.
   		 move %%i %target% 
15.
 
16.
			    )) 
17.
 
18.
     else (  
19.
   		 echo %date% - %time:~0,8% : ERROR : Dateitrippel unvollständig  >> %log% 
20.
		 move %%i %error% 
21.
		 move %%~ni.pdf %error% 
22.
		 move %%~ni.doc %error% 
23.
 
24.
 
25.
 	  ) 		 
26.
27.
 
28.
 
29.
 
30.
 
Komischerweise landet das Skript immer im ELSE Zweig, auch wenn das Trippel vollständig ist. Die Dateien werden dann in das Error Verzeichnis verschoben.


Ich glaub ich seh einfach vor lauter Bäumen den Wald nicht
Hoffe, ihr könnt mir helfen
Mitglied: Biber
25.03.2009 um 20:53 Uhr
Moin hiob08,

für die CMD.exe ist alles, was innerhalb einer FOR-Anweisung oder auch innerhalb einer IF ..ELSE -Struktur passiert eine Zeile, eine Anweisung, auch wenn es aus Lesbarkeitsgründen auf 20 zeilen auseinadergezogen wird.
Und in einer Anweisung werden %variablen% eben nur einmalig aufgelöst (=durch Werte ersetzt), nämlich beim Parsen der Syntax VOR der eigentlichen Ausführung.

Wenn man/frau es anders haben will, also möchte, dass die Variablen nicht alle vor Beginn der Ausführung der ganzen Anweisung aufgelöst werden sollen, sondern innerhalb der Anweisung aktualisierte Werte zugewiesen bekommen, dann muss "DelayedExpansion" = "verzögerte Variablenauflösung" angekündigt werden.

01.
@echo off & setLocal EnableDelayedExpansion 
02.
 
03.
--- Hier werden die Ordnervariablen Error, Target , Log und Workdir gesetzt ---- 
04.
 
05.
for %%i in ("C:\Test\*.TXT") do ( 
06.
    if exist "%workdir%\%%~ni.pdf" (set pdf_ja="x") 
07.
    if exist "%workdir%\%%~ni.doc" (set doc_ja="x") 
08.
 
09.
    if "!pdf_ja!"=="x" ( 
10.
	if "!doc_ja!"=="x"  
11.
  		 move %%~ni.pdf %target% 
12.
   		 move %%~ni.doc %target% 
13.
   		 move %%i %target% 
14.
 
15.
			    )) 
16.
 
17.
     else (  
18.
   		 echo %date% - %time:~0,8% : ERROR : Dateitrippel unvollständig  >> %log% 
19.
		 move %%i %error% 
20.
		 move %%~ni.pdf %error% 
21.
		 move %%~ni.doc %error% 
22.
 
23.
 
24.
 	  ) 		 
25.
26.
 
Außer der Ankündigung "setlocal EnableDelayedExpansion" sind die Variablen, die erst unmittelbar beim In-die-Hand-nehmen aufzulösen sind mit der Schreibweise !variable! statt %variable% zu schreiben.

Grüße
Biber
Bitte warten ..
Mitglied: hiob08
26.03.2009 um 09:48 Uhr
Danke für deine Antwort..
Leider wird auch so immer der Else-Zweig gewählt..
Bin langsam ratlos
Bitte warten ..
Mitglied: Biber
26.03.2009 um 14:44 Uhr
Moin hiob,

sorry, ich hatte gestern zu flüchtig gelesen.

Das nächste Problem ist natürlich, dass die Variablen anders gesetzt sind als sie geprüft werden.

Wenn Du setzt:
set pdf_ja="x"
... dann müsstest Du ja prüfen auf
"!pdf_ja!"==""x""

---> was es natürlich nicht lesbarer macht.

Bitte ändere bei den beiden SETs von pdf_ja und doc ja die Anführungszeichen so:

01.
... 
02.
... 
03.
if exist "%workdir%\%%~ni.pdf" set "pdf_ja=x" 
04.
if exist "%workdir%\%%~ni.doc" set "doc_ja=x"
Grüße
Biber
Bitte warten ..
Mitglied: hiob08
26.03.2009 um 16:46 Uhr
Danke für deine Hilfe... Jetzt klappt es super!

Aber ich verstehe nicht, warum er mir immer die beiden echos aus dem ELSE Zweig in die Logdatei schreibt, auch wenn das Trippel vollständig ist!?
Bitte warten ..
Mitglied: Biber
26.03.2009 um 17:37 Uhr
Moin hiob08,

dann fasst die cmd.exe wohl die IF..ELSE-Konstrukte logisch anders auf als du sie optisch formatiert und auch gemeint hast.

Aber dieses Problem des Aneinandervorbeiredens ist nichts batchspezifisches...
Das hab ich jeden gottverdammten Tag mit meinen Kollegen auch ...
01.
@echo off & setLocal EnableDelayedExpansion 
02.
 
03.
--- Hier werden die Ordnervariablen Error, Target , Log und Workdir gesetzt ---- 
04.
 
05.
for %%i in ("C:\Test\*.TXT") do ( 
06.
 
07.
    if exist "%workdir%\%%~ni.pdf"  ( 
08.
	if exist "%workdir%\%%~ni.doc" (  
09.
  		 move %%~ni.pdf %target% 
10.
   		 move %%~ni.doc %target% 
11.
   		 move %%i %target% 
12.
13.
                       )  else (  
14.
   		 echo %date% - %time:~0,8% : ERROR : Dateitrippel unvollständig  >> %log% 
15.
		 move %%i %error% 
16.
		 move %%~ni.pdf %error% 
17.
		 move %%~ni.doc %error% 
18.
 
19.
 	  ) 		 
20.
21.
 
Vielleicht so geklammert?

Grüße
Biber
Bitte warten ..
Mitglied: hiob08
27.03.2009 um 08:35 Uhr
Super, so klappt es!!!
Danke dir, hast mir sehr geholfen!

P.S.: Lass dich nicht unterkriegen
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

Weitergabe von Variablen in for-Schleifen

Frage von MFJustBatch & Shell1 Kommentar

Hallo, Ich versuche HTML Dateien in PDFs umzuwandeln (dies funktioniert) und diese dabei nach Teilen dieser HTML Datei umzubenennen ...

Batch & Shell

Batch Variablen in for-Schleife

gelöst Frage von Dacki1107Batch & Shell2 Kommentare

Hallo Liebe Administratoren Ich kämpfe mit einem kleinen Problemchen und hoffe das Ihr mir helfen könnt. Ich versuche eine ...

Batch & Shell

For schleife mit variablem inhalt

gelöst Frage von Tealk144Batch & Shell5 Kommentare

Hallo zusammen, kann ich in einer Batch Datei folgendes schreiben? for Variable in Satz do ( if exist %buchstabe%: ...

Batch & Shell

For-Schleife und Variablen durch nummerieren

gelöst Frage von NagusBatch & Shell18 Kommentare

Moin, ich stehe mal wieder auf dem Schlauch und sehe die Lösung nicht so sieht grob der code aus. ...

Neue Wissensbeiträge
Google Android

Googles "Android Enterprise Recommended" für Unternehmen

Information von kgborn vor 8 StundenGoogle Android3 Kommentare

Hier eine Information, die für Administratoren und Verantwortliche in Unternehmen, die für die Beschaffung und das Rollout von Android-Geräten ...

Sicherheit

Intel gibt neue Spectre V2-Microcode-Updates frei (20.02.2018)

Information von kgborn vor 8 StundenSicherheit

Intel hat zum 20. Februar 2018 weitere Microcode-Updates für OEMs freigegeben, um Systeme mit neueren Prozessoren gegen die Spectre ...

Microsoft
ARD-Doku - Das Microsoft Dilemma
Tipp von Knorkator vor 11 StundenMicrosoft3 Kommentare

Hallo zusammen, vor einigen Tagen lief in der ARD u.a. Reportage. Das Youtube Video dazu dürfte länger verfügbar sein. ...

Windows 10

Neue Sicherheitslücke in Windows 10 (Version 1709) durch Google öffentlich geworden

Information von kgborn vor 1 TagWindows 10

Vor ein paar Tagen haben Googles Sicherheitsforscher vom Projekt Zero eine Sicherheitslücke im Edge-Browser publiziert. Jetzt wurde eine weitere ...

Heiß diskutierte Inhalte
Windows Server
AD DS findet Domäne nicht, behebbar?
Frage von schapitzWindows Server40 Kommentare

Guten Tag, ich habe bei einem Kunden ein Problem mit den AD DS. Umgebung ist folgende: Windows Server 2016 ...

Router & Routing
LANCOM VPN CLIENT einrichten
Frage von Finchen961988Router & Routing27 Kommentare

Hallo, ich habe ein Problem und hoffe ihr könnt mir helfen, wir haben einen Kunden der hat einen Speedport ...

Router & Routing
ISC DHCP 2 Subnetze
gelöst Frage von janosch12Router & Routing19 Kommentare

Hallo, ich betreibe bei mir im Netzwerk einen ISC DHCP Server auf Debian, der DHCP verwaltet aktuell ein /24 ...

Switche und Hubs
Cisco SG350X-48 AdminIP in anderes VLAN
Frage von lcer00Switche und Hubs14 Kommentare

Hallo zusammen, ich habe ein Problem mir einem Cisco SG350X-48 bei der Erstinstallation wurde eine IP 192.168.0.254 (Default VLAN ...