2016-08-04 49 views
8

Nach dem Post How can I write a null ASCII character (nul) to a file with a Windows batch script? gibt es tatsächlich Methoden, um ein ASCII-NULL-Zeichen (nul) in eine Datei mit einem Batch-Skript zu schreiben.Wie kann ich ein NULL-ASCII-Zeichen (nul) in einer Variablen mit einem Windows-Stapelscript speichern?

Ich kann jedoch keine Möglichkeit finden, ein NULL-Zeichen in einer Variablen zu speichern.

Nimmt man die Datei null.nil ein einzelnes NULL-Zeichen enthält, es in set /P Umleiten Arbeit scheint nicht, wird die Variable leer:

< "null.nil" set /P NULL= 
set NULL 

for /F nicht zu funktionieren scheint entweder als es jedes NULL-Zeichen zu entlassen scheint es trifft auf. Unter Berufung auf die gleiche Datei null.nil, die folgenden Ergebnisse in einer leeren Variable:

for /F %%S in ('type "null.nil"') do set NULL=%%S 
set NULL 

Ändern der set Syntax set "NULL=%%S" oder set NULL=^%%S ändert nichts, obwohl die Befehlszeile type "null.nil" die NULL-Zeichen nicht Echo (auf meinem Windows 10 x 64 Maschine, umleiten type Ausgabe in eine Datei und sehen Sie es mit einem Hex-Editor).

Also wie kann ich eine Variable auf ein einzelnes NULL-Zeichen setzen? Das NULL-Zeichen kann entweder aus einer Datei stammen (wie null.nil) oder von einem cleveren Hack erzeugt werden, aber ich möchte nicht, dass es direkt in die Batch-Datei eingebettet wird.

+4

Nur eine Vermutung ... Ich würde vermuten, dass intern env. Variablen werden als nullterminierte Zeichenfolgen behandelt, und da eine Zeichenfolge, die nichts als ein null-Zeichen enthält, leer ist (nichts, was den Inhalt betrifft), und ein env festlegen. var to nothing klärt es, du wirst hier ein Problem haben. :-) –

+0

Leider hast du recht, @KenWhite; Ich habe gerade einen Beitrag gefunden, der Ihren begründeten Verdacht bestätigt: [Umgebungsvariablen für einen bestimmten Lauf eines bestimmten Prozesses setzen] (http://stackoverflow.com/a/13092538) – aschipfl

+0

Wenn Sie es irgendwie geschafft haben, eine Variable auf eine Variable zu setzen Einzelnes NULL-Zeichen "Wie sehen Sie voraus, dass Sie * diese Variable verwenden könnten?" – dxiv

Antwort

2

Laut der Seite Environment Variables von Microsofts MSDN Library und auch auf die Post Setting environment variables for a specific run of a specific process wird der Umgebungsblock in einem NULL-terminierten Block von NULL-terminierten Strings gespeichert - hier schnell in EBNF Notation dargestellt:

environment-block = { variable-definition } , null-char ; 
variable-definition = variable-name , '=' , variable-value , null-char ; 

Aufgrund dieses Speicherformats ist es nicht möglich, ein NULL-Zeichen in einer Umgebungsvariablen zu speichern. Selbst wenn es einem gelungen ist, einen NULL in den Umgebungsblock zu schreiben, könnte er niemals wieder gelesen werden.