Der letzte Versuch meine Suche zu beenden ,endete auf der Seite SS64.com.
Ich werde meine Batchdatei Eingabe aufListen und dann meine Frage stellen.
@echo off
rem @
rem @
setlocal
set Datei=Tippfehler
rem @
rem @
echo %Datei%
endlocal
rem @
rem @
for /F "usebackq" %%A in ("C:\Dokumente und Einstellungen\Benutzername\Desktop\Neuer Ordner\Textdokument.txt") do set Datei=%%A
type C:\"Dokumente und Einstellungen"^
\Benutzername\Desktop\"Neuer Ordner"\Textdokument.txt
rem @
rem @
echo.
rem @
rem @
echo %Datei%
rem @
rem @
set Datei=
rem @
rem @
pause
Aufgrund der Formatierung meiner Festplatte mit NTFS und nicht mit FAT32 ,muss ich bei Pfadeingaben in Batchdateien die Pfadnamen und Dateinamen die Leertastenabstände enthalten immer mit doppeltem Anführungszeichen führen.
In der Zeile mit dem type Befehl kann ich ein caret Zeichen verwenden (das ist das spitze Dach Zeichen adü) um einen führbaren Zeilenvorschub zu erreichen.
Die Zeile vor dem type command in der ein for /F command steht kann ich auch in doppelte Anführungszeichen setzen mit der Angegebenen "usebackq" Option
dennoch kann ich nicht ein caret Zeichen als Zeilenvorschub so verwenden das eine Ausgabe der Textdatei sichtbar ist ,sondern nur eine leere CMD Prompt Pfadangabe.
Falls es in diesem Forum eine mögliche Antwort geben wird könnte es sein das ich nicht stundenlang im Internet suche.
Freundliche Grüße Stefan
Seite 1 von 1
Zeilenvorschub (line feed) mit batch Datein auf NTFS Festplatten ,gibt Pfadeingaben mit caret Symbol
Anzeige
#2
geschrieben 11. Juni 2014 - 07:00
Erstmal wäre es Hilfreich, wenn Du uns etwas mehr Infos zu deinem System gibst!
Und nur zum Verständnis: warum willst Du das ^ - Zeichen in der Batch haben?
Diese beiden Befehle funktionieren so:
Und nur zum Verständnis: warum willst Du das ^ - Zeichen in der Batch haben?
Diese beiden Befehle funktionieren so:
for /F "usebackq" %%A in ("C:\Dokumente und Einstellungen\Benutzername\Desktop\Neuer Ordner\Textdokument.txt") do set Datei=%%A type "C:\Dokumente und Einstellungen\Benutzername\Desktop\Neuer Ordner\Textdokument.txt"
#3
geschrieben 11. Juni 2014 - 08:22
Ich habe leider Probleme durch die mangelnde Formatierung des TEs schlau zu werden was genau gemeint/gewollt ist bzw. wo es harkt.
@hoschen:
wobei ich den Befehl gleich noch universeller gestallten würde durch die Verwendung von nunmal existierenden Systemvariabeln:
so funktioniert das sogar wenn der Desktop/Userordner woanders hin ausgelagert wurde - oder wenn als System bspw. Windows Vista oder neuer verwendet wird da hier der User-Ordner nicht mehr hard auf
bzw. in der englischen Version unter
liegt sondern schlicht auf
das abgreifen der Systemvariabel macht dann ein großes "Umprogrammieren" überflüssig.
@hoschen:
wobei ich den Befehl gleich noch universeller gestallten würde durch die Verwendung von nunmal existierenden Systemvariabeln:
for /F "usebackq" %%A in ("%USERPROFILE%\Desktop\Neuer Ordner\Textdokument.txt") do set Datei=%%A type "%USERPROFILE%\Desktop\Neuer Ordner\Textdokument.txt"
so funktioniert das sogar wenn der Desktop/Userordner woanders hin ausgelagert wurde - oder wenn als System bspw. Windows Vista oder neuer verwendet wird da hier der User-Ordner nicht mehr hard auf
C:\Dokumente und Einstellungen\[USERNAME]
bzw. in der englischen Version unter
C:\Documents and Settings\[USERNAME]
liegt sondern schlicht auf
C:\USERS\[USERNAME]
das abgreifen der Systemvariabel macht dann ein großes "Umprogrammieren" überflüssig.
#4
geschrieben 11. Juni 2014 - 08:51
Irgendwie werd ich weder aus der Frage noch aus dem Quellcode schlau.
Was soll das leisten?
- Die REM @ sind überflüssig. Weg damit.
- Der SETLOCAL / ENDLOCAL -Block ist ebenfalls überflüssig, es sei denn es soll einfach "Tippfehler" ausgegeben werden. Das kann man aber auch mit einem simplen echo haben.
- Die USEBACKQ Option ist nicht nur überflüssig, sondern komplett falsch an dieser Stelle. Außerdem fehlt in FOR /F die Formatangabe (und sei es nur ein *). Mit dem usebackq wird die ZEICHENFOLGE in den Klammern betrachtet. Ohne das usebackq gibt es den Inhalt der benannten Datei.
- Und schließlich sollte das %%A in Anführungszeichen. Sonst geht das in dem Moment schief, wo in der fraglichen Textdatei ein Leerzeichen steht.
- Sicherheitshalber: in der Textdatei darf GENAU EIN EINTRAG PRO ZEILE stehen. Nicht mehr.
- Und das caret ist in Batchdateien für mehrteilige Eingaben da, nicht um vorhandenen Code umzubrechen und schon gar nicht als eine Art von Bindestrich (um lange Dateinamen umbrechen zu können). Für mehrteilige BEFEHLE gibt's in Batch die runden Klammern ( und ), wobei die öffnende Klammer immer auf derselben Zeile wie der Befehl stehen muß.
-- Referenz: Command line syntax @TechNet
Was soll das leisten?
- Die REM @ sind überflüssig. Weg damit.
- Der SETLOCAL / ENDLOCAL -Block ist ebenfalls überflüssig, es sei denn es soll einfach "Tippfehler" ausgegeben werden. Das kann man aber auch mit einem simplen echo haben.
- Die USEBACKQ Option ist nicht nur überflüssig, sondern komplett falsch an dieser Stelle. Außerdem fehlt in FOR /F die Formatangabe (und sei es nur ein *). Mit dem usebackq wird die ZEICHENFOLGE in den Klammern betrachtet. Ohne das usebackq gibt es den Inhalt der benannten Datei.
- Und schließlich sollte das %%A in Anführungszeichen. Sonst geht das in dem Moment schief, wo in der fraglichen Textdatei ein Leerzeichen steht.
- Sicherheitshalber: in der Textdatei darf GENAU EIN EINTRAG PRO ZEILE stehen. Nicht mehr.
- Und das caret ist in Batchdateien für mehrteilige Eingaben da, nicht um vorhandenen Code umzubrechen und schon gar nicht als eine Art von Bindestrich (um lange Dateinamen umbrechen zu können). Für mehrteilige BEFEHLE gibt's in Batch die runden Klammern ( und ), wobei die öffnende Klammer immer auf derselben Zeile wie der Befehl stehen muß.
-- Referenz: Command line syntax @TechNet
Dieser Beitrag wurde von RalphS bearbeitet: 11. Juni 2014 - 08:59
#5
geschrieben 11. Juni 2014 - 10:28
Mit Windows XP ,dass ich zumschreiben der Textdateien respektive Batchdatein verwende versuche ich solange einen Weg zu gehen ,solange
sich etwas finden lässt Zeichenketten (strings) zu manipulieren.
Es gibt wennmöglich eine bessere Variante ,dennoch versuche ich mit dem Windows XP System mein suchen und finden von Zeichenketten
für mich zu optimieren.
Die Idee mit der Variable %userprofile% steht schon auf meiner Liste für to do's ,und versuche die Pfade noch immer voll Auszuschreiben
,den ich lerne carriage returns und line feeds so wie escape sequenzen mittles batch Dateien zu kennen.
Was ich verstehen konnte versuche ich auch hier weiter zu führen.
So würde ich auch gerne wissen was mit der Formatangabe für for /F Befehle gemeint ist und nachdem mit dem type Befehl es möglich war die
Pfadangabe im Text umzubrechen würde ich das auch gerne im for /F Befehl machen können.
Und im Hilfe und Support Center für Windows XP steht ,dass mit dem type Befehl auf NTFS Formatierten Festplatten doppelte Anführungszeichen
für Pfadangaben verwendet werden MUSS . Da ich dies nicht für andere Befehle auch lesen könnte ,besteht die Möglichkeit das es für den
for /F Befehl nicht möglich ist. Falls sich doch noch was findet hilft mir das sicher.
Da ich mich bei batch Datein auf die Stringmanipulation konzentriere und die geöffneten Fensterformate unterschiedlich sind ,möchte
ich die Zeilenumbrüche verwenden lernen. Ich danke euch für das feedback im voraus ,und hoffe noch ein paar Antworten erpressen zu können.
Lg Stefan
sich etwas finden lässt Zeichenketten (strings) zu manipulieren.
Es gibt wennmöglich eine bessere Variante ,dennoch versuche ich mit dem Windows XP System mein suchen und finden von Zeichenketten
für mich zu optimieren.
Die Idee mit der Variable %userprofile% steht schon auf meiner Liste für to do's ,und versuche die Pfade noch immer voll Auszuschreiben
,den ich lerne carriage returns und line feeds so wie escape sequenzen mittles batch Dateien zu kennen.
Was ich verstehen konnte versuche ich auch hier weiter zu führen.
So würde ich auch gerne wissen was mit der Formatangabe für for /F Befehle gemeint ist und nachdem mit dem type Befehl es möglich war die
Pfadangabe im Text umzubrechen würde ich das auch gerne im for /F Befehl machen können.
Und im Hilfe und Support Center für Windows XP steht ,dass mit dem type Befehl auf NTFS Formatierten Festplatten doppelte Anführungszeichen
für Pfadangaben verwendet werden MUSS . Da ich dies nicht für andere Befehle auch lesen könnte ,besteht die Möglichkeit das es für den
for /F Befehl nicht möglich ist. Falls sich doch noch was findet hilft mir das sicher.
Da ich mich bei batch Datein auf die Stringmanipulation konzentriere und die geöffneten Fensterformate unterschiedlich sind ,möchte
ich die Zeilenumbrüche verwenden lernen. Ich danke euch für das feedback im voraus ,und hoffe noch ein paar Antworten erpressen zu können.
Lg Stefan
#6
geschrieben 11. Juni 2014 - 13:46
Kannst du bitte mal in deinem Post etwas Übersicht schaffen? mit den ganzen - teils unsinnigen - Zeilenumbrüchen kann ich das leider sehr schwer lesen.
Danke!
EDIT:
habe mir deinen Post mal in MS-Word zurechtgebogen... aber irgendwo geht da die Logik verloren - und zwar achtkanntig.
Bitte korrigere mal deinen Post (beseitige die logischen Fehler). Danke!
Danke!
EDIT:
habe mir deinen Post mal in MS-Word zurechtgebogen... aber irgendwo geht da die Logik verloren - und zwar achtkanntig.
Bitte korrigere mal deinen Post (beseitige die logischen Fehler). Danke!
Dieser Beitrag wurde von Stefan_der_held bearbeitet: 11. Juni 2014 - 14:20
#8
geschrieben 12. Juni 2014 - 18:29
Auf einer NTFS formatierten Festplatte muss ich Pfadangaben,
mit Leertaste Abständen in doppelten Anführungszeichen
eingeben.
Zum Beispiel mit dem Befehl type für die CMD Befehlszeile:
type C:\"Dokumente und Einstellungen"\"Neu Textdokument".txt
Mit dem for /F Befehl kann ich mittels "usebackq" option die
gesamte Pfadeingabe und nicht nur die Pfadnamen in doppelten
Anführungszeichen angeben.
Zum Beispiel:
for /F "usebackq" %%A in ("C:\Dokumente und Einstellungen\Neu Textdokument.txt") do echo %%A
Wenn ich nun zwei Fenster geöffnet habe eines von Notepad
und ein MSPaint Fenster, habe ich weniger Platz zum schreiben.
Deswegen verwenden ich das Caret Zeichen ^ für einen
Zeilenumbruch.
Zum Beispiel:
type C:\"Dokumente und Einstellungen"^
\"Neu Textdokument".txt
Ich würde gerne das selbe mit dem for /F Befehl erreichen
dennoch ist mir das nicht möglich.
Deswegen würde ich gerne wissen, ist dass möglich und
wenn ,wie oder warum dass nicht möglich ist wenn es nicht
möglich ist um Fehlerausgaben besser verstehen zu lernen.
Ich arbeite auf einem Windows XP System mit dem schreiben
von Batchdatein. Ich freue mich wenn meine Bitte nach einer
Antwort in Erfüllung geht.
Stefan
mit Leertaste Abständen in doppelten Anführungszeichen
eingeben.
Zum Beispiel mit dem Befehl type für die CMD Befehlszeile:
type C:\"Dokumente und Einstellungen"\"Neu Textdokument".txt
Mit dem for /F Befehl kann ich mittels "usebackq" option die
gesamte Pfadeingabe und nicht nur die Pfadnamen in doppelten
Anführungszeichen angeben.
Zum Beispiel:
for /F "usebackq" %%A in ("C:\Dokumente und Einstellungen\Neu Textdokument.txt") do echo %%A
Wenn ich nun zwei Fenster geöffnet habe eines von Notepad
und ein MSPaint Fenster, habe ich weniger Platz zum schreiben.
Deswegen verwenden ich das Caret Zeichen ^ für einen
Zeilenumbruch.
Zum Beispiel:
type C:\"Dokumente und Einstellungen"^
\"Neu Textdokument".txt
Ich würde gerne das selbe mit dem for /F Befehl erreichen
dennoch ist mir das nicht möglich.
Deswegen würde ich gerne wissen, ist dass möglich und
wenn ,wie oder warum dass nicht möglich ist wenn es nicht
möglich ist um Fehlerausgaben besser verstehen zu lernen.
Ich arbeite auf einem Windows XP System mit dem schreiben
von Batchdatein. Ich freue mich wenn meine Bitte nach einer
Antwort in Erfüllung geht.
Stefan
#9
geschrieben 12. Juni 2014 - 19:30
Ah!
langsam wird es mir klar - es geht dir rein um das AUSLESEN einer Datei welche bereits existiert? also ohne irgendeine Neueingabe?
Wieso verwendest du denn da "type"? bist du da so sehr auf die Kommandozeile angewiesen?
Du hast auch Notepad angesprochen. Hier kannst du unter
dafür sorgen, dass so oder so bei jedem " " ein Zeilenumbruch automatisch angezeigt wird sobald der Gesamttext nicht mehr in die aktuelle Fensterbreite passt. Ansonsten wird das gesamte Wort umgebrochen.
Bin aktuell leider nicht 100prozent auf geistiger Höhe (den Schmerzmitteln sei Dank)
langsam wird es mir klar - es geht dir rein um das AUSLESEN einer Datei welche bereits existiert? also ohne irgendeine Neueingabe?
Wieso verwendest du denn da "type"? bist du da so sehr auf die Kommandozeile angewiesen?
Du hast auch Notepad angesprochen. Hier kannst du unter
Ansicht > Zeilenumbruch
dafür sorgen, dass so oder so bei jedem " " ein Zeilenumbruch automatisch angezeigt wird sobald der Gesamttext nicht mehr in die aktuelle Fensterbreite passt. Ansonsten wird das gesamte Wort umgebrochen.
Bin aktuell leider nicht 100prozent auf geistiger Höhe (den Schmerzmitteln sei Dank)
#10
geschrieben 13. Juni 2014 - 20:01
Um mein Wissen diesbezüglich zu einem Ende zu bringen, werde ich
versuchen mir noch Wissen anzueignen. Soweit ich meine Sammel
eigenschaft zu Wort bringen kann, hab ich noch folgendes ergänzend
beizutragen.
Es ist wie in dem Post geschrieben steht, im Editor den Mauszeiger
oder die Tastenkombination mit den Befehlen
Ansicht Zeilenumbruch
führen, der Zeilenumbruch ist mittels der Fenstergröße variierbar.
Es ist nicht möglich, wenn der Pfadname nur mit der Entertaste
gebrochen wird, eine Ausgabe eines Echobefehls im for /F Befehl
zu erhalten.
Auch wenn beides gleich aussieht, ist es nicht dasselbe.
Mit den Informationen von der Seite stackoverflow.com, kann ich
noch folgendes beitragen.
@echo off
set MYDIR ="C:\Dokumente und Einstellungen\"
for /F "usebackq" %%A in (%MYDIR%^
"Textdokument.txt") do echo %%A
Damit kann ich mit einem caret Zeichen, auch mit dem for /F
Befehl einen Zeilnumbruch machen. Wobei es zu beachten gilt ,dass
zwischen dem im Text eingefügtem MYDIR = und dem ist gleich Zeichen
ein Leertasten Abstand stehen muss und auch zwischen dem caret
Zeichen und dem in der nächsten Zeile "Textdokument.txt". Dies kann
sowohl ein Tabulator Leerzeichen sein wie auch ein Leerzeichen mit
der Leertaste.
In wie weit das mit einer variablen Fenster Größe, Breite in einem
Zusammenhang stehen kann muss ich noch verstehen lernen wenn ich will.
Ich konnte in dem Forumfenster kein Tabulator Abstand einfügen, da
dies hier nicht möglich ist.
Stefan
versuchen mir noch Wissen anzueignen. Soweit ich meine Sammel
eigenschaft zu Wort bringen kann, hab ich noch folgendes ergänzend
beizutragen.
Es ist wie in dem Post geschrieben steht, im Editor den Mauszeiger
oder die Tastenkombination mit den Befehlen
Ansicht Zeilenumbruch
führen, der Zeilenumbruch ist mittels der Fenstergröße variierbar.
Es ist nicht möglich, wenn der Pfadname nur mit der Entertaste
gebrochen wird, eine Ausgabe eines Echobefehls im for /F Befehl
zu erhalten.
Auch wenn beides gleich aussieht, ist es nicht dasselbe.
Mit den Informationen von der Seite stackoverflow.com, kann ich
noch folgendes beitragen.
@echo off
set MYDIR ="C:\Dokumente und Einstellungen\"
for /F "usebackq" %%A in (%MYDIR%^
"Textdokument.txt") do echo %%A
Damit kann ich mit einem caret Zeichen, auch mit dem for /F
Befehl einen Zeilnumbruch machen. Wobei es zu beachten gilt ,dass
zwischen dem im Text eingefügtem MYDIR = und dem ist gleich Zeichen
ein Leertasten Abstand stehen muss und auch zwischen dem caret
Zeichen und dem in der nächsten Zeile "Textdokument.txt". Dies kann
sowohl ein Tabulator Leerzeichen sein wie auch ein Leerzeichen mit
der Leertaste.
In wie weit das mit einer variablen Fenster Größe, Breite in einem
Zusammenhang stehen kann muss ich noch verstehen lernen wenn ich will.
Ich konnte in dem Forumfenster kein Tabulator Abstand einfügen, da
dies hier nicht möglich ist.
Stefan
#11
geschrieben 14. Juni 2014 - 10:08
Sorry,
der Effekt den ich im gestrigen Post beschrieben habe, bezüglich des caret Zeichens
und den Abständen die man einhalten muss resultierte aus einem blinden Versuch
etwas zu verstehen.
Das caret Zeichen in der for /F commando Zeile hat genau so wenig Effekt wie die
%MYDIR% Variable. Ich kann genau so gut schreiben
for /F "usebackq" %%A in (%HAHA%
"Textdokument.txt") do echo %%A
Der Zeilenumbruch ist möglich wegen den Klammern und nicht wegen dem caret Zeichen.
Und somit kann ich "Textdokument.txt" auch nur in dem Ordner verwenden in dem es
gespeichert ist.
der Effekt den ich im gestrigen Post beschrieben habe, bezüglich des caret Zeichens
und den Abständen die man einhalten muss resultierte aus einem blinden Versuch
etwas zu verstehen.
Das caret Zeichen in der for /F commando Zeile hat genau so wenig Effekt wie die
%MYDIR% Variable. Ich kann genau so gut schreiben
for /F "usebackq" %%A in (%HAHA%
"Textdokument.txt") do echo %%A
Der Zeilenumbruch ist möglich wegen den Klammern und nicht wegen dem caret Zeichen.
Und somit kann ich "Textdokument.txt" auch nur in dem Ordner verwenden in dem es
gespeichert ist.
Thema verteilen:
Seite 1 von 1