• ベストアンサー
  • すぐに回答を!

コマンドの実行結果を変数に格納いしたい。

有るプログラムへ特定ディレクトリのファイル数を渡す必要があり、バッチファイルを書いてますが、うまく行きません。 アドバイスを頂けましたら幸いです。 コマンドの実行欠課を変数に格納する方法を調べており、FOR文を使う事は分かったのですが、パイプを使った処理がうまく行きません。 ◎実行したいコマンド DIR /B | FIND /C /V "log” ◎バッチファイル @ECHO OFF for /f "usebackq tokens=*" %%i in (`DIR /B | FIND /C /V "log"`) do @set RESULT=%%i echo %RESULT% @ECHO ON パイプを使わず、単純なコマンドだと正常に変数に格納されますので、パイプでFINDに渡している事がだめだと思っております。 こういった場合、どう書けばよいかお教えください。

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数1636
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答No.1
  • notnot
  • ベストアンサー率47% (4698/9891)

" "の外で、| を書くとパイプの意味になりますので、 for /f "usebackq tokens=*" %%i in (`DIR /B というコマンドと、 FIND /C /V "log"`) do @set RESULT=%%i というコマンドをつなぐパイプだと認識されます。 で、上記コマンドはどちらも文法エラーです。 ^ でエスケープして下さい。 for /f "usebackq tokens=*" %%i in (`DIR /B ^| FIND /C /V "log"`) do @set RESULT=%%

共感・感謝の気持ちを伝えよう!

質問者からのお礼

notnot様 アドバイス有難うございます。 お教え頂いたとおり、”^|”でエスケープすれば、期待通りの動作しました。 大変勉強になりました、有難うございました。

その他の回答 (1)

  • 回答No.2
  • koi1234
  • ベストアンサー率53% (1866/3459)

>for /f "usebackq tokens=*" %%i in (`DIR /B | FIND /C /V "log"`) do @set RESULT=%%i for /f "usebackq tokens=*" %%i in (`”DIR /B | FIND /C /V "log"”`) do @set RESULT=%%i

共感・感謝の気持ちを伝えよう!

質問者からのお礼

koi1234様 アドバイス有難うございます。

