Bir DOS komutundan çıktının başka bir komuta argüman olarak iletilmesi?


3

Linux'ta bu bir komutu alır ve çıktısını (stdout) diğerine geçirir:

echo `ls`

Windows / cmd / parti eşdeğeri nedir?

Yanıtlar:


14

cmd.exekomutu ters tırnak kullanarak bir ilkel komut ikamesi tesis sunar, ancak sadece aracılığıyla fordöngü ile /f usebackqseçeneği. Bir Unix kabuğunun yapacağı şeyle karşılaştırıldığında oldukça beyinsizdir, ancak standart davranışı çocuktaki her bir çıktı satırının yalnızca ilk kelimesini almaktır ve yalnızca onları yineleyebilmeniz için yapıştırabilirsiniz, hepsi bir kerede komut satırına. (Davranışı delimsseçeneği ile biraz ayarlayabilirsiniz .) İşte bir örnek:

for /f usebackq %F in (`dir /w s*c`) do echo %F

Orijinal Unix tarzı bir komut değişikliği istiyorsanız, orijinal bir Unix kabuğuna, örneğin Cygwin bash veya kendi (ticari) Hamilton C kabuğuma ihtiyacınız olacak .


2

Echo çıktısı örneği dir(tek tırnak işareti kullanın, geriye doğru değil!):

echo off & for /f "delims=" %A in ('dir') do echo %A

Etkileşimli modda, yazmanız gerekir echo onve Enterçıkmak için tuşuna basın . Döngünün yalnızca bir kez çalıştığından eminseniz (yani çıktısı ('xxx')tek satırdır), o zaman echo onkomutun sonuna ekleyebilirsin .

echo off & for /f "delims=" %A in ('set /a 0x3DE1') do net helpmsg %A & echo on

Bilinmeyen bir nedenden dolayı, tek bir komut olarak çalışsa bile , ('set /a 0x3DE1')bunu yapamazsınız .'set /a c=0x3DE1'set /a c=0x3DE1

Örnek echo hello worlddan 'echo hello world'(tek tırnak):

echo off & for /f "delims=" %A in ('echo hello world') do echo %A

Örnek echo hello worlddan ""(sabit dize):

echo off & for /f "delims=" %A in ("hello world") do echo %A

Sözdizimi yukarıda %Aetkileşimli mod içindir %, örneğin toplu iş dosyasında çift ​​gerekir%%A

echo %ADöngü içinde yaparsanız dikkat edin , bir komutun çıktısından satırın birinin çağrıldığını hayal edin on, o zaman 2 sorun var:

[1] hiçbir şeyi yankılanmayacak ve görünmeyecek echo $Aanlamına gelir echo on. Sadece onbu özel durumla başa çıkmak için karşılaştırmayı düşünebilirim .

[2] komut istemi çıkışını geri döndürecek olan echo $Aanlamına gelir echo on; echo offDöngünün içine fazladan ekleme yapmanız gerekebilir , örneğin:

echo off & for /f "delims=" %A in ('dir /b') do echo %A & echo off

Yukarıdaki örneklerin ``satır satır bağımsız değişken çalıştırdığından beri eşdeğer olmadığına dikkat edin. Simülasyonu denemek için bu grubu oluşturabilirsiniz echo `ls`(tüm satırları boşlukla ayrı ayrı tek değişkene döngü olarak ekleyip argüman olarak geçirin):

@echo off
Setlocal EnableDelayedExpansion
set fls=
for /f "delims=" %%A in ('dir /b') do set fls=!fls! %%A
echo %fls%

- edit: eksik boşluk eklendi

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.