cmd.exe zitierte String-Erweiterung?

1718
Steven Penny

Bash verfügt über die Funktion der String-Erweiterung in Anführungszeichen, mit der Sie Sonderzeichen wie diese senden können

#!/bin/sh rtmpdump \ -r rtmp://freeview.fms.visionip.tv/live \ -y tvnetwork-hellenictv-sigma-hsslive-25f-4x3-SDh$'\r' \ -o out.flv 

In diesem Fall wird ein buchstäblicher Wagenrücklauf übergeben. Die Frage ist, wie würden Sie eine wörtliche Wagenrücksendung mit schicken cmd.exe?

0

1 Antwort auf die Frage

3
dbenham

Windows CMD.EXE verfügt nicht über eine integrierte Funktion zum Arbeiten mit Sonderzeichen wie Zeilenvorschub oder Wagenrücklauf. Es sind jedoch Hacks bekannt, mit denen Sie auf einige häufig benötigte Zeichen zugreifen können.

CarriageReturn (CR) 0x0D

Alles was benötigt wird, ist eine Datei - jede Datei. Vorzugsweise sollte die Datei klein sein, damit der Befehl schneller ausgeführt wird. Der Inhalt der Datei spielt keine Rolle. Es könnte sogar leer sein!

Mit dem Befehl COPY / Z wird ein Prozentwert für den Fertigstellungsgrad ohne LF gedruckt, der wiederholt zu einem CR führt, bis 100% erreicht ist. Eine ordnungsgemäß geformte FOR-Anweisung kann die CR vom Zeilenanfang aus analysieren. Sie können dann die FOR-Variable in Ihrer Anweisung verwenden.

D:\test>for /f "delims=1 " %A in ('copy /z test.txt nul') do @echo Good morning %A world! world!rning 

In der obigen "Welt!" überschreibt den Beginn von "Guten Morgen", weil die in der% A-Variablen enthaltene CR enthalten ist.

Das CR könnte in eine Umgebungsvariable eingefügt werden, damit es später verwendet werden kann. Das CR wird jedoch nur beibehalten, wenn die verzögerte Erweiterung verwendet wird. Die verzögerte Erweiterung kann mit aktiviert werden cmd /v:on.

D:\test>cmd /v:on Microsoft Windows [Version 6.1.7601] Copyright (c) 2009 Microsoft Corporation. All rights reserved.  D:\test>for /f "delims=1 " %A in ('copy /z test.txt nul') do set "CR=%A"  " \test>set "CR=  D:\test>echo Good morning !CR! world! world!rning  D:\test>echo Good morning %CR% world! does not preserve the CR Good morning world! does not preserve the CR 


LineFeed (LF) 0x0A

Eine LF kann direkt in einen Befehl eingebunden werden, indem die Zeilenfortsetzung verwendet und eine Leerzeile eingegeben wird, um die übergebene LF darzustellen, gefolgt vom Rest der Zeile.

D:\test>echo hello^ More? More? world! hello world! 

Der LF kann leicht in einer Variablen gespeichert werden, wo er später verwendet werden kann. Sie können nicht einfach verwenden %LF%, aber Sie können ^%LF%%LF%einen einzelnen LF darstellen.

D:\test>set LF=^ More? More?  D:\test>echo Hello^%LF%%LF%world! Hello world! 

Oder die verzögerte Erweiterung kann verwendet werden, um bequem auf die LF-Variable zuzugreifen

D:\test>cmd /v:on Microsoft Windows [Version 6.1.7601] Copyright (c) 2009 Microsoft Corporation. All rights reserved.  D:\test>echo Hello!LF!world! Hello world! 

Oder es kann eine andere Variable definiert werden, die die richtige Escape-Sequenz enthält, sodass die Variable direkt mit der normalen Erweiterung verwendet werden kann.

D:\test>set \n=^^^%LF%%LF%^%LF%%LF%  D:\test>echo Hello%\n%world! Hello world! 


Rückraum (BS) 0x08

Die Eingabeaufforderung kann (BS)(space)(BS)mit $ H auf festgelegt werden, und eine einzelne BS kann mithilfe einer FOR-Schleife analysiert werden. Das BS-Zeichen kann in einer Umgebungsvariablen gespeichert werden, um später verwendet zu werden.

D:\test>for /f %A in ('prompt $h^&for %a in (1^) do rem') do @set "BS=%A"  D:\test>echo ab_%BS%cd abcd 
+1 für eine bessere Lösung. Meine zum Löschen markieren. Nicole Hamilton vor 11 Jahren 0