関連するQ&A

  • 日付ファイルを検索して結果を変数に入れたい

    LOGDIRディレクトリにYYYYMMDDhhmmss.log形式のログファイルが複数あります。 ここから当日日付のログファイルを取り出して、順番に処理にかけたいのですが、 うまく行きません。どなたかご支援願えますでしょうか? LOGDIRディレクトリのファイル ====================================== 20120401093020.log 20120402093020.log 20120403093020.log 20120404093020.log 20120405093020.log 20120405123000.log ====================================== 以下、作成したバッチです。 ====================================== set RESULT= set DAY=%date:~-10,4%%date:~-5,2%%date:~-2,2% set LOGDIR="J:\Temp\log\" set TLOGDIR="J:\Temp\tmp\aaa\" REM set TFILE=`dir /B %LOGDIR% ^| findstr %DAY%.` echo %TFILE% for /f "usebackq tokens=*" %%i in (`dir /B %LOGDIR%^| findstr %DAY%.`) do (set RESULT=%%i) xcopy /y %LOGDIR%%RESULT% %TLOGDIR% ====================================== 実行日が20120405だとした場合、20120405093020.logと20120405123000.logを処理したいのですが、 20120405123000.logしか処理されません。 2つとも処理したい場合はどうすれば良いでしょうか? よろしくお願いします。

  • 絶対パス名からファイル名を取り出して、変数に格納するバッチ

    DOSコマンドバッチで定義した変数"fullpath"に絶対フルパス名が格納されているとします。 この変数からファイル名だけを抽出して別の変数"filenae"に格納したいのですが方法がわかりません。 1. set fullpath = "C:\test\test.c" 2. ----ここの部分をどのように処理すれば?------ 3. set filename = fullpathから抽出したファイル名 私がやってみた方法として、for文とdir /bを組み合わせてみたのですが for %a in ( dir /b c:\test\test.c ) do set filename =%a 本来dir /bを実行するとファイル名のみが表示されるのに、For文をかますと絶対フルパスでfilenameに値が格納されてしまいます。 dir /b c:\test\test.cの結果を直接filename変数に格納できれば解決するのですが、コマンド結果を変数に格納するにはFor文を使わないとだめなんですよね? なにかよい方法はないでしょうか?

  • sedの引数を変数に格納する方法

    例えば、次のコマンド echo a b c d e f | sed -e 's/.*\(b.*e\).*/\1/' -e 's/.*b c *\(.*\) .*/\1/' の「-e 's/.*\(b.*e\).*/\1/' -e 's/.*b c *\(.*\) .*/\1/'」の部分を変数に格納して echo a b c d e f | sed $regex のように実行したいのですが、変数が展開されるときにクォーテーションマークがどのように付与されるのかを理解できず、 regex=’-e s/.*\(b.*e\).*/\1/' まではできたのですが、コマンドにスペースが入った場合、どうすれば良いのかわからないため、後半のコマンドを格納することができません。 この場合、どのように変数に格納すれば良いのでしょうか。 よろしくお願いいたします。

  • Win2000 バッチファイルについて

    こんにちは、 Win2000の環境で下記のバッチがうまく動作できません、”FIND:パラメータ書式が間違います”というエラーが出ています、ほかの2003,2008ではそういう現象が出ていません。 なぜでしょうか? そこの”^|”の”^”を消したとしても無理のようです。 ■簡単にバッチファイルが存在する領域の使用容量を算出するバッチファイルです。(一時ファイルの生成は利用しない、Findコマンドだけを使うという前提で) ソース: @echo off for /F "tokens=3" %%s in ('dir /s/-c ^| find "個のファイル"') do Set s=%%s echo %s% 分かって頂ければご教授ください。 誠にありがとうございます~~。

  • Windows2000 バッチファイルコマンドについて

    こんにちは。 バッチファイルコマンド(DOSコマンド?)について質問があります。 まずやりたい事としては、 「前月日付のフォルダを自動作成したい」 です。 当月日付をもってくる為には以下の様なコマンドでできました。 for /f "tokens=1-2" %%l in ('date /t') do set today=%%l for /f "delims=/ tokens=1-2" %%a in ('echo %today%') do set yymm=%%a%%b このコマンドを実行すると、例えば、%yymm%には200507が入っています。 このコマンドを応用して、前月日付(200506)を取得したいのですが、何か言い方法はありませんでしょうか? また、新たなやり方あるのでしたら教えて頂けないでしょうか?

  • For文のtokensにおけるバッチファイル作成について

    はじめまして。 バッチファイルにて以下のコマンドを作成して 実行したのですがきちんと実行されません。 コマンドプロンプトを起動して1個1個実行するときちんと 実行されます。どういうことなのでしょうか? <バッチファイル> @echo off cd /d デスクトップ for /F "tokens=2" %i in ( file.txt ) do echo %i >> result.txt pause <file.txtの中身> 1<tab>2<tab>3 4<tab>5<tab>6

  • バッチファイルから直接db2コマンドに引数を持たせて実行したい

    バッチファイルより、得たデータを引数としてdb2コマンドに私、実行したいのですが、そのようなことはできるでしょうか。 (詳細) バッチファイルで、日付&時間を変数に格納します。これを、db2のテーブルにインポートしたい。 稚拙な質問で申し訳ありません。

  • コマンド実行結果を環境変数に代入する方法ありますか

    下記のとおりfindコマンドを実行すると結果が表示されます。 findコマンドの実行結果を直接環境変数に代入したいのですが、 できますでしょうか。 できれば「5」だけを環境変数に代入したいです。 よろしくお願いします。 C:\tmp>find /C "OPEN" aaa.txt ---------- AAA.TXT: 5

  • ATコマンドからエグゼファイルが実行できない

    こんにちは。 ATコマンドで毎日10:00時に一回、あるバッチファイルを起動させる登録を行なっています。 しかしバッチファイルからVBで作成したエグゼファイルが実行されていないようです。 エグゼファイル(Project1.exe)は今はテスト用で実行させますとWindowが表示されるだけです。DOSプロンプトから実行させるとWindowはちゃんと表示します。 ログファイルを意図的にはかせてますが、終わりのログがはかれているのでバッチファイル自体は実行されているようなのですが。 どういった原因なのかこころあたりある方よろしくお願いします。 起動するバッチファイル(testbat.bat)の内容 C: echo "start" >C:\test.log Project1.exe echo "end" >C:\test.log

  • 【シェルスクリプト】awkの結果を変数に格納したいです。

    【シェルスクリプト】awkの結果を変数に格納したいです。 パイプを使って、3つのコマンドを実行し、変数に格納したいです。 command1 | command2 | command3 command2 には grep が、 command3 には awk が入ります。 よろしくお願いします。