2017-03-08 12 views
0

ウィンドウ内の単純なヘッドコマンドを実行して、最初のフォルダーを探すには、 dir/b/a-d | head -1ウィンドウ内のヘッドコマンド

私はこのマシンにaddtional kitをダウンロードできません。また、PowerShellやその他のスクリプト言語を使用することもできません。

+0

その場合はできません。 – Seth

+0

@セスはい、あなたは –

+0

@Shaked私の答えを参照してください –

答えて

1

cmdhead -n 1コマンドの実装は、第1の入力を読み取り、最初のフォルダ

dir /b /ad | cmd /e /v /q /c"set/p.=&&echo(^!.^!" 

cmdインスタンスへdirコマンドの出力(遅延膨張および拡張子を持つ有効)これだけパイプを見つけるためにそれをコンソールにエコーします。

ノート:通常、これは問題なく動作しますが、理論的にはdirはまだ最初の行を書いているが、カットラインを取得し、終了していないながらset /pが正確に実行された場合、これは失敗することができるように可能性があります。

+0

ありがとう!それは非常に有用だった – Shaked

0

CMDでは、for /f使用して、コマンドの結果の最初の非empyラインを取得することができます。それは次のようになりますあなた例えば

FOR /F "delims=" %G IN ('<command>') DO (echo %G && exit /B 0) 

を:

FOR /F "delims=" %G IN ('dir /b /a-d') DO (echo %G && exit /B 0) 

IすぐにそれをテストするWindowsマシンを持っていないが、それはトリックを行う必要があります。また、既定のオプションでは、セミコロン;(リンクの "eol"オプションを参照してください)から始まる無視される行をfor /fにすることに注意してください。 for /fread files(OPしかし関連のない意思に使用することができます:あなたはスクリプトでそれを使用したい場合
は、あなたの代わりに%G%%Gを使用し、後藤

EDITを使用する必要があります質問に)。最初の行を読むと、(1がファイルを再び(コマンドの最初のnlinesラインを希望する場合for /fの入力を除き、それはIN (<file>)代わりのIN ('<command>')
なり、ちょうどfor /fの入力を変更basiclyその後、同じことですまた、ここでは無視され、空行とfor /fのオプションに応じて、セミコロン(で始まるもの)

@echo off 
SetLocal EnableDelayedExpansion 
REM for this example, the first 5 lines 
set nlines=5 
set count=0 
FOR /F "delims=" %%G IN ('<command>') DO ( 
    set /a count+=1 
    IF !count! GTR %nlines% goto :afterLoop 
    echo %%G 
) 
:afterLoop 
EndLocal 

をして(for /fで)カウントされません。)さらに複雑なスクリプトがfor /f必要になります。

+0

そしてここで私たちはスクリプトの完全な例を持っています。したがって、 'または他のスクリプト言語'。それは基本的なものですが、スクリプティングとIMOのどちらでも簡単なものではありません。それが健全な解決策ではないことを意味するわけではありませんが、最初の質問の要件では、それを実装する標準の標準のボックスコマンドがない場合、実際には解決策はあまりありません。 – Seth

関連する問題