バッチファイル作成の質問

このQ&Aのポイント
  • バッチファイルの最後の条件判定が通らない理由を教えてください
  • 別の方法で最後の条件判定を行う方法を教えてください
  • バッチファイル作成時のベースPATHの設定について教えてください
回答を見る
  • ベストアンサー

バッチファイルの質問です。

バッチファイルの質問です。 作成しているのですが、最後のif "%BASE_PATH%" == "" ( がどうしても通りません。 表記がおかしいんでしょうか? また別のいい方法があれば教えてください。 rem ************************************************** rem 処理名 :送受信ファイル削除 rem 処理概要 :送受信フォルダのファイルを削除する rem ファイル名 :FILE_DELETE.bat rem 引数 :(1)ファイルID[12文字] (2)データ区分[S:送信、R:受信] rem 戻り値 :正常:0、異常:2 rem ************************************************** rem **** 初期処理 **** set SCRIPT_NAME=FILE_DELETE set TMP_HR=%time: =0% set "DATE_STR=%date:~0,4%%date:~5,2%%date:~8,2%%TMP_HR:~0,2%%time:~3,2%%time:~6,2%%time:~9.2%" set RETCODE=0 set ROOT_P= set ROOT_P=D:\HOME\If set LOG_PATH=D:\HOME\Log set LOG_NAME=%SCRIPT_NAME%_%1.log set BASE_PATH="" rem **** 処理ベースのPATH設定 **** set ARGV1=%1 set AITE_DIR=!ARGV1:~0,2! if "%AITE_DIR%" == "ST" ( set BASE_PATH=%ROOT_P%\ST010 ) if "!ARGV1:~0,5!" == "LE70S" ( set BASE_PATH=%ROOT_P%\LE020 ) rem **** ベースPATHの設定失敗 **** if "%BASE_PATH%" == "" ( echo %DATE% %TIME% %COMPUTERNAME%:ERR-00204 ベースPATHがありません >> "%LOG_PATH%\%LOG_NAME%"

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

  • ベストアンサー
  • pita-gora
  • ベストアンサー率70% (102/145)
回答No.2

こんにちは。 set BASE_PATH="" の行を set BASE_PATH= としてみてください。

その他の回答 (1)

  • sngPoi2
  • ベストアンサー率49% (468/939)
回答No.1

set AITE_DIR=!ARGV1:~0,2! は、遅延環境変数展開での記述です。 CMD.exeはデフォルトで、遅延環境変数展開がオフになっているので、遅延環境変数を使用したい場合は、オンにする必要があります。 CMD.exe /V:on 遅延環境変数展開を使用せずとも、実現は可能では無いのですか? set AITE_DIR=%ARGV1:~0,2% 補足 SET [ENTER]で、SET文で定義した内容が確認出来ますよ!

関連するQ&A

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

    以下のバッチファイルを作成して実行したのですが、PATH_NAMEの変数が 設定されず、ファイルコピーがされません。 どのように、コードを記載すれば良いのでしょうか。 ご教授願います。 REM コピーするファイル数を設定 SET /a FILE_NUM = 2 REM コピー元のパスを設定 SET PATH_P1=C:\Copy01.txt SET PATH_P2=C:\SAMPLE\Copy02.txt REM 上記で設定したファイルを順番にC:\TEST\へコピーする SET /a N=1 :LOOP SET /p PATH_NAME = PATH_P%N% copy %PATH_NAME% C:\TEST\ if "%N%"== "FILE_NUM " (goto EXIT) SET /a N=N+1 goto LOOP :EXIT

  • バッチファイル 2つのログに出力 短縮版

    お世話になっております。 WindowsXP環境にて下記のバッチファイルがあります。 コード-------------------------------------------------------------------------------- rem === 変数設定 =============================================================== rem --- 時間変数 --- set yyyy=%date:~-10,2% set yy=%date:~-8,2% set mm=%date:~-5,2% set dd=%date:~-2,2% set HH=%TIME:~0,2% set MM2=%TIME:~3,2% set SS=%TIME:~6,2% rem --- フォルダ変数 --- set LOG_DIR1=D:\test rem --- ファイル変数 --- set LOG_FILE1=LOG.txt set LOG_FILE2=LOG_ALL.txt set LOG_FILENAME1=%LOG_DIR1%\%LOG_FILE1% set LOG_FILENAME2=%LOG_DIR1%\%LOG_FILE2% set BAT_FILE1=test.bat rem コマンド拡張機能有効化 setlocal ENABLEEXTENSIONS rem === 変数設定 =============================================================== REM <開始処理>=============== call :TIME echo %BAT_FILE1% 処理日 = %yyyy%%yy%/%mm%/%dd% 処理開始時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME1% echo. >> %LOG_FILENAME1% echo %BAT_FILE1% 処理日 = %yyyy%%yy%/%mm%/%dd% 処理開始時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME2% echo. >> %LOG_FILENAME2% rem 現在の日付/時間を取得 :TIME set yyyy=%date:~-10,2% set yy=%date:~-8,2% set mm=%date:~-5,2% set dd=%date:~-2,2% set HH=%TIME:~0,2% set MM2=%TIME:~3,2% set SS=%TIME:~6,2% exit /b コード-------------------------------------------------------------------------------- 上記プログラムは日付を2つのログに出力していますが、 echo %BAT_FILE1% 処理日 = %yyyy%%yy%/%mm%/%dd% 処理開始時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME1% echo. >> %LOG_FILENAME1% echo %BAT_FILE1% 処理日 = %yyyy%%yy%/%mm%/%dd% 処理開始時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME2% echo. >> %LOG_FILENAME2% と二重になっている無駄なコードとなり、見栄えが良くないです。 これを1つのコードで2つのログファイルに出力可能な短縮プログラムは可能でしょうか? ご存知の方がいましたら、ご教授願いますでしょうか? 何卒宜しくお願い致します。

  • バッチファイル 複数条件判定方法

    いつも大変御世話になっております。 WindowsXP SP2に【D:\test\bat】フォルダに【test.bat】があります。 上記バッチファイルは以下のようになっています。 コード------------------------------------------------ rem --- フラグ変数 --- set OK=0 set NG=1 rem --- 初期化 --- set FLAG_A=%OK% set FLAG_B=%OK% rem --- 時間変数 --- set yyyy=%date:~-10,4% set yy=%date:~-8,2% set mm=%date:~-5,2% set dd=%date:~-2,2% set YMD=%date:~-8,10% set HHMMSS=%time:~0,8% set FILE_DATE=%date:~-10,4%%date:~-5,2%%date:~-2,2%%TIME:~0,2%%TIME:~3,2% set FILE_DATE=%FILE_DATE: =0% rem --- 存在ファイル格納フォルダ変数 --- set SERCH_DIR1=D:\sample1\ set SERCH_DIR2=D:\sample2\ rem --- ログフォルダ変数 --- set LOG_DIR1=D:\sampleLOG rem --- ログファイル変数 --- set LOG_FILE1=LOG.txt rem --- 検索対象ファイル変数 --- set SERCH_FILE1=sample1.txt set SERCH_FILE2=sample2.txt REM <STEP1> REM %SERCH_FILE1%存在チェック開始=============================================== echo %yyyy%%mm%/%dd% %HHMMSS% >> %LOG_DIR1%\%LOG_FILE1% IF EXIST %SERCH_DIR1%\%SERCH_FILE1% goto YES1 ECHO ON echo %SERCH_FILE1%が存在していません。調査して下さい。 >> %LOG_DIR1%\%LOG_FILE1% ECHO ON set FLAG_A=%NG% goto NEXT_SERCH_FILE :YES1 ECHO ON echo %SERCH_FILE1%が存在しています。 >> %LOG_DIR1%\%LOG_FILE1% ECHO OFF REM %SERCH_FILE1%存在チェック終了=============================================== PAUSE :NEXT_SERCH_FILE REM <STEP2> REM %SERCH_FILE2%存在チェック開始=============================================== echo %yyyy%%mm%/%dd% %HHMMSS% >> %LOG_DIR1%\%LOG_FILE1% IF EXIST %SERCH_DIR1%\%SERCH_FILE2% goto YES2 ECHO ON echo %SERCH_FILE2%が存在していません。調査して下さい。 >> %LOG_DIR1%\%LOG_FILE1% ECHO ON set FLAG_B=%NG% goto HANTEI :YES2 ECHO ON echo %SERCH_FILE2%が存在しています。 >> %LOG_DIR1%\%LOG_FILE1% ECHO OFF REM %SERCH_FILE2%存在チェック終了=============================================== PAUSE REM <終了処理>================================================================== :HANTEI ECHO ON echo %FLAG_A% >> %LOG_DIR1%\%LOG_FILE1% echo %FLAG_B% >> %LOG_DIR1%\%LOG_FILE1% PAUSE IF FLAG_A == %OK% IF FLAG_B == %OK% ( echo %yyyy%/%mm%/%dd% %HHMMSS% 正常終了 >> %LOG_DIR1%\%LOG_FILE1% ) ELSE ( echo %yyyy%/%mm%/%dd% %HHMMSS% 異常終了 >> %LOG_DIR1%\%LOG_FILE1% ) PAUSE コード------------------------------------------------ 一番最後の判定処理がうまく動作しません。 ※両フラグ(FLAG_AとFLAG_B)が0の時に正常終了のログをはきだし、どちらかが0ではない場合は異常終了のログをはきだす仕組みにしたいのです。 プログラムのどこに問題があるのでしょうか? バッチファイルにお詳しい方、ご教授願いますでしょうか? ※サンプルがあれば、光栄です。 何卒、宜しくお願い致します。

  • バッチファイル IF 複数条件方法

    WindowsXP環境にて下記のバッチファイルがあります。 rem --- 時間変数 --- set yyyy=%date:~-10,4% set yy=%date:~-8,2% set mm=%date:~-5,2% set dd=%date:~-2,2% rem --- ログフォルダ変数 --- set LOG_DIR1=D:\LOG rem --- ログファイル変数 --- set LOG_FILE1=LOG.txt set A=1 set B=2 IF %A% == 1 IF %B% == 2 ( echo %yyyy%%mm%/%dd% %HHMMSS%正常終了 >> %LOG_DIR1%\%LOG_FILE1% ) ELSE (echo %yyyy%%mm%/%dd% %HHMMSS%異常終了 >> %LOG_DIR1%\%LOG_FILE1%) pause 上記プログラムだとログ上で【200912/10 正常終了】と表示されるのに、【set A=10】と変更して 【200912/10 異常終了】の表示がログ上に出力されるだろうと期待して実行した結果、 何も表示されてませんでした。 どこに問題があるのでしょうか?

  • バッチファイル フォルダ存在 確認

    いつも大変御世話になっております。 WindowsXP SP2に【D:\test\bat】フォルダに【test.bat】があります。 上記バッチファイルは以下のようになっています。 コード------------------------------------------------ rem --- 時間変数 --- set yyyy=%date:~-10,2% set yy=%date:~-8,2% set mm=%date:~-5,2% set dd=%date:~-2,2% set YMD=%date:~-8,10% set HHMMSS=%time:~0,8% set FILE_DATE=%date:~-10,4%%date:~-5,2%%date:~-2,2%%TIME:~0,2%%TIME:~3,2% set FILE_DATE=%FILE_DATE: =0% rem --- フォルダ変数 --- set log=D:\test\drive_xcopy\log set INP_DIR=D:\test\drive_xcopy\in set OUT_DIR=D:\test\drive_xcopy\out\ rem --- ファイル変数 --- set logName=log.txt echo "%YMD%","%HHMMSS%","FOLDER.bat","処理開始" >> %log%\%logName% REM フォルダコピー XCOPY "%INP_DIR%" "%OUT_DIR%" /e /Y >> %log%\%logName% echo "%YMD%","%HHMMSS%","FOLDER.bat","処理終了" >> %log%\%logName% コード------------------------------------------------ 単純に【D:\test\drive_xcopy\in\】内のすべてのフォルダを 【D:\test\drive_xcopy\out\】内にコピーしています。 ちなみに、、【D:\test\drive_xcopy\in\】フォルダには100個フォルダがあります。 実現したい事は、コピー対象となる100個フォルダがちゃんとコピーされ、 コピー先にすべて確実存在しているかを【コピー元⇔コピー先】とで 1つ1つマッチング処理したいのです。 すべて存在していれば、上記ログファイルに 100フォルダすべてが存在しています。 と書き込み、 1つでも存在していなければ、上記ログファイルに ○○○フォルダがコピー先に存在していません。 それ以外は存在しています。 と書き込むような処理を実現したいのです。 コピー先に存在していないのが複数であれば 下記のようなログメッセージを書き込みたいです。 ログメッセージ例----------------------- ○○○フォルダがコピー先に存在していません。 ×××フォルダがコピー先に存在していません。 それ以外は存在しています。 ログメッセージ例----------------------- For文とIF文をうまく使い、フォルダを変数で順に格納してマッチングするような 作成になると思いますが、難しくて苦戦しています。 方法をご存知の方がいれば、ご教授願いますでしょうか? ※サンプルがあれば、光栄です。 宜しくお願い致します。

  • バッチファイル 時間変数 短縮化

    バッチファイル 時間変数 短縮化 お世話になっております。 WindowsXP環境にて下記のバッチファイルがあります。 コード-------------------------------------------------------------------------------- set BAT_FILE=TIME.bat set LOG_DIR=D:\test set LOG_FILE=LOG.txt set LOG_FILENAME=%LOG_DIR%\%LOG_FILE% set yyyy=%date:~-10,2% set yy=%date:~-8,2% set mm=%date:~-5,2% set dd=%date:~-2,2% set HH=%TIME:~0,2% set MM2=%TIME:~3,2% set SS=%TIME:~6,2% echo %BAT_FILE% 処理日 = %yyyy%%yy%/%mm%/%dd% 第一処理開始時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME% echo. >> %LOG_FILENAME% 処理A(プログラムは省略) set yyyy=%date:~-10,2% set yy=%date:~-8,2% set mm=%date:~-5,2% set dd=%date:~-2,2% set HH=%TIME:~0,2% set MM2=%TIME:~3,2% set SS=%TIME:~6,2% echo %BAT_FILE% 処理日 = %yyyy%%yy%/%mm%/%dd% 第一処理終了時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME% echo. >> %LOG_FILENAME% set yyyy=%date:~-10,2% set yy=%date:~-8,2% set mm=%date:~-5,2% set dd=%date:~-2,2% set HH=%TIME:~0,2% set MM2=%TIME:~3,2% set SS=%TIME:~6,2% echo %BAT_FILE% 処理日 = %yyyy%%yy%/%mm%/%dd% 第二処理開始時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME% echo. >> %LOG_FILENAME% 処理B(プログラムは省略) set yyyy=%date:~-10,2% set yy=%date:~-8,2% set mm=%date:~-5,2% set dd=%date:~-2,2% set HH=%TIME:~0,2% set MM2=%TIME:~3,2% set SS=%TIME:~6,2% echo %BAT_FILE% 処理日 = %yyyy%%yy%/%mm%/%dd% 第二処理終了時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME% echo. >> %LOG_FILENAME% コード-------------------------------------------------------------------------------- 上記プログラム内の処理A及び、処理Bは比較的長い処理である為、その前後の処理時間帯を上記のように時間変数で取ってログに出力されています。 しかし、上記のように最新の処理時間帯をわざわざ何行もある各時間変数を宣言して取得するのはプログラム的に長くなってしまい、かつ醜いです。 上記方法以外に時間変数のスッキリとした取得方法は無いのでしょうか? ご存知の方がいれば、ご教授願いますでしょうか? 何卒宜しくお願い致します。

  • DOSのバッチ作成について‐FORのネストはできるんでしょうか?

    以下のようなバッチプログラムを作っています。 echo %date% %time% 開始しました。 rem レポートに関する環境変数 set rep01=01_A表 set rep02=02_B表 set rep03=03_C表 set rep04=04_D表 set rep05=05_E表 for %%d in (dora emon) do ( rem ディレクトリに関する環境変数 set OUT_PATH=d:\%%d\o_files set DOWN_PATH=d:\%%d\dl_files set PUB_PATH=d:\%%d\p_files set BAK_PATH=d:\%%d\b_files set LOG_PATH=d:\%%d\batch_log for %%z in (0001 0002 0003 0004 0005) do ( for %%r in (%rep01% %rep02% %rep03% %rep04% %rep05%) do ( if exist OUT_PATH\%%z\*.htm *.xls GOTO RESULT_01 else GOTO RESULT_02 :RESULT_01 echo ファイルが存在します。 :RESULT_02 echo %date% %time% %%z ファイルがありません。))) ここまでで、コマンドの構造が誤っています。 とエラーがでます。 FORのネストができないのかなって思ったりするのですが、初プログラムに挑戦中で、わかりません。 質問の仕方すらなっていないと承知していますが、 どうか、よろしくお願いします。

  • バッチファイル set /p による条件分岐について質問

    vistaを使っています。 set /p でキー入力を受け付け処理を分岐させるファイルを作っているのですが・・・ 例外の条件を定義する方法がわかりません。 詳細は下をご覧になってください。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~ @echo off rem ##################################### rem 分岐プログラムサンプルです! rem ##################################### :start cls echo ■■■分岐プログラムサンプル■■■ echo 【1】test1へ! echo 【2】test2へ! echo 【3】test3へ! echo 【4】メニューを終了します! echo ■■■■■■■■■■■■■■■■■ set /p num="実行したいメニューの数字キーを入力してください⇒" if "%num%"=="1" goto A if "%num%"=="2" goto B if "%num%"=="3" goto C if "%num%"=="4" goto end . . . <省略> ↑のように入力された数字によって、処理が変わるようになっているのですが、ここで"上記以外の条件"を定義するにはどのように記述すればよいのかお教えいただけませんでしょうか。

  • バッチファイル

    今画像処理のプログラムを作成しています. そのプログラムで,2つの入力画像データを読み込みたいのですが, うまくいきません. 下記のようにプログラムしています. //---------------------- C言語のソース -----------------------// strcpy(Img.FileNameIn1,argv[1]); //InputData1のファイル名の取得 MakeFileName(&Img,"ou1.bmp"); //出力ファイル名の作成 Readbmp(&Img); //InputData1のデータの読み込み strcpy(Img.FileNameIn2,argv[1]); //InputData2のファイル名の取得 MakeFileName(&Img,"out2.bmp");  //出力ファイル名の作成  ReadRaw(&Img); //InputData2のデータの読み込み //------------------------------------------------------------// //------- バッチファイルではこのように書いています ------// @echo off set COMAND = program.exe set PATH = * .bmp set PATH = *_s.bmp echo on for %%A in (%PATH%) do %COMAND% %%A //---------------------------------------------------------// しかし,両方とも,同じ名前の画像を取得してしまいます. 違う画像を取得するにはどのようにプログラムを書いたら よいのでしょうか.アドバイスよろしくお願いします.

  • 複数の自作バッチプロラムの共有ログを採取する方法

    複数の自作バッチプロラムの共有ログを採取する方法 os:windows xp バッチプログラムの開始前後にログ出力をします。 普通にバッティングせずに動くと、後述のサンプル・ログ(1)のように綺麗にとれます。 しかし、 バッティングした際に正しく取れません。 dos batファイルでやったところ、掴んでいるときに後から行った方の出力がされません。  → サンプル・ログ(1) それならと、 vbsで同じ事を作ってみました。 すると、掴んでいるときに後から行った方がエラーでコケました。 ファイルの定義やオープンの時に「掴んでいたら無制限に待つ」とか「タイムアウトまで待つ」とか、そういう事はできるでしょうか? 複数のアプリから同じファイルにIOするには仕組みとして何かが足りないのでしょうか? 以上、よろしくお願いします。 ■サンプル・ログ (1) ===== FILE_TIME.log ===== 2010/03/05- 9:00:00.00,処理1,開始 2010/03/05- 9:00:00.00,処理2,開始 2010/03/05- 9:30:00.00,処理1,終了 2010/03/05- 9:40:00.00,処理2,終了 ===== FILE_TIME.log ===== (2) ===== FILE_TIME.log ===== 2010/03/05- 9:00:00.00,処理1,開始 2010/03/05- 9:30:00.00,処理1,終了 2010/03/05- 9:40:00.00,処理2,終了 ===== FILE_TIME.log ===== ■サンプル・バッチファイル ===== Shori1.bat ===== @echo off echo %date%-%time%,処理1,開始 >> FILE_TIME.log rem 処理1呼び出し echo %date%-%time%,処理1,終了 >> FILE_TIME.log ===== Shori1.bat ===== ===== Shori2.bat ===== @echo off echo %date%-%time%,処理2,開始 >> FILE_TIME.log rem 処理2呼び出し echo %date%-%time%,処理2,終了 >> FILE_TIME.log ===== Shori2.bat ===== ■サンプル・vbs ===== Shori1.vbs ===== Set ObjSFS = WScript.CreateObject("Scripting.FileSystemObject") Set ObjLogFile = ObjSFS.OpenTextFile("FILE_TIME.log", 8, True) ObjLogFile.WriteLine Now() & ",処理1,開始" ObjLogFile.Close rem 処理1呼び出し Set ObjLogFile = ObjSFS.OpenTextFile("FILE_TIME.log", 8, True) ObjLogFile.WriteLine Now() & ",処理1,終了" ObjLogFile.Close ===== Shori1.vbs ===== ===== Shori2.vbs ===== Set ObjSFS = WScript.CreateObject("Scripting.FileSystemObject") Set ObjLogFile = ObjSFS.OpenTextFile("FILE_TIME.log", 8, True) ObjLogFile.WriteLine Now() & ",処理2,開始" ObjLogFile.Close rem 処理2呼び出し Set ObjLogFile = ObjSFS.OpenTextFile("FILE_TIME.log", 8, True) ObjLogFile.WriteLine Now() & ",処理2,終了" ObjLogFile.Close ===== Shori2.vbs =====

専門家に質問してみよう