Wie kann man "2" (keine Anführungszeichen) aus einem Batch-Skript in eine Datei zurückgeben?


Antworten:


68

Verwenden Sie (ECHO 2)>>file.txt. Dies wird 2ohne Leerzeichen ausgegeben .


+1 OH MEIN GOSCH, das ist großartig! Daran habe ich überhaupt nicht gedacht. :)
user541686

Außer wenn es Klammern hat (richtig?). : P Nun (dies ist natürlich eine separate Frage), wie kann ich einen beliebigen Dateinamen in eine andere Datei übertragen? Es könnte Klammern, Anführungszeichen, Zahlen usw. haben
user541686

2
Weißt du, ich denke, ich werde das als separate Frage stellen. :)
user541686

Tolle Lösung, aber es sieht so aus, als ob noch eine CRLF dahinter steckt. Wie gehen wir mit dieser unaufhaltsamen Bedrohung um?
Mein Stapel läuft

Die Antwort unter diesem Link hier zeigt, wie die Nummer 2 in eine Datei ohne die dahinter stehende CRLF übernommen wird.
Headinabook

324

Wenig bekannte Funktion: Der Umleitungsoperator kann überall auf der Linie hingehen.

>>file.txt echo 2

36

echo ^2>>file.txt scheint für mich zu arbeiten.


Aber es ist immer noch eine CRLF dahinter (was uns 3 Bytes gibt). Wie kann das gestoppt werden?
Pacerier

@Pacerier - In dieser Antwort erfahren Sie , wie Sie die Nummer 2 in eine Datei ohne die dahinter stehende CRLF übertragen.
Headinabook

@Pacerier Sind Sie sicher, dass dies eine Anforderung des OP ist?

31

Nutze die ^Flucht:

Echo ^2>> file.txt

Übrigens, was ist die Logik dahinter?
Pacerier

3
@Pacerier - die "2" hätte in diesem Zusammenhang eine besondere Bedeutung. Das Escape-Zeichen wird also verwendet, um die "2" wie ein normales Zeichen zu behandeln.
Moe Sisko

11
echo.2>>text.txt

Ja, es ist komisch.


4
Es ist seltsam und funktioniert nur, wenn weder Leerzeichen noch Tabulatoren vorhanden sind ,;=(. Dieser echo.hello(you2>>text.txtscheitert
jeb

@Kornel, aber es ist immer noch eine CRLF dahinter (was uns 3 Bytes gibt). Wie kann das gestoppt werden?
Pacerier

Die Antwort unter diesem Link hier zeigt, wie die Nummer 2 in eine Datei ohne die dahinter stehende CRLF übernommen wird.
Headinabook

echo.könnte fehlschlagen, wenn sich echo.im aktuellen Verzeichnis eine Datei mit dem Namen (keine Erweiterung) befindet. Verwenden Sie diese also besser echo/...
aschipfl

10

eine andere Methode

echo>>file.txt 2

Aber es gibt immer noch eine CRLF dahinter (was uns 3 Bytes gibt). Wie kann das gestoppt werden?
Pacerier

Die Antwort unter diesem Link zeigt, wie die Nummer 2 in eine Datei ohne die dahinter stehende CRLF übernommen wird.
Headinabook

6

Oder Sie können die verzögerte Erweiterung verwenden

setlocal EnableDelayedExpansion
set "var=2"
echo(!var!>> file.txt

Aber es gibt immer noch eine CRLF dahinter (was uns 3 Bytes gibt). Wie kann das gestoppt werden?
Pacerier

Die Antwort unter diesem Link zeigt, wie die Nummer 2 in eine Datei ohne die dahinter stehende CRLF übernommen wird.
Headinabook

3

Wenn Sie ein genaues Schreiben benötigen, verwenden Sie diesen Befehl

(ECHO |set /p=2)>>file.txt

Der Befehl von DMan erzeugt einen Zeilenumbruch von 0x0D0A hinter der "2".


3
Dadurch wird ERRORLEVEL auf 1 gesetzt. Wenn ERRORLEVEL bevorzugt auf 0 gesetzt wird, können Sie etwas wie (echo | set /p dummyName="2") > file.txt( Quelle ) verwenden.
Headinabook

1
Sie könnten die Pipe vermeiden und diese verwenden < nul set /P ="2" > file.txtErrorLevel1
:,

@headinabook ist nicht nur nicht sauberer, es setzt auch die Fehlerstufe auf 0. (wenn Sie nur 0 wollen (call )!
HackingAddict1337

2

Um eine Zahl ohne Zeilenumbruch in eine Datei zu schreiben, können Sie Folgendes verwenden:

cmd /C set /A "2">file.txt

Dies funktioniert, da set /Adas (letzte) Ergebnis (ohne Zeilenumbruch) zurückgegeben wird, wenn es im Kontext der Eingabeaufforderung ausgeführt wird (daher direkt ausgeführt wird cmd.exe).

Wenn Sie trotzdem an der Eingabeaufforderung arbeiten, können Sie einfach Folgendes verwenden:

set /A "2">file.txt

Obwohl Sie dies nicht in einer Batchdatei verwenden können, benötigen Sie das Extra cmd /C, um den richtigen Ausführungskontext zu erzwingen.

Natürlich kann dies natürlich nur Zahlen oder genau gesagt vorzeichenbehaftete 32-Bit-Ganzzahlen ausgeben.


-1

Basierend auf dieser Antwort, wenn sich jemand fragt, wie das geht:

echo "command1 && command2" > file.txt

ohne qoutes file.txtdann machst du es so:

echo command1 ^&^& command2 > file.txt

Getestet unter Windows Server 2003.


1
Wie beantwortet dies die Frage?
aschipfl

Ich sollte meinen Beitrag wahrscheinlich umformulieren. Es ist eine Ergänzung zu stackoverflow.com/a/7225667/1637178 .
Jan Święcki

1
Entschuldigung, ich verstehe es immer noch nicht. Dies gibt keine Nummer für eine Datei wieder ...
aschipfl

-1

entkomme dem Charakter '2'

unter Linux: echo \2>file.txt

in Windows: echo ^2>file.txt

In Windows funktioniert dies auch

echo.2>file.txt Kein Leerzeichen zwischen Echo und Punkt

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.