Windows toplu iş dosyasında satırın üzerine yazılsın mı? [çift]


1

Bu sorunun zaten burada bir cevabı var:

Bir şey söylemeden hemen önce bu kodu denedim:

@echo off

setlocal enableextensions enabledelayedexpansion
for /f %%a in ('copy /Z "%~dpf0" nul') do set "ASCII_13=%%a"

set /p "=Example 1" <NUL

set /p "=!ASCII_13!Example 2" <NUL

Kaynağım: Aynı satırın toplu iş dosyasındaki komut çıktısının üzerine yazılması (Doğrulanan yanıt)

Ve bu benim için işe yaramadı. Sadece Example 1Example 2denedim gibi çıktı.

Bu yüzden sadece bir toplu iş dosyasında aynı satırın üzerine yazmak için bir yola ihtiyacım var (örneğin, daha önce "Örnek 1" yazıyordu, ancak bu satırdan sonra bunun yerine "Örnek 2" yazacak).

Teşekkürler!


Sorunuz, bağladığınızdan farklı değil. Mevcut yinelenen soru hakkında daha yeni / farklı cevaplar almak istiyorsanız, lütfen bir miktar rep kazanın ve tekrar aynı soruyu sormak yerine mevcut soruya lütuf gönderin.
ᴇcʜιᴇ007

Diğer soruya diğer cevapları denedin mi?
DavidPostill

Yanıtlar:


4

<nul set /p=text Sonunda bir satır beslemesi olmadan bir dize (metin istemi) yankılanmak için bir hiledir, bu nedenle imleç aynı satırda kalır ve daha sonra satırın başlangıcına (satır başı gönderme) üzerine yazabiliriz.

Belirtilen cevapta bulduğunuz sorun, içindeki davranış değişikliğidir set /p. Windows XP'ye kadar, set /pkomut metin isteminin başında boşluk ekleyebildi, ancak Vista'dan beyaz karakterler istemin başlangıcından kaldırıldı. Dizenin başlangıcında satır başı gönderemezsiniz. Ama başka bir yerde kullanabilirsin

@echo off
    setlocal enableextensions enabledelayedexpansion

    for /f %%a in ('copy /Z "%~dpf0" nul') do set "CR=%%a"

    <nul set /p"=This is the line 1 !CR!"
    <nul set /p"=This is the line 2 "

Yani, CRsatırın başında göndermek yerine , önceki satırın sonuna gönderilir.

Diğer bir seçenek ise, önceki komut isteminin başlangıcı olarak farklı bir karakter eklemektir CR. Görünür bir karakter eklemek, bir sonraki satırda üzerine yazılması gerektiğinden, görülememesi için başka bir sorun oluşturur. Bir geri alma (ascii 0x08) güvenli (genellikle) bir seçenektir

@echo off
    setlocal enableextensions enabledelayedexpansion

    for /f %%a in ('copy /Z "%~dpf0" nul') do set "CR=%%a"
    for /f %%a in ('"prompt $H&for %%b in (0) do rem"') do set "BS=%%a"

    <nul set /p"=This is the line 1"
    <nul set /p"=!BS!!CR!This is the line 2"

1

Windows 10 Treshold2'den beri konsol
Ansi Escape Kodlarını anlıyor
Bu kodlar, kaçmak için onaltılı char hex 0x1b veya ondalık 27 gerektirir
(bu, editörünüze bağlıdır)

İlk sütuna gitmek ve n satır yukarı gitmek için ESC[nF
kod satırın sonuna kadar silmek için kodESC[0J

Bu iki kod bir arada (bir satır):

    esc [ 1  F  esc [ 0  J  
hex 1B 5B 31 46 1B 5B 30 4A  

Bu toplu iş burada ascii için bir hex string çözmek için certutil kullanır

@echo off
echo 1B 5B>ESC.hex
Del ESC.bin >NUL 2>&1
certutil -decodehex ESC.hex ESC.bin >NUL 2>&1
Set /P ESC=<ESC.bin
set "Ansi=%ESC%1F%ESC%0J"

Echo line 1
Echo line 2
Echo line 3
Echo line 4

Timeout /t 3 >Nul

Echo %ESC%4F1st line
Timeout /t 1 >Nul
Echo 2nd line
Timeout /t 1 >Nul
Echo 3rd line
Timeout /t 1 >Nul
Echo 4th line

Echo New first Line extra long to see it's deleted, not overwritten
Timeout /t 3 >Nul
Echo %Ansi%Overwrite Line once
Timeout /t 2 >Nul
Echo %Ansi%Overwrite Line twice
Timeout /t 2 >Nul
Echo %Ansi%Overwrite Line thrice
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.