berner
Goto Top

CMD for Befehl gibt mir nicht das erwünschte Resultat

Hallo
Ich habe eine Datei Text.txt mit mehreren Einträgen (Pfade mit Ordnernamen, generiert durch einen dir-Befehl), wobei in den Zeilen ein oder mehrere Space vorkommen können (Bsp.)
Ich bin Zeile eins
Ich bin Zeile zwei
Ich bin Zeile drei
...

Ziel: Ich wünsche in einer Variablen nur den Eintrag der gesamten ersten Zeile
Meine Versuche mit for /f ergeben entweder

- 3 X Ich for /f %%a IN ('more/e +0 ^<C:\batchfiles\text.txt') do ECHO %%a
- alle drei Zeilen for /f "tokens=*" %%a IN ('more/e +0 ^<C:\batchfiles\text.txt') do ECHO %%a
- alle drei Zeilen for /f "tokens=* delims= " %%a IN (C:\batchfiles\text.txt) do ECHO %%a
- alle drei Zeilen for /f "tokens=* delims=^J" %%a IN (C:\batchfiles\text.txt) do ECHO %%a (Line Feed)
- alle drei Zeilen for /f "tokens=* delims=^M" %%a IN (C:\batchfiles\text.txt) do ECHO %%a (Carriage Return)
- alle drei Zeilen for /f "tokens=* delims=\" %%a IN (C:\batchfiles\text.txt) do ECHO %%a (Zeilenumbruch)

Eigentlich möchte ich für delims CR oder LF einsetzen, weil die Anzahl Space unbekannt ist. DOS kennt aber den Befehl CHR(13) nicht

Kann mir jemand den for Befehl korrigieren oder einen anderen Lösungsweg vorschlagen? Danke.

Content-ID: 642007

Url: https://administrator.de/contentid/642007

Ausgedruckt am: 08.11.2024 um 21:11 Uhr

Dr.Bit
Dr.Bit 19.01.2021 um 07:43:28 Uhr
Goto Top
Betriebsystem?

🖖
Doskias
Doskias 19.01.2021 um 07:53:03 Uhr
Goto Top
Moin

Zitat von @Berner:
Ziel: Ich wünsche in einer Variablen nur den Eintrag der gesamten ersten Zeile

Und was ist der "Tiefere Sinn" dahinter? Ich denke du wirst die Variable dann irgendwie weiter verwenden wollen. Die Frage ist wofür. Manchmal gibt es in Powershell Funktionen die man versucht in Batch umständlich zu erzeugen. Was ist das Ziel des großen ganzen?

Gruß
Doskias
147323
147323 19.01.2021 aktualisiert um 12:44:04 Uhr
Goto Top
Ziel: Ich wünsche in einer Variablen nur den Eintrag der gesamten ersten Zeile
Na dann, Kinderspiel:
@echo off
set "zeile1="  
for /f "usebackq delims=" %%a in ("C:\batchfiles\text.txt") do (if not defined zeile1 set "zeile1=%%a")  
echo %zeile1%
Gruß jokari
Berner
Berner 19.01.2021 um 12:42:43 Uhr
Goto Top
Windows 10
147323
Lösung 147323 19.01.2021 aktualisiert um 12:49:38 Uhr
Goto Top
Wo is nu das Problem? Der Code in meinem obigen Post funktioniert problemlos ...
Berner
Berner 19.01.2021 um 15:41:31 Uhr
Goto Top
Hallo Doskias
Es handelt sich um ein Löschprogramm für ORDNER, analog einem für DATEIEN, das ich schon seit anfangs Jahr in einem proprietären Netzwerk mit 9 PCs und einem Server einer Produktionsabteilung in Betrieb genommen habe.
Leider weisen die Pfade und Ordner meines Kunden meistens Leerschläge auf, ich selber z.B. verzichte völlig auf Leerschläge in Dateinamen und Order und setze dafür ein Underline ein. Aber mein Kunde will nun mal die Leerschläge...
Mit einem Loop werden Client für Client und zuletzt der Server nach dem zu löschenden Ordner gescannt.
In der Textdatei werden durch einen dir-Befehl alle Pfade eines gesuchten Ordners des ersten Clients eingetragen, pro Zeile einen. Der erste Eintrag der Datei dient mir als Quellpfad für einen robocopy-Befehl, der den Ordner samt Inhalt sicherheitshalber in einem geschützten Ordner des Servers ablegt und ein Flag setzt, damit im weiteren Verlauf des Programms dieser Ordner nicht mehr gesichert wird. Dann kommt der zweite Client dran.
Zum Verständnis ist anzumerken, dass jeden Morgen jeder Client beim Einschalten besagte Dateien und Ordner vom Server herunterladet, für alle Clients dieselben. Ein Löschen auf dem Server der Dateien oder Ordner genügt nicht, da besagte Dateien und Ordner in den letzten 10 Arbeitstagen automatisch als Sicherungen auf jedem Client vorliegt. Ein und derselbe Ordner kann also bis zu elf Mal auf dem PC vorliegen.
Berner
Berner 19.01.2021 um 15:50:16 Uhr
Goto Top
Hallo jokari.
Vielen Dank für Deinen Vorschlag. Natürlich klapp er und gibt mir genau das gewünschte Resultat. Dass man usebackq im For-Befehl einsetzen kann habe ich im Netz gesehen, konnte aber nirgends dessen Nutzen finden. Ohne Deine Hilfe würde ich jetzt noch im Netz nach Lösungen suchen.
Sorry, dass ich nicht sofort antworten konnte. Ich wollte ja allen drei antworten, wurde dann aber nach dem ersten Post arbeitshalber gezwungen die weiteren Kommentare später abzufassen.
Kannst Du mir usebackq kurz erklären, den Rest des Quellcodes ist mir bekannt.
Gruss Berner
147323
147323 19.01.2021 aktualisiert um 16:07:08 Uhr
Goto Top
Zitat von @Berner:

Dass man usebackq im For-Befehl einsetzen kann habe ich im Netz gesehen, konnte aber nirgends dessen Nutzen finden.

Einfach for /? in die Konsole eintippen und schon kannst du es nachlesen..
Kurz du kannst damit normale Anführungszeichen für die Pfadangabe im For Loop verwenden. Vor allem dafür gedacht wenn Leerzeichen im Pfad sind.
Pjordorf
Pjordorf 19.01.2021 um 16:05:28 Uhr
Goto Top
Hallo,

Zitat von @Berner:
Dass man usebackq im For-Befehl einsetzen kann habe ich im Netz gesehen, konnte aber nirgends dessen Nutzen finden. Ohne Deine Hilfe würde ich jetzt noch im Netz nach Lösungen suchen.
In ein Kommandozeilenfenster mal ein For /? eingetippelt. Dort ist dein Usebackq erläutert. Auch hier zu Lesen hilft...
https://ss64.com/nt/for_cmd.html
https://de.wikipedia.org/wiki/FOR_(Kommandozeilenbefehl)#Iteration_durch ...

Gruß,
Peter
Berner
Berner 19.01.2021 um 17:07:22 Uhr
Goto Top
Vielen Dank jokari und Pjordorf für Eure Hilfe und Hinweise. Ist eine super Homepage! Schnell und hilfreich.
Nicolas aus der Schweiz, alias Berner