プラットフォーム Windows XP
コマンド ファイル (.bat) を作成するときに、コマンドからの出力を変数に「キャッチ」するにはどうすればよいですか?
私はこのようなことをしたい
SET CR='dir /tw /-c b.bat | findstr /B "[0-9]"'
しかし、これは機能しません
よろしくステファン
PSいいえ、grep、cygwin、またはその他のソフトウェアをダウンロードできません。CMD DSである必要があります
プラットフォーム Windows XP
コマンド ファイル (.bat) を作成するときに、コマンドからの出力を変数に「キャッチ」するにはどうすればよいですか?
私はこのようなことをしたい
SET CR='dir /tw /-c b.bat | findstr /B "[0-9]"'
しかし、これは機能しません
よろしくステファン
PSいいえ、grep、cygwin、またはその他のソフトウェアをダウンロードできません。CMD DSである必要があります
FOR /F
バッチファイル内のいくつかのループを使用して実行し、出力をキャプチャできます。
@echo off
setlocal enabledelayedexpansion
set var=
for /f "tokens=* delims=" %%i in ('dir /tw /-c b.bat ^| findstr /B "[0-9]"') do set var=!var!^
%%i
echo %var%
!var!^
と以下の間に2つの改行があることが特に重要です%%i
。
さらに、この場合のパイプなど、シェルにとって特別な意味を持つ^
コマンドライン内のすべての文字をエスケープする必要があります(ここでも使用します)。FOR
このソリューションは、コマンドの出力を繰り返し処理し、各行をの内容にvar
段階的に追加することで機能します。これをやや便利な方法で行うために、スクリプトは遅延変数拡張(!var!
構文)を有効にします。
そのために使用できますfor /f
:
for /f %%L in ('dir /tw /-c b.bat ^| findstr /b "[0-9]"') do set CR=%%L
ただし、これは出力が 1 行だけであることを前提としています。変数に複数の行をキャプチャすることは (自明に、または便利に) できません。
でも、あなたが本当にここで何をしようとしているのかは推測することしかできません。ファイルサイズが必要な場合( のために推測するだけです/-c
)、確かに使いやすいです
for %%X in (b.bat) do set size=%%~zX
エラーレベルを設定して終了すると、バッチファイルでコマンドの終了コードを確認できます。これがあなたの言いたいことかどうかわかりませんが、役に立てば幸いです。