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 zählervariable

Mitglied: PipeL1n3

PipeL1n3 (Level 1) - Jetzt verbinden

09.12.2007, aktualisiert 22:46 Uhr, 6336 Aufrufe, 5 Kommentare

Leider habe ich mit folgendem Script ein komisches Problem:

Hier das Script:
01.
set wert=0 
02.
set zahl=1 
03.
set datei=proxyliste.txt 
04.
For /F "delims=" %%i IN ('TYPE %1') DO ( 
05.
IF %zahl%==10 ( 
06.
set wert=1 
07.
08.
IF %zahl%==100 ( 
09.
set wert=2 
10.
11.
IF %zahl%==1000 ( 
12.
set wert=3 
13.
14.
IF %wert%==0 ( 
15.
echo 00%zahl%=%%i>>%datei% 
16.
17.
IF %wert%==1 ( 
18.
echo 0%zahl%=%%i>>%datei% 
19.
20.
IF %wert%==2 ( 
21.
echo %zahl%=%%i>>%datei% 
22.
23.
set /A zahl+=1 
24.
echo %zahl% 
25.
Pause >nul 
26.
27.
proxyliste.txt 
28.
exit
Trotz dem set /A zahl+=1 erhöht sich der Wert der Variablen nicht!
Bitte helft mir
Mitglied: LordGurke
09.12.2007 um 14:47 Uhr
Bin mir nicht sicher, aber müsste das nicht korrekt ausgeschrieben
zahl=zahl+1
heißen?
Bitte warten ..
Mitglied: bastla
09.12.2007 um 18:16 Uhr
@maxi89
Korrekt ausgeschrieben: ja;
korrekt abgekürzt: so wie von PipeL1n3 verwendet - siehe "set /?" und dort die Zeile
01.
    = *= /= %= += -=    - Zuordnung
(wobei zugegebener Maßen "Zuordnung" eine etwas sparsame Erklärung ist ...)
@PipeL1n3
Damit Dein Code wie vorgesehen abläuft, könntest Du es so versuchen:
01.
@echo off & setlocal enabledelayedexpansion 
02.
set wert=0 
03.
set zahl=1 
04.
set datei=proxyliste.txt 
05.
For /F "delims=" %%i IN ('TYPE %1') DO ( 
06.
	IF %zahl%==10 set wert=1 
07.
	IF %zahl%==100 set wert=2 
08.
	IF %zahl%==1000 set wert=3 
09.
	IF !wert!==0 echo 00%zahl%=%%i>>%datei% 
10.
	IF !wert!==1 echo 0%zahl%=%%i>>%datei% 
11.
	IF !wert!==2 echo %zahl%=%%i>>%datei% 
12.
	set /A zahl+=1 
13.
	echo !zahl! 
14.
	Pause >nul 
15.
16.
%datei%
Das "exit" habe ich entfernt, da Du es ziemlich sicher nicht benötigst, und es sehr lästig ist, wenn sich beim Testen dadurch immer das CMD-Fenster schließt.

Zum Thema "(enable)delayedexpansion":

In einer "for"-Schleife werden grundsätzlich alle Variablenwerte nur zu Beginn (vor dem ersten Durchlauf) ermittelt und gelten dann für alle Durchläufe. Ändert sich der Wert einer Variablen (auch, weil diese etwa überhaupt erst in der Schleife eine Wertzuweisung erhält), so "bekommt es der Interpreter nicht mit". Um ihm auf die Sprünge zu helfen, muss er zur "verzögerten Auflösung" der Variablen veranlasst werden - dann werden Änderungen der Variablenwerte auch innerhalb der Schleife berücksichtigt.

Der Preis dafür: Damit die "verzögert aufzulösenden" Variablen auch erkannt werden, gilt für diese anstelle des "%" das "!" als Variablenbegrenzung mit dem unschönen Nebeneffekt, dass das "!" in diesem Batch als "gewöhnliches" Zeichen nicht mehr verwendet werden kann und zB in einer Ausgabe nicht aufscheint (schlimmer ist es, wenn zwei "!" innerhalb eines Ausgabetextes enthalten sind - dann entfallen beide samt dem dazwischen liegenden Textteil).

Dieses Problem kann man/frau durch einen "call" aus der Schleife auf ein Unterprogramm umgehen - etwa so:
01.
@echo off & setlocal 
02.
set wert=0 
03.
set zahl=1 
04.
set datei=proxyliste.txt 
05.
For /F "delims=" %%i IN ('TYPE %1') DO call :ProcessLine "%%i" 
06.
%datei% 
07.
goto :eof 
08.
 
09.
:ProcessLine 
10.
IF %zahl%==10 set wert=1 
11.
IF %zahl%==100 set wert=2 
12.
IF %zahl%==1000 set wert=3 
13.
IF %wert%==0 echo 00%zahl%=%~1>>%datei% 
14.
IF %wert%==1 echo 0%zahl%=%~1>>%datei% 
15.
IF %wert%==2 echo %zahl%=%~1>>%datei% 
16.
set /A zahl+=1 
17.
echo %zahl% 
18.
Pause >nul
Der dem Unterprogramm übergebene Parameter ("%%i") ist dort %1 (oder: %~1 - damit werden die umgebenden Anführungszeichen entfernt).

Mit dem "goto :eof" wird das Hauptprogramm beendet, damit nicht (unbeabsichtigt) nochmals das Unterprogramm ausgeführt wird.

Grüße
bastla

P.S.: Was hast Du mit diesem Batch eigentlich vor?

[Edit] Wie von PipeL1n3 unten dargestellt, muss natürlich auch die Variable %zahl% in der "delayedexpansion"-Version richtig als !zahl! geschrieben werden, da sie ja innerhalb der Schleife hochgezählt (und mit dem neuen Wert verwendet) werden soll. [/Edit]
Bitte warten ..
Mitglied: PipeL1n3
09.12.2007 um 21:53 Uhr
Danke für eure Antworten.
So wie ich es verwende muss es aber wenn so heißen:
01.
@echo off & setlocal enabledelayedexpansion 
02.
set wert=0 
03.
set zahl=1 
04.
set datei=proxyliste.txt 
05.
For /F "delims=" %%i IN ('TYPE %1') DO ( 
06.
	IF !zahl!==10 set wert=1 
07.
	IF !zahl!==100 set wert=2 
08.
	IF !zahl!==1000 set wert=3 
09.
	IF !wert!==0 echo 00!zahl!=%%i>>%datei% 
10.
	IF !wert!==1 echo 0!zahl!=%%i>>%datei% 
11.
	IF !wert!==2 echo !zahl!=%%i>>%datei% 
12.
	set /A zahl+=1 
13.
14.
%datei%
Benutzt wird das script um Ips für ein anderes script zu formatieren (speziell eine id zuzuordnen so man es per find in einer .txt finden kann)
Das sieht dann z.b. so aus:
01.
001=129.69.210.97:3128 
02.
002=130.149.49.26:3124 
03.
003=130.149.49.26:3127 
04.
004=130.149.49.26:3128 
05.
005=130.75.87.83:3124 
06.
006=130.75.87.84:3124 
07.
007=131.188.44.100:3128 
08.
008=131.188.44.100:3127 
09.
009=131.246.191.42:3124 
10.
010=132.252.152.194:3124 
11.
011=141.24.249.129:3124 
12.
012=141.24.249.129:3127 
13.
013=141.24.249.130:3127 
14.
014=141.24.33.161:3124 
15.
015=141.24.33.161:3127 
16.
016=141.76.45.17:3128 
17.
017=141.76.45.17:3127 
18.
018=141.76.45.18:3127 
19.
019=193.174.67.186:3127 
20.
020=193.174.67.187:3128 
21.
021=193.174.67.187:3124 
22.
022=193.174.67.187:3127 
23.
023=193.196.39.10:3124 
24.
024=193.196.39.9:3124 
25.
025=195.37.16.101:3128 
26.
026=195.37.16.101:3127 
27.
027=195.37.16.101:3124 
28.
028=195.37.16.97:3124 
29.
029=217.172.56.130:23 
30.
030=217.172.56.174:23 
31.
031=80.237.140.233:8008 
32.
....
Aber nochne kurze frage:
Ich bin heute mittag auf der suche nach einer Antwort auf eine Seite gestossen dort waren mehrere "parameter" für den platzhalter %1 angegeben. Unter anderem auch eine, die sich zum Pfad der %1-datei expandiert. Nur leider finde ich die Seite nicht mehr .. Ideen ?!
Bitte warten ..
Mitglied: bastla
09.12.2007 um 22:34 Uhr
Hallo PipeL1n3!

Zum "Formatieren auf 3 Stellen mit führenden Nullen" würde auch reichen:
01.
@echo off & setlocal enabledelayedexpansion 
02.
set zahl=1000 
03.
set datei=proxyliste.txt 
04.
For /F "delims=" %%i IN ('TYPE %1') DO set /a zahl+=1 & echo !zahl:~-3!=%%i>>%datei% 
05.
%datei%
Details zur Schreibweise "!zahl:~-3!" (bzw "%zahl:~-3%") findest Du in der Hilfe zu "set" (set /?).
... "parameter" für den platzhalter %1 ... zum Pfad der %1-datei expandiert
Je nachdem, wie Du "Pfad" verstanden wissen willst: %~p1 oder %~dp1 oder %~f1 (siehe Hilfe zu "for")

Grüße
bastla
Bitte warten ..
Mitglied: PipeL1n3
09.12.2007 um 22:46 Uhr
%~dp1 war das was ich brauchte

Danke vielmals
Bitte warten ..
Ähnliche Inhalte
Windows Server
Spooler Probleme
Frage von joergWindows Server4 Kommentare

Hallo zusammen wir auf unseren Terminalserver das Problem, dass der Spooler sind in unregelmäßigen Abständen aufhängt. Die Vermutung liegt ...

Hardware
Probleme mit der Tastatur
gelöst Frage von hometownHardware2 Kommentare

Moin Moin habe ein ganz komisches Problem Ich soll mehre PC neu mit Win 7 und Windows 10 bespielen ...

Windows Server
Probleme mit Serververbindung
Frage von EnriqeWindows Server5 Kommentare

Hallo zusammen, seit einiger Zeit habe ich im Betrieb das Problem, dass sich Netzlaufwerke auf einem Server nicht verbinden ...

Batch & Shell
Probleme mit PSWindowsUpdate
Frage von supertuxBatch & Shell3 Kommentare

Hallo zusammen, ich wollte eben PSWindowsUpdate einrichten, so wie es aussieht hat das mein Vorgänger es auch schon verwendet. ...

Neue Wissensbeiträge
Windows 10

USB Maus und Tastatur versagen Dienst unter Windows 10

Erfahrungsbericht von hardykopff vor 1 TagWindows 105 Kommentare

Da steht man ziemlich dumm da, wenn der PC sich wegen fehlender USB Tastatur und Maus nicht bedienen lässt. ...

Administrator.de Feedback
Update der Seite: Alles zentriert
Information von Frank vor 1 TagAdministrator.de Feedback18 Kommentare

Hallo User, die größte Änderung von Release 5.8 ist das Zentrieren der Webseite (auf großen Bildschirmen) und ein "Welcome"-Teaser ...

Humor (lol)

WhatsApp-Nachrichten endlich auch per Bluetooth versendbar

Information von BassFishFox vor 1 TagHumor (lol)4 Kommentare

Genau darauf habe ich gewartet! ;-) Der beliebte Messaging-Dienst WhatsApp erhält eine praktische neue Funktion: Ab dem nächsten Update ...

Google Android

Googles "Android Enterprise Recommended" für Unternehmen

Information von kgborn vor 2 TagenGoogle 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 ...

Heiß diskutierte Inhalte
Windows Netzwerk
WSUS4 und Windows 10 Updates automatisch installieren
Frage von sammy65Windows Netzwerk15 Kommentare

Hallo miteinander, ich habe mit einen neuen WSUS Server aufgesetzt Server 2016 darauf einen aktuellen WSUS. Grund, wir stellen ...

Speicherkarten
Vergessliche USB-Sticks?
Frage von hanheikSpeicherkarten14 Kommentare

Ich habe in den letzten Tagen 500 USB-Sticks mit Bilddateien bespielt. Obwohl ich die Dateien mit größter Sorgfalt kopiert ...

Windows Server
NTFS Berechtigungen Ordnerstruktur
Frage von hukahu23489Windows Server11 Kommentare

Hallo, ich bin seit kurzem in einer neuen IT-Abteilung und bin über das Berechtigungskonzept des Unternehmens sehr schockiert. Ich ...

Hyper-V
Hyper-V mit altem XEON-Server. Was ist falsch?
Frage von LollipopHyper-V11 Kommentare

Hallo Bin etwas frustriert. Kleinbetrieb, ca. 15 PC's, 2 Stk. Server mit einigen virtuellen PC's für Fernwartung, VaultServer für ...