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

70

Wie kann ich die Nummer 2 aus einem Batch-Skript in eine Datei übertragen?

Das funktioniert nicht:

Echo 2>> file.txt

weil 2>>ist ein spezieller Befehl. :(

user541686
quelle

Antworten:

68

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

Dominic K.
quelle
+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
Raymond Chen
quelle
36

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

Lavinio
quelle
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
Moe Sisko
quelle
Ü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.

Kornel Kisielewicz
quelle
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
walid2mi
quelle
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
jeb
quelle
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".

minhng99
quelle
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.

aschipfl
quelle
-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.

Jan Święcki
quelle
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

Milevyo
quelle