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

Unterschleife in Batch

Frage Entwicklung Batch & Shell

Mitglied: Dynadrate

Dynadrate (Level 2) - Jetzt verbinden

04.01.2009, aktualisiert 10.03.2009, 3936 Aufrufe, 3 Kommentare

Hi,

ich habe eine Nachfrage zu diesem Thema: http://www.administrator.de/index.php?content=87521
Leider ist das Thema gesperrt.

01.
@echo off & setlocal  
02.
for %%u in ("C:\tmp\*.*") do (  
03.
for /f "tokens=1-16 delims=-_. " %%a in ("%%~nxu") do ren "%%u" ...
Hier wird gezeigt, wie die Variable aus der oberen Schleife in der unteren Schleife benutzt werden kann.
Mich interessiert, warum man das nicht sowieso machen kann, und wie mit welchem Suchbegriff man gefunden hätte, dass %~nx vor die eigentliche Variable geschrieben werden muss!
Kann mir da jemand weiterhelfen?
Mitglied: bastla
04.01.2009 um 09:44 Uhr
Hallo Dynadrate!
Mich interessiert, warum man das nicht sowieso machen kann
Falls Du damit die Tatsache meinst, dass die Zerlegung eine weitere Schleife erfordert: Die erste Schleife kann nur einen vollständigen Dateipfad (bzw die unten genannten Bestandteile) liefern, aber nicht den Namen nach den gewünschten Kriterien (Trennzeichen "-", "_", "." und Leerzeichen) aufteilen - deshalb eine zweite "Schleife" (die ja in diesem Fall nur einen einzigen Durchlauf für den jeweiligen Dateinamen macht).

Eine mögliche Alternative wäre die Zuweisung zu einer "gewöhnlichen" Variablen und die Aufteilung nach Stellenanzahl (etwa: erste 10 Stellen, Stellen 24 bis 28, letzte 3 Stellen).

Die Schleifenvariable %u enthält, wie schon angeführt, einen vollständigen Pfad und kann zerlegt werden in
  • Laufwerksangabe (%~du = drive)
  • Pfad (%~pu = path)
  • Dateiname (%~nu = name)
  • Erweiterung (%~xu = extension)
oder eine
  • Kombination (%~nxu = name + extension)

Bei Bedarf sind auch der vollständige Pfad (%~fu = full path) sowie weitere Details (Größe, etc) verfügbar - Info dazu: "for /?" (gegen Ende des Hilfetextes)

Grüße
bastla
Bitte warten ..
Mitglied: Biber
05.01.2009 um 18:37 Uhr
Moin Dynadrate,

nur ergänzend zu bastlas Ausführungen die zwei kurzen Fäden, die ich Dir in Hand gedrückt hätte, um das Knäuel zu entwirren:
Mich interessiert, [..] und wie mit welchem Suchbegriff man gefunden hätte,
dass %~nx vor die eigentliche Variable geschrieben werden muss!

Faden 1)
Der richtige Suchbegriff am CMD-Prompt wäre - entgegen aller Wahrscheinlichkeit - in der Tat
die Suche nach "%~" in der Hilfe zur FOR-Anweisung.
>for /?|findstr  "%~" 
    %~I         - Expandiert %I und entfernt alle umschließenden 
    %~fI        - Expandiert %I zu einem vollständigen Dateinamen. 
    %~dI        - Erzeugt nur den Laufwerkbuchstaben von %I. 
    %~pI        - Erzeugt nur den Pfad von %I. 
    %~nI        - Erzeugt nur den Dateinamen von %I. 
    %~xI        - Erzeugt nur die Dateierweiterung von %I. 
    %~sI        - Erzeugter Pfad enthält nur kurze Dateinamen. 
    %~aI        - Erzeugt die Dateiattribute von %I. 
    %~tI        - Erzeugt Datum und Zeit von %I. 
    %~zI        - Erzeugt die Dateigröße von %I. 
    %~$PATH:I   - Durchsucht die in der PATH-Umgebungsvariablen 
    %~dpI       - Erzeugt den Laufwerkbuchstaben und Pfad von %I. 
    %~nxI       - Erzeugt den Dateinamen und die Dateierweiterung von %I. 
    %~fsI       - Expandiert %I zu einem vollständigen Namen, der nur 
    %~dp$PATH:I - Durchsucht die in der PATH-Umgebungsvariablen 
    %~ftzaI     - Expandiert %I zu einer Zeile, die der Ausgabe des DIR- 
Werte ersetzt werden. Der Ausdruck %~ wird durch einen gültigen Variablen-
Faden 2)
FOR-Anweisungen musst Du immer "von innen nach aussen" lesen bzw. nachvollziehen.
Im "innersten" bzw letzten in Klammern eingeschlossenen Ausdruck steht die kleinste Einheit, die als Input für eine FOR-Anweisung dient (und durch die FOR-Anweisung noch feiner zerbröselt werden soll).
Im obigen Beispiel ist die "kleinste Einheit", mit der irgendetwas gemacht werden soll, der Dateiname [+Extension] OHNE Laufwerk/Pfadangaben.
Und wenn Du weißt, dass Du eben nur Namen/Extension der Datei im Auge hast/benötigst, dann kommst Du über diesen Weg irgendwann auf diese "%~nxu"-Syntaxkapriolen.

P.S. Und den anderen Thread musste ich damals so schnell schliessen, weil Dani ja sogar bei "Delayed Expansion" irgendwelche erotischen Phantasien hatte... deshalb fiel der Beitrag so schnell der FSK zum Opfer.
Oder, wie Dani sagen würde, der FGMSK.

Grüße
Biber
Bitte warten ..
Mitglied: Dynadrate
05.01.2009 um 22:59 Uhr
Super, danke! Damit ist das Thema komplett erschlagen.
Danke euch beiden Batch-Profis!
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Batch: Batch in batch in cfg schreiben
gelöst Frage von pixelBfBatch & Shell2 Kommentare

Hayy, ich bin neu hier im forum:)) Meine frage: Kann ich eine batch schreiben die was in eine batch ...

Batch & Shell
Wie ändert eine batch eine bestimmte zeile in einer anderen batch
Frage von J4YK0BBatch & Shell3 Kommentare

Wie schreibt eine batch eine andere batch um, aber nur eine SPEZIELLE zeile? Das System ist wiefolgt. Man gibt ...

Batch & Shell
Womit kann ich in einer Batch viertelstündlich eine andere Batch aufrufen?
Frage von red-eyeBatch & Shell16 Kommentare

Hallo allerseits! Seit drei Stunden versuche ich selbst einen geeigneten Befehl zu finden, bzw. hier im Forum eine Antwort ...

Batch & Shell
Batch bleibt hängen - wie kann die Batch neugestartet werden?
gelöst Frage von dax4funBatch & Shell6 Kommentare

Hi Leute , wieder ein Sonderfall habe eine Batch ständig am rennen im Hintergrund doch irgendwann bleibt sie hängen ...

Neue Wissensbeiträge
Internet

USA: Die FCC schaff die Netzneutralität ab

Information von Frank vor 1 StundeInternet2 Kommentare

Jetzt beschädigt US-Präsident Donald Trump auch noch das Internet. Der neu eingesetzte FCC-Chef Ajit Pai ist bekannter Gegner einer ...

DSL, VDSL

ALL-BM200VDSL2V - Neues VDSL-Modem mit Vectoring von Allnet

Information von Lochkartenstanzer vor 4 StundenDSL, VDSL1 Kommentar

Moin, Falls jemand eine Alternative zu dem draytek sucht: Gruß lks

Windows 10

Microsoft bestätigt DMA-Policy-Problem in Win10 v1709

Information von DerWoWusste vor 4 StundenWindows 10

Wer sein Gerät mit der DMA-Policy absichert, bekommt evtl. Hardwareprobleme in v1709 von Win10. Warum? Weil v1709 endlich "richtig" ...

Verschlüsselung & Zertifikate

Die Hölle friert ein weiteres Stück zu: Microsoft integriert OpenSSH in Windows

Information von ticuta1 vor 8 StundenVerschlüsselung & Zertifikate

Interessant Die Hölle friert ein weiteres Stück zu: Microsoft integriert OpenSSH in Windows SSH-Kommando in CMD.exe und PowerShell

Heiß diskutierte Inhalte
Windows Server
RODC kann nicht aus Domäne entfernt werden
Frage von NilsvLehnWindows Server19 Kommentare

HAllo, ich arbeite in einem Universitätsnetzwerk mit 3 Standorten. Die Standorte haben alle ein ESXi Cluster und auf diesen ...

Hardware
Kein Bild mit nur einer bestimmten Grafikkarten - Mainboard Konfiguration
gelöst Frage von bestelittHardware18 Kommentare

Hallo zusammen, ich hatte schon einmal eine ähnliche Frage gestellt. Damals hatte ich genau das gleiche Problem. Allerdings lies ...

Netzwerkmanagement
Mehrere Netzwerkadapter in einem PC zu einem Switch zusammenfügen
Frage von prodriveNetzwerkmanagement18 Kommentare

Hallo zusammen Vorweg, ich konnte schon einige IT-Probleme mit Hilfe dieses Forums lösen. Wirklich klasse hier! Doch für das ...

Hardware
Links klick bei Maus funktioniert nicht
gelöst Frage von Pablu23Hardware16 Kommentare

Hallo erstmal. Ich habe ein Problem mit meiner relativ alten maus jedoch denke ich nicht das es an der ...