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 Benötige Erklärung zu einem Batch-Befehl

Mitglied: Noobstar0815

Noobstar0815 (Level 1) - Jetzt verbinden

08.03.2013 um 09:47 Uhr, 1983 Aufrufe, 7 Kommentare

Guten morgen, ich saß einige Tage an einer Batch-Datei, die nun fertig ist. Mit Hilfe aus dem Internet hatte ich alle Probleme gelöst und bin dabei auf folgenden Code gestoßen:

01.
 call set "name2=%%name:~%num%,1%% 

Dieser Befehl setzt den Parameter "name2" mit dem Wert der Ziffer "num" von "name". Nehmen wir an "name" ist 123456 und "num" ist 3, dann ist "name2" auch 2. Allerdings verstehe ich nicht, was diese
01.
 ,1%% 
hinter dem %num% macht. Kann mir dies jemand erklären?
Mitglied: colinardo
08.03.2013, aktualisiert um 10:12 Uhr
Hi,
Die Zeile extrahiert ein Zeichen des Strings in der Variablen name. Das ~%num% bestimmt die Position ab der extrahiert wird und das ,1 die Länge des Strings der extrahiert werden soll.

Weitere Info dazu findest du hier: http://www.dostips.com/DtTipsStringManipulation.php#Snippets.MidString

Grüße Uwe
Bitte warten ..
Mitglied: Noobstar0815
08.03.2013 um 10:20 Uhr
Danke schön, jetzt habe ich allerdings noch eine weitere Frage, und zwar bezüglich
01.
 echo off 
02.
set name=0 
03.
set /p name="Bitte alle zu aktualisierenden Programme angeben (Bsp.: 134):" 
04.
 
05.
set num=-1 
06.
:loop  
07.
set /a num=num+1  
08.
 
09.
call set name2=%%name:~%num%, 10%% 
10.
if defined name2 (  
11.
echo %name2%  
12.
call :LOOP)
Dies ist der Gesamtcode aus dem ich grade zitierte. Jetzt stelle ich mir grade die Frage, warum es
01.
 call set name2=%%name:~%num%, 10%%
ist, also warum call set?
Bitte warten ..
Mitglied: colinardo
08.03.2013, aktualisiert um 10:58 Uhr
das call set wird verwendet wenn du dynamische Variablen innerhalb der Suchen und Ersetzen Funktion verwendest. Das %num% ist ja quasi eine Variable in einer anderen Variable. Der Call-Befehl besitzt die Fähigkeit der doppelten Expansion, so dass das %num% auch aufgelöst wird.
Siehe auch hier.
Bitte warten ..
Mitglied: colinardo
08.03.2013, aktualisiert um 11:04 Uhr
Alternativ kannst du das auch mit DELAYED EXPANSION so schreiben:
Hierzu nutzt du dann anstatt der %-Zeichen aussen herum jeweils ein Ausrufezeichen "!", und innen Prozentzeichen.
01.
setlocal ENABLEDELAYEDEXPANSION 
02.
set name2=!name:~%num%,10!
Bitte warten ..
Mitglied: Noobstar0815
08.03.2013 um 11:10 Uhr
Und wieso genau benötige ich da eine doppelte Expansion? Diesen Code hatte ich aus dem Internet um ein Problem zu lösen, habe leider keine Erklärung dafür, diese fertige ich grade an, ohne wirklich Ahnung von diesem Befehl zu haben. Mein Ausbilder kann mir leider auch nicht weiter helfen da er den "call set" Befehl selbst nicht kennt. Und wieso müssen bei name2=%%name:~%num%, 1%% so viele Prozentzeichen hin? Und als letztes, warum genau ist das %num% in Prozentzeichen? Wenn es möglich ist wäre ich sehr froh dass ihr mir jetzt keine Links schickt wo es erklärt steht, sondern es am besten simpel und verständlich erklärt :D
Bitte warten ..
Mitglied: colinardo
08.03.2013, aktualisiert um 11:48 Uhr
Also nochmal zu Fuß:

In einer Batchdatei wird alles was innerhalb einfacher Prozentzeichen steht als Variablenname interpetiert. Wenn jetzt aber noch weitere Prozentzeichen innerhalb der ersten Variable auftauchen werden diese ignoriert bzw. nicht durch deren Inhalt ersetzt, weil DOS ja denkt das es der Name der ersten Variable bzw. ein Sonderzeichen ist. Um dies zu ermöglichen werden die Prozentzeichen am Anfang und am Ende verdoppelt (escaped, weil ein %-Zeichen eben ein Sonderzeichen ist) so das dies dadurch beim Aufruf durch den Call-Befehl jeweils zu einem einzelnen %-Zeichen wird. Dies funktioniert aber nur durch die Möglichkeit des Call-Befehls der eben das Auflösen von Variablen innerhalb einer anderen unterstützt(Doppelte Expansion).

Also beim ersten Scan wird aus
call set name2=%%name:~%num%, 10%% 
folgendes wenn num = 1:
call set name2=%name:~1, 10%
im zweiten Schritt wird dann der tatsächliche Inhalt in name2 aufgelöst.
z.B. wenn name = ICHBINEINTEXT ist:
call set name2=CHBINEINTE
Es wird halt immer schrittweise aufgelöst.

Bei Delayed-Expansion wie in meinem vorigen Kommentar geschrieben gilt folgendes:
Erst wird alles innerhalb der Prozenzzeichen umgewandelt, danach alles was innerhalb der Ausrufezeichen steht. Deswegen heißt es delayed(verzögerte) Expansion.

Hoffe das war jetzt verständlich.

http://www.dostips.com/?t=Snippets.Escape
Bitte warten ..
Mitglied: Noobstar0815
08.03.2013 um 11:59 Uhr
Vielen Vielen Dank =)
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Erklärung Batch
Frage von AnrionBatch & Shell6 Kommentare

Hallo Leute, Ich benötige Hilfe beim verstehen der Batch-Datei: 1 echo off &setlocal 2 for /r %%i in (*.00s) ...

Windows Installation
CMD-Batch Programmstart Befehle
Frage von timsen96Windows Installation1 Kommentar

Schönen guten Tag zusammen, ich möchte gerne über eine cmd oder batch datei ein Programm oder Installation öffnen und ...

Batch & Shell
BATCH: Minuszeichen in set-Befehl
gelöst Frage von SchottenrockBatch & Shell3 Kommentare

Guten Morgen, ich komme gerade nicht weiter und es wit wohl nur eine Kleinigkeit, aber ich steh gerade auf ...

Entwicklung

Mit welchem Befehl kann ich in einer if schleife in Batch

gelöst Frage von JanInfoHDEntwicklung1 Kommentar

Mit welchem Befehl kann ich in einer if schleife in Batch dem Computer sagen das wenn die eingabe nicht ...

Neue Wissensbeiträge
Google Android

Googles "Android Enterprise Recommended" für Unternehmen

Information von kgborn vor 2 StundenGoogle Android

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 3 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 6 StundenMicrosoft2 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 Server36 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 & Routing15 Kommentare

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

CPU, RAM, Mainboards
32 gb RAM zu wenig?
Frage von pcguyCPU, RAM, Mainboards13 Kommentare

Hallo zusammen, mein PC verfügt über 32GB Ram. Nun kriege ich bei grossen Dateien im Illustrator die Fehlermeldung das ...