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, 6365 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
Server
Problem PHP5.4 Update nun ein Problem
Frage von vServerServer4 Kommentare

Hallo, habe heute auch PHP 5.4 Updatet, nun erhalte ich folgende Meldung: PHP-Quelltext Würde gerne noch auf PHP5.5 ...

Windows 10
Großes Problem!
gelöst Frage von L.0.B.0.TWindows 1022 Kommentare

Ich habe Windows im sicheren Modus gestartet, alles läuft normal ausser das nur cmd gestartet wir und ich keine ...

Windows Server
Zeitserver problem
gelöst Frage von XcaschoXWindows Server7 Kommentare

Hallo, wir haben hier ein Kundennetzwerk mit ca. 200 Server und der Kunde meint erhätte an einigen Servern ein ...

Webbrowser
Zertifikats Problem
Frage von brammerWebbrowser4 Kommentare

Hallo, wir haben bei einem Kunden eine etwa spezielle Regelung was den Zugriff auf Maschinen für Wartungszwecke angeht. Der ...

Neue Wissensbeiträge
Windows 10

Windows 10 kann XPS erzeugen aber nicht anzeigen ????

Erfahrungsbericht von Deepsys vor 20 StundenWindows 10

Heute schickt mir ein Kollegen eine E-Mail mit einer XPS-Datei vom Kunden im Anhang und fragt wie er diese ...

Exchange Server

1und1 IONOS: Probleme beim Mailversand mit Exchange

Information von reksierp vor 1 TagExchange Server3 Kommentare

Hallo, seit Do, 17.1.19 etwa Mittags nimmt 1und1 IONOS keine Mails mehr über den Standard-Port SMTP 25 an. Nachdem ...

LAN, WAN, Wireless

Cisco Mikrotik VPN Standort Vernetzung mit dynamischem Routing

Anleitung von aqui vor 1 TagLAN, WAN, Wireless

1. Allgemeine Einleitung Das nachfolgende Tutorial ist eine Fortführung der hier bei Administrator.de schon bestehenden VPN Tutorials und beschreibt ...

Windows Mobile

Support für Windows Mobile endet im Dezember 2019

Information von transocean vor 3 TagenWindows Mobile1 Kommentar

Moin, Microsoft empfiehlt als Alternative den Umstieg auf iOS oder Android, wie man hier lesen kann. Gruß Uwe

Heiß diskutierte Inhalte
Windows Server
MSSQL Backup in Form von .sql einspielen
Frage von janosch12Windows Server14 Kommentare

Guten Morgen, wir verwenden das Tool SQLandFTPBackup ( ) zum sichern einiger MSSQL Datenbanken. Nun sichert das Toll die ...

LAN, WAN, Wireless
Wo lässt sich das Gateway in der FRITZ!Box 7360 einstellen?
gelöst Frage von OssabowLAN, WAN, Wireless13 Kommentare

Hallo all, nach gründlicher Suche scheine ich der einzige zu sein der das Problem hat (macht micht schon mal ...

Microsoft Office
Office 2016 oder Office 2019
Frage von PeterzMicrosoft Office13 Kommentare

Hallo zusammen, wir müssen unser Office von 2010 auf eine neuere Version Umstellen. Jetzt stellt sich die Frage, ob ...

Windows Server
"Konfiguration des Remotedesktop-Sitzungshosts" unter Windows 2016
gelöst Frage von emeriksWindows Server12 Kommentare

Hi, unter Windows 2008 R2 gab es noch eine MMC "Konfiguration des Remotedesktop-Sitzungshosts". Da kann man. u.a. die Konfiguration ...