• 締切済み

バッチ(bat)の作り方を教えてください

今、特定フォルダ内にあるファイル3つが存在すればコマンドを実行し、無ければ4時までループさせるといったことをバッチでしたいと考えております。 イメージは以下の通りです。 D:\a.txt,D:\b.txt,D:\c.txt バッチを1時から動かして、上記3つが揃えば、そこからコマンドを実行しバッチは終了 もしなければ10分置きにファイルをチェックし、4時を過ぎればバッチを終了(コマンドを実行させない)ということをしたいです。 コマンドは何でも良いので例えば「echo HELLO」とでもしておきます。 よろしくお願いいたします。

noname#198285
noname#198285

みんなの回答

  • Toshi0230
  • ベストアンサー率51% (836/1635)
回答No.2

無理に全部をバッチファイル内で実行しようとしない方がよいかもしれませんね。 定期的な実行はタスクマネージャやATコマンドで制御して、バッチファイルで実現させるのはファイルがそろっているか確認して、そろっていればコマンドを実行する、というものだけに絞るというのも一つの手です。

  • Cupper
  • ベストアンサー率32% (2123/6444)
回答No.1

環境変数の %time% から時間を拾ってくると良いかもしれません ファイルが存在するかは IF (EXIST) コマンドで確認すると良いでしょう Localhost(起動しているパソコン自身)へ pingを送ることである程度のウェイトを入れることができます  ping localhost -n 60 > null  (約60秒)など とりあえずアドバイスが必要かな...と思うコマンド類はこんなものでしょうか (CALLとかFINDとかGOTOとかは基本ですから説明しませんよ) 質問のバッチファイルは簡単にはできないと思いますが、いろいろ工夫してみてください

関連するQ&A

  • 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

  • 連続でpingを実行するバッチファイルがうまくいきません。

    連続でpingを実行するバッチファイルを作成してたんですが、うまくいきません。 実行すると、"プロセスはファイルにアクセスできません。別のプロセスが使用中です。"って表示されます。 日付と時間はテキストに記載されるんですが、pingの結果が記載されません。 バッチファイルの内容は以下の通りです。 @echo off echo -------------->>d:\result.txt echo PINGテスト結果>>d:\result.txt echo -------------->>d:\result.txt echo 実行年月日 >>d:\result.txt date /T>>d:\result.txt echo 実行時間 >>d:\result.txt time /T>>d:\result.txt for /L %%f in (1,1,254) do ping -n 4 -w 50 192.168.100.%%f>>d:\result.txt exit コマンドプロンプトで、 for /L %f in (1,1,254) do ping -n 4 -w 50 192.168.100.%f>>d:\result.txt と実行すると、pingの結果がテキストに記載されました。 よろしくお願いします。

  • windows2008でftpをバッチ実行する。

    windows2008サーバーでバッチファイルを作成しftpで複数ファイルを自動転送しようと思います。 今まで(OSはXP)はうまく実行していたのですが、windows2008サーバーではうまくいきません。 ちなみにバッチファイルは @echo off echo ●FTP処理 C:\Windows\System32\ftp.exe -s:d:\ftp\tohost.txt echo on @echo off echo ●終了 tohost.txtの内容は open 192.168.1.1 Uid Pwd bin put d:\ftpdata\a1.txt /afld/a2.txt bye です。 何かwindows2008による特別な方法があるのでしょうか? よろしくお願いいたします。

  • .bat(バッチ)から.batを実行したいのですがエラーになってしまいます。

    <やりたい事> (1)メニュー的なバッチからOracleインストール後 (2)OracleのDB作成sqlを実行する.bat(バッチ)を実行する。 <現状> メニュー的バッチから(2)をCALLで呼びだすと「内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。」とコンソールに表示されてしまいます。 コマンドの拡張子を実行できる設定になっている事は確認できています。 また、コマンドプロンプトから(2)のバッチを実行すると実行できました。 色々と調べて見たのですが原因、解決策が見つかりません。 どうか皆様のお力をお借りできればと思います。 宜しくお願いします。 ↓以下バッチの詳細 <(1)メニュー的なバッチ> ECHO OFF :Start ECHO. ECHO 1. ・・・ 運用APLデータベース設定 %P5% ECHO 99. ・・・ 終了 SET Process= SET Choice= SET /p Choice=Type 選択して下さい。 IF '%Choice%'=='1' GOTO MakeDB :MakeDB REM 5. 運用APLデータベース設定選択時 SET Process=運用APLデータベース設定 ECHO *** "%Process%"開始 *** REM 文字変換バッチ実行 CALL C:\TEMP\aaaa.bat IF ERRORLEVEL 1 GOTO ExceptionError :InputError REM 入力エラー時 ECHO 不正なパラメータが入力されました。 GOTO Start :ExceptionError REM 例外エラー時 ECHO ******** 失敗しました。 ******** GOTO Start :End REM バッチを終了する。 EXIT <(2)OracleのDB作成sqlを実行する.bat(バッチ)> SET ORACLE_INSTALL_DIR=C:\oraclexe SET ORACLE_BIN_DIR=%ORACLE_INSTALL_DIR%\app\oracle\product\10.2.0\server\BIN SET ADMIN_DIR=%ORACLE_INSTALL_DIR%\app\oracle\admin\XE SET ORADATA_DIR=%ORACLE_INSTALL_DIR%\oradata\XE SET DBS_DIR=%ORACLE_INSTALL_DIR%\app\oracle\product\10.2.0\server\dbs SET USERNAME=aaa SET PASSWORD=bbb REM // LOGファイル名用に日付の取得 // FOR /F "tokens=1,2,3 delims=/, " %%i IN ('date /t') DO SET SYSDATE=%%i%%j%%k REM // 「Win31J」に文字変換 // ECHO 文字変換開始 %date% %time% >> "C:\install%SYSDATE%.log" "%ORACLE_BIN_DIR%\sqlplus" %USERNAME%/%PASSWORD% as sysdba @C:\TEMP\Drop.sql >> "C:\install%SYSDATE%.log" IF ERRORLEVEL 1 GOTO ExceptionError ECHO DBユーザー作成開始 %date% %time% >> "C:\install%SYSDATE%.log" "%ORACLE_BIN_DIR%\sqlplus" %USERNAME%/%PASSWORD% as sysdba @C:\TEMP\CreateDB.sql >> "C:\install%SYSDATE%.log" IF ERRORLEVEL 1 GOTO ExceptionError

  • バッチファイルで同じフォルダ名がある場合

    バッチファイルで下記のように実行後にフォルダ名を指定して フォルダを作成したいのですが既に同じフォルダ名があった場合 同じフィルだがある旨のメッセージを表示するのとそこでバッチファイルを 終了してよいか?というようなバッチファイルを作成したいのですが バッチファイルコマンドプロンプトの知識があまりありません。 どなたか教えてください。 echo off set /p USER_INPUT=フォルダ名を入れてください。: mkdir %USER_INPUT%

  • バッチファイルで常に最新の現在時刻を表示したい

    バッチファイルで最新の現在時刻を表示したいのですが、うまく行きません。 そのバッチファイル自体を実行した時刻ではなく、そのバッチファイル内のコマンド等を実行した時刻を表示させたいのです。つまりどんどん時間を最新に近いものに更新させていって欲しいのです。 タスクスケジューラのようなものをバッチファイルで作りたくて、現在時刻が○○時であればこのコマンドを実行する、といったことがしたい訳です。 バッチファイルは実行してすぐ終了するのではなく、そのまま常駐するような形を想定しています。 なにか良い方法はないでしょうか。 ■ 5秒おきに現在時刻を表示するバッチファイルの例 (同じ時刻になってしまう) @echo off :start set time=%time: =0% echo . echo . echo .「現在時刻は%time:~-11,2%時%time:~-8,2%分%time:~-5,2%秒です。」 echo . echo . ping localhost -n 5 goto start

  • フォルダ内のbatを全て実行

    Windows コマンドで、特定のフォルダ内にあるバッチファイル全てを順番に実行させることが出来ますか?

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

    @cmd /k 上記の内容で「a.bat」というファイル名で保存しました。 この保存したファイルをダブルクリックすると、バッチファイルが格納されてるフォルダのパスがコマンドプロンプト上に表示されます。 パス表示後に、いろいろな動作(「echo~」など)を実行したいと思っているんですが、うまくいきません。 どうやら一番上の「@~」を記述したものは、そのあとに「echo~」などを記述しても実行してくれないみたいです。 「@cmd /k」実行後に何か(「echo~」など)を実行するにはどうしたらいいですか?

  • Win2K8 R2のタスクでバッチが動作しない

    Windows2008 R2のタスクスケジューラでバッチファイルが実行できない状態に陥っています。 環境・状況等は以下のとおりです。 ・バッチファイルを単体で実行させたときには、問題なく実行できる。 ・ネットワーク上のサーバのあるフォルダをrobocopyするジョブ。 ・タスクスケジューラから実行できている他のバッチファイルを流用して作成。(このジョブも別のサーバのバックアップをしている) ・実行結果は、0x1。 ・タスクスケジューラ登録時には、administratorで登録し、パスワードも入れている。 問題のバッチファイルを直接叩いたときには、何のエラーもなく、約3時間要するrobocopyでのバックアップが稼動しますが、 タスクスケジューラに登録して実行しようとすると、タスクスケジューラの履歴をみると、スタートはしているがすぐに終了して おり、バッチファイル内に記述したrobocopyが稼動していないようです。 バッチファイルの内容は ----------------------- @echo off set LOGFILE=c:\bat\fd_backup\backup.log date /t>%LOGFILE% echo 開始時刻>>%LOGFILE% time /t>>%LOGFILE% echo. >>%LOGFILE% echo Run backup.bat>>%LOGFILE% echo. >>%LOGFILE% ROBOCOPY \\server1\backup\ D:\BACKUP\server1-back\ /MIR /NP /FP /TS /COPYALL /TEE /R:0 /LOG+:%LOGFILE% echo. >>%LOGFILE% echo 終了時刻>>%LOGFILE% time /t>>%LOGFILE% ------------------------- もうひとつ登録してあるバッチファイルは、robocopyの全く同じコマンドで、対象としているサーバと保存先やログファイル名が 異なるだけで問題なくタスクとして稼動しています。 ネット上でいろいろと調べてチェックしてみましたが、おかしいところが見当たらず、困っています。 アドバイスよろしくお願い致します。

  • BAT戻り値による実行(VBS)

    再度の質問となります。よろしくお願い致します。 入力ファイルに記述のDir/Fileを全て、別ドライブにコピー処理を行いたいのですが、このまま実行するとバッチファイルのループで埋めつくされてしまいます。(Runメソットの引数無の状態) Sleepを入れずに、BATファイルのコマンド実行結果より、順次、バッチファイルを実行するには、どのように行えばよいのでしょうか。 ちなみに、Runメソットの引数、trueを入れてみたのですが、”引用の括りに問題があるのか、エラーとなります。(trueを外すとうまく動きますが、バッチファイルの複数実行状態が、これでは回避できません。) 何方か、コマンド実行結果より、VBSより順次バッチファイルを実行する方法を教えて頂けませんでしょうか。 VBS------- inFL = objFso.GetAbsolutepathname("tmptest.txt") inBAT = objFso.GetAbsolutepathname("tempcmd.bat") Set objin = objFso.OpenTextFile(inFL,1) dra = "C:" drb = "E:" Do While objin.AtEndOfStream <> True inline = objin.readLine aa = dra &inline bb = drb &inline objWsh.Run(inBAT &" " &aa &" " &bb,1,true) <=== Loop BAT---------- echo F|xcopy /Y %1 %2 inFile------- \temp\a.txt \temp\work\b.txt ~ よろしくお願い致します。