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
Kommentar vom Moderator Biber am 04.01.2011 um 17:59:32 Uhr
Verschoben von "Tools & Utilities" nach "Batch & Schnelles".
GELÖST

Problem mit Windows Batch Script

Frage Entwicklung Batch & Shell

Mitglied: swissgregi

swissgregi (Level 1) - Jetzt verbinden

04.01.2011, aktualisiert 17:59 Uhr, 3432 Aufrufe, 8 Kommentare

Eine Variable kann innerhalb eienr For Schleife nicht ausgelesen werden.

Ich habe da ein Problem mit einer simplen Batch datei.

set /A zaehler=0
for %%f in (C:\ordner\*.JPG) do (
set /A zaehler=zaehler+1
echo %zaehler%
)
echo %zaehler%



Wieso wird ist die Variable %zaehler% innerhalb der For-Schleife "0"?
Nach der For Schleife kann Sie ausgelesen werden.
Mitglied: Christian25
04.01.2011 um 17:00 Uhr
set zaehler=0
for %%f in (C:\ordner\*.JPG) do (
set /A zaehler=%zaehler%+1
echo %zaehler%
)
echo %zaehler%

is ungetestet aber sollte gehen
/a nur beim rechnen...
Bitte warten ..
Mitglied: bastla
04.01.2011 um 17:08 Uhr
Hallo swissgregi und willkommen im Forum!
Wieso wird ist die Variable %zaehler% innerhalb der For-Schleife "0"?
Weil bei Schleifen (sind für den Interpreter eine einzige Zeile) defaultmäßig die Werte der Variablen nur zu Beginn ermittelt bzw "erweitert" werden (der Wert kann, wie Dein Beispiel ja zeigt, zwar innerhalb der Schleife verändert werden, das Ergebnis wird aber erst nach der Schleife wieder "gelesen") - um das zu ändern, entweder "delayedExpansion" oder ein Unterprogramm verwenden - ungetestetes Beispiel für erstere Version:
01.
setlocal enabledelayedexpansion 
02.
set /A zaehler=0 
03.
for %%f in (C:\ordner\*.JPG) do ( 
04.
    set /A zaehler+=1 
05.
    echo !zaehler! 
06.
07.
echo %zaehler%
@Christian25
/a nur beim rechnen...
Was soll daran Schlimmes sein, wenn eine Variable ihren (numerischen) Wert per "set /a" zugewiesen erhält? Betrachte es als Berechnung, bei der eine Konstante mit keinem weiteren Wert "verrechnet" wird ...

Grüße
bastla
Bitte warten ..
Mitglied: swissgregi
04.01.2011 um 17:31 Uhr
Hallo Bastla,

besten Dank für Deine Hilfe.

Leider funktioniert das nicht. Ich habe hier mal das "Original" Skript:

01.
  @echo off 
02.
  setlocal enabledelayedexpansion  
03.
  set ProgramsPath= "C:\Program Files\Hugin2010.4.0\bin\" 
04.
  set InputPath= "C:\autopano\input\" 
05.
  set /A zaehler=0 
06.
  for %%f in (C:\autopano\input\sempach\*.JPG) do ( 
07.
    set /A zaehler=zaehler+1 
08.
    echo %zaehler% 
09.
    IF %zaehler%==1 set dat1=%%f 
10.
    IF %zaehler%==2 set dat2=%%f 
11.
    IF %zaehler%==3 ( 
12.
    set dat3=%%f 
13.
    set /A zaehler=0 
14.
15.
    start enfuse.exe enfuse --wExposure=1 --wSaturation=0.5 --wContrast=0 --wMu=0.5 --wSigma=0.2 --HardMask --depth=8 -o output.tif %dat1% %dat2% %dat3% 
16.
17.
echo %zaehler%
Ziel des Skriptes ist, ein Ordner nach Bildern zu durchsuchen. Immer 3 Bilder zusammen sollen an das Programm "Enfuse" mittels Parameter übergeben werden.
Den Zähler habe ich, damit ich immer drei Dateien herauslesen kann, und danach den Zähler wieder zurück setzen kann.

Gibt es da eine bessere Lösung?
Bitte warten ..
Mitglied: Arano
04.01.2011 um 18:02 Uhr
Hi,

sieht dir noch mal Bastla's Batch an !
Die Variablen, dessen Werte sich dynamisch ändern, müssen in Ausrufezeichen (!) anstelle der Prozentzeichen (%) geschrieben werden.

Ups... da stand noch etwas Text unter dem Batch...

Aber das "start enfuse..." sollte noch in den Anweisungsblock der dritten IF-Anweisung, damit dieses auch nur aufgerufen wird wenn es der dritte Schleifendurchlauf ist und nicht bei jedem einzelnem (zudem noch mit falschen Parametern)

~Arano
Bitte warten ..
Mitglied: Biber
04.01.2011 um 18:09 Uhr
Moin swissgregi,

willkommen im Forum.
Die Mimik mit "erweiterter Variablenauflösung", neudeutsch "delayed expansion" ist zweistufig.
a) die Ankündigung "ich will es nutzen, ermögliche es mir" = Direktive "SetLocal EnableDelayedExpansion"
b) die explizite Kennzeichnung derjenigen Variablen, die du "verzögert", erst im allerletzten Moment, "auflösen" bzw wertmäßig ermitteln willst durch die Schreibweise !variable! statt %variable%

In deinem Fall musst du dann also, wenn du innerhalb einer [FOR-]Anweisung eine Variable SETtest und deren neu gesetzten Wert verwenden willst, in den IF-Prüfungen jeweils "IF !zaehler1!==1" etc, schreiben statt "IF %zaehler1%==1" und im "Start enfuse"-Aufruf auch !dat1!, !dat2!, !dat3! statt %dat1%, %dat2%, dat3%.

Siehe auch in bastlas Beispiel.

Gibt es da eine bessere Lösung?
Besser als in diesem Forum? Gibt es billigere Optiker als Fielmann? Ist der Papst geschieden?

Grüße
Biber
Bitte warten ..
Mitglied: Christian25
04.01.2011 um 18:57 Uhr
wurde mir mal so beigebracht...
Bitte warten ..
Mitglied: 60730
05.01.2011 um 01:05 Uhr
Moin,

Zitat von Christian25:
/a nur beim rechnen...
wurde mir mal so beigebracht...

[1/2 OT]
mal ein kleines Demo am Prompt das Zeichen _ ist der Cursor (also ein Leerzeichen) und kein Unterstrich

>set test=1_ 
>echo "%test%" 
>"1 "
zum Gegenbeweis mit /a
>set /a test=1_ 
>echo "%test%" 
>"1"
Von daher
[/1/2 OT]

Gibt es da eine bessere Lösung?
Möglicherweise "besser" aber für "bessere" Lösungen komplett andere Ansätze für mich schon zu spät am Abend....
01.
for /r C:\autopano\input\sempach %%f in (*.jpg) do .....
Gruß
Bitte warten ..
Mitglied: pieh-ejdsch
05.01.2011 um 22:45 Uhr
moin swissgregi,

Leider funktioniert das nicht. Ich habe hier mal das "Original" Skript:
Da ist ja auch eine Schliessende Klammer in Zeile 16 zuviel (welche aber nicht zum Scriptabbruch führen dürfte)
wenn Du einen Pfad zu einer Ausfürbaren Datei in die UmgebungsVariable PATH aufnimmst - wird das Programm gefunden und ausgefüht

soll der Batch nur bei jeder einzelnen Ausführung die 3 Dateien Übergeben (gehe ich mal davon aus)
dann in etwa so
01.
@echo off 
02.
setlocal 
03.
set "Path=C:\Program Files\Hugin2010.4.0\bin;%Path%" 
04.
set "InputPath=C:\autopano\input\sempach\" 
05.
pushD "%InputPath%" 
06.
set /A Anzahl = 3 , NR = 0 
07.
set "Files=" 
08.
for "tokens=1* delims=:" %%i in ('dir /b *.JPG^|findstr "^"') do if %%i leq %Anzahl% ( 
09.
  set "dat="%%j"" 
10.
  set /a NR = %%i 
11.
  setlolocal enabledelayedexpansion 
12.
  for /f "delims=" %%j in ("!Files! !dat!") do endlocal&set "Files=%%j" 
13.
14.
start enfuse.exe enfuse --wExposure=1 --wSaturation=0.5 --wContrast=0 --wMu=0.5 --wSigma=0.2 --HardMask --depth=8 -o output.tif %Files% 
15.
echo %NR% 
16.
popD
[Edit]
wenn die *.jpg's beim bearbeiten mit dem Programm NICHT verschoben oder NICHT gelöscht werden, musst Du mit einer Art Liste arbeiten.
oder
die *.jgs's danach aus diesem Ordner herauslösen - wobei da der Befehl start enfuse.exe entweder als start /w ... oder ohne Start durchgefüht werden sollte.
- "usebackq" aus der 2. Forschleife entfernt
und willkommen im Forum
[/Edit]

Gruß Phil
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Klammersetzung in Windows Batch Script
gelöst Frage von VancouveronaBatch & Shell2 Kommentare

Hallo zusammen, Kann man innerhalb einer IF Klammerung For Do Klammerungen nutzen? Oder fällt Windows dabei auf's Gesicht? Beispiel: ...

Batch & Shell
Windows 7: Problem mit CP in Batch
gelöst Frage von Maik87Batch & Shell3 Kommentare

Hallo zusammen, ich möchte mit einem Batch-Script unter Windows 7 ein wenig die Softwareverteilung vereinfachen. Plan ist es, via ...

Batch & Shell
Batch-Script für die Messung der Netzwerkgeschwindigkeit
Anleitung von KraemerBatch & Shell10 Kommentare

Moin zusammen, ich habe mich gerade eben hingesetzt, und eines meiner Scripte ein wenig zeigbar überarbeitet. Da die eine ...

Windows Server
Batch Script bei Start ausführen
Frage von KEFHVDIWindows Server3 Kommentare

Hallo, wie kann ich bei einem Windows Server 2012 ein Batchscript, welches mir ein Laufwerk einbinden soll, beim start ...

Neue Wissensbeiträge
Windows 10

Windows 10 v1709 EN murkst bei den Regionseinstellungen

Tipp von DerWoWusste vor 10 MinutenWindows 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 26 MinutenWebbrowser

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 12 StundenInternet4 Kommentare

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

Verschlüsselung & Zertifikate

19 Jahre alter Angriff auf TLS funktioniert immer noch

Information von BassFishFox vor 19 StundenVerschlüsselung & Zertifikate1 Kommentar

Interessant zu lesen. Der Bleichenbacher-Angriff gilt unter Kryptographen als Klassiker, trotzdem funktioniert er oft noch. Wie wir herausgefunden haben, ...

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
NAS über zwei weitere Ethernet Anschlüsse verbinden
gelöst Frage von Sibelius001Netzwerkmanagement17 Kommentare

Sorry - ich bin hier wahrscheinlich als kompetter IT Trottel unterwegs. Aber eventuell kann mir jemand ganz einfach helfen: ...

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 ...