2012-03-25 13 views
10

Nehmen wir an, ich habe eine Batch-Datei, die "Padding" enthält, und ich möchte den Beginn der Eingabeaufforderung Zeichenfolge für den Benutzer einrücken. Wenn ich Leerzeichen verwende, wird es nicht angezeigt, wenn es ausgeführt wird ignoriert die Leerzeichen. Dieses Skript für ein Beispiel:Im Batch, wie erstelle ich Leerzeichen am Anfang eines Eingabeaufforderungsstrings?

@echo off 

echo. 
echo. 
echo Hi. 
echo Please input something. 
echo. 
set /P input= 

Nach dem = gibt es drei Räume, und was ich ist erwarten, dass der Marker für die Eingabe ist weg vom Rand des Befehlsfeld jedoch diese Räume werden ignoriert.

Wie kann ich dieses Problem beheben? Ich verwende Windows 7 SP1.

+0

Haben Sie versucht (set/p input =)? – Anders

+0

Es funktionierte für mich in Windows XP SP3 (kann für keine andere Version im Moment sagen). Ich meine, als die Ausführung gestoppt wurde, um meine Eingabe zu lesen, war der Cursor drei Leerzeichen vom Rand des Befehlsfensters entfernt. –

+0

@Anders - Yup, dasselbe Ergebnis. – Markum

Antwort

9

Wie oben in den Kommentaren angegeben, entfernen Vista und darüber hinaus führende Leerzeichen in einer SET/P-Eingabeaufforderung.

Die Möglichkeit, das Problem zu umgehen, besteht darin, in der Eingabeaufforderung ein Backspace-Zeichen zu definieren und zu verwenden.

Normalerweise wird die Eingabeaufforderung am Anfang einer Zeile stehen, so funktioniert das oben beschriebene gut.

Aber wenn die Eingabeaufforderung aus der Mitte einer Zeile ausgegeben wird (sehr ungewöhnlich), sollte ein vorangestelltes Zeichen vor dem <BS> eingefügt werden, da die Rücktaste löscht was auch immer davor war.

<nul set/p=Leave the cursor at the end of this line: 
set /p var=.%BS% The dot (any char) is necessary to prevent the <BS> from erasing the : 
+0

Ja, Batch ist ein großer Haufen von BS. –

5

inspiriert Absolut in dbenham Antwort schlage ich eine ähnliche, aber einfachere Variante basierte auf der Tatsache, dass der Rück Charakter in seiner rohen Form eingeführt werden kann (nur in Batch-Dateien, diese direkt in der Konsole versucht ‚gewonnen t Arbeit wie erwartet):

set /p var=.'BS' Leading spaces will now show properly.

Der ‚BS‘ Charakter kann durch Eingabe von Alt + Numpad 008 eingefügt werden (8 Backspace des ASCII-Code, wird nicht funktionieren, die alphanumerischen Tasten der Regel über den Buchstaben gefunden) , mit einem gut Texteditor (wie Notepad++, Windows Notepad führt einfach die Rückschrittaktion durch).

Wenn nicht in der Lage zu Einsatz des Charakter, hat Notepad ++ eine nützliche Funktion für diesen: in TextFX Menü TextFX Werkzeuge gefolgt von Insert Ascii-Diagramm oder Zeichen: Insert Ascii Chart or character Das gewünschte Zeichen ist die BS (weiße Buchstaben auf schwarzem Hintergrund auf dem Screenshot) in Zeile 9 gefunden (ASCII-Zeichen 8 - wie oben angegeben - wie es eine Null-indizierte Tabelle ist).

Wenn noch das Ergebnis ist nicht derjenige beschrieben, versucht, die Datei-Codierung ASCII ändern. Mit Notepad ++:

  1. eine Sicherungskopie des Skripts Machen oder ein Experiment in einer separaten Datei ausführen, als Nicht-ASCII-Zeichen (Zeichen mit Akzent, nicht-lateinische etc.) sind verloren in dieser Umwandlung.
  2. In Encoding Menü Convert
  3. speichern und überprüfen Sie das Ergebnis wieder in ANSI ...

Getestet mit Windows 7 Professional SP1.

Credits geht auch an:

+0

Ich habe das versucht, aber nach dem Ausführen der Datei sehe ich das: '.Ôùÿ Führende Leerzeichen werden jetzt richtig angezeigt. ' –

+0

@DavidCallanan: Beachten Sie, dass die' 'BS'' ist ein einzelnes Zeichen –

+0

Ich weiß, und ich habe die spezielle Rücktaste Zeichen, um zu zeigen, aber wenn ich den Code ausführen, ist das Ergebnis '.Ôùÿ Führende Leerzeichen werden jetzt angezeigt 'anstelle von' Führende Leerzeichen werden jetzt angezeigt' –

1

Dies funktioniert in jedem Windows-Betriebssystem von W2K + Ich habe versucht, wenn es Ihnen passt. Sie könnten einfach ein: in der Zeichenfolge verwenden.

set /p "var=Please input something: " 
echo.%var% 
0

dbenhams Antwort funktioniert gut, wenn Sie nur den Text angezeigt werden soll, aber nicht, wenn Sie eine Datei erstellen, wie es auch die Rücktasten eingibt.

Aber für Dateien (und zur Anzeige) können Sie copy /a verwenden, um ein CR/LF mit Hilfe eines SUB (EOF) -Zeichens zu entfernen.
Der Trick besteht darin, das Zeichen SUB direkt nach dem Text anzufügen, also ist es kurz vor dem CR/LF des ECHO-Ausgangs.
Und dann die /a Schalter des Kopierbefehl wird der Inhalt an die SUB Zeichen nur kopieren, so dass die SUB und auch sind die CR/LF

entfernt
@echo off 
setlocal EnableDelayedExpansion 
call :createSub 
call :echoWithoutLinefeed "=hello" 
call :echoWithoutLinefeed " world" 
exit /b 

:echoWithoutLinefeed 
> txt.tmp (echo(%~1!sub!) 
copy txt.tmp /a txt2.tmp /b > nul 
type txt2.tmp 
del txt.tmp txt2.tmp 
exit /b 

:createSub 
copy nul sub.tmp /a > nul 
for /F %%a in (sub.tmp) DO (
    set "sub=%%a" 
) 
del sub.tmp 
exit /b 
11

Sie benötigen einen Punkt nach dem Echo Folgende hinzufügen Beispiel wird "Test" mit drei führenden Leerzeichen ausgeben:

echo. Test 

Gleiche funktioniert für Tabulator. Im folgenden Beispiel wird "Test" mit einer führenden Registerkarte ausgegeben:

echo. Test 
+0

Alter, vielen Dank, dass du es einfach gehalten hast! Arbeitete perfekt in Win 10 – nimig18

+0

simple da am besten, das da am besten, mir gefällt – meffect

Verwandte Themen