• ベストアンサー

バッチファイルがうまくいきません。

%1が空でなかった場合、その値を変数motoに入れて、 空だったら"123.bmp"の値を変数に入れたいのですが。 うまくいきません。 わかる方がいらっしゃいましたら教えていただけないでしょうか、 よろしくお願いいたします。 ================ REM 画像名を取得 set moto="" if not "%1"=="" %moto%= %1 else %moto%=123.bmp ===============

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

  • ベストアンサー
  • utakataXEX
  • ベストアンサー率69% (711/1018)
回答No.1

HELPか教本を見ましょう。 変数の格納について、そんな方法は書かれていないと思います。 set moto="" if not "%1"=="" ( set moto=%1 ) else ( set moto=123.bmp ) else と () の間は必ず、スペースを空けないとエラーになります。 (カッコ自体がコマンドなので)

関連するQ&A

  • バッチファイルで画像ファイル名の頭文字を削除したい

    一括で、画像のファイル名の頭4文字を削除したいと思っています。 拡張子はJPGで、バッチで作成しています。 ほぼ、うまく動いているのですが、 1つ目の画像ファイルだけが、8文字削除されてしまいます。 どこが間違えているのかが分からなくて、 ご教授いただけますでしょうか。 よろしくお願いいたします。 @echo off setlocal enabledelayedexpansion for %%F in (*.jpg *.png *.gif *.bmp) do ( set "filename=%%~nF" set "extension=%%~xF" rem ファイル名が4文字以上の場合にのみ先頭4文字を削除 if "!filename:~4!" neq "" ( set "tempname=!filename:~4!!extension!" rem ファイル名が元の名前と異なる場合のみリネーム if not "!tempname!"=="%%F" ( ren "%%F" "!tempname!" ) ) else ( echo ファイル名が短すぎて変更できません: "%%F" ) ) endlocal

  • バッチファイル

    今画像処理のプログラムを作成しています. そのプログラムで,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 //---------------------------------------------------------// しかし,両方とも,同じ名前の画像を取得してしまいます. 違う画像を取得するにはどのようにプログラムを書いたら よいのでしょうか.アドバイスよろしくお願いします.

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

    バッチファイルの質問です。 作成しているのですが、最後の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%"

  • 画像のファイル名の末尾の文字4文字を削除したい

    一括で、画像のファイル名の末尾の文字を削除したいと思っています。 バッチで先頭の文字4文字を削除できたのですが、 末尾の文字4文字を削除にしたいのですが、 どうすれば良いのかを教えていただけませんか。 ご教授いただけますでしょうか。 @echo off setlocal enabledelayedexpansion for /f "delims=" %%F in ('dir /b /a-d *.jpg *.png *.gif *.bmp') do ( set filename=%%~nF set extension=%%~xF rem ファイル名が4文字以上の場合にのみ先頭4文字を削除 if "!filename:~4!" neq "" ( set "tempname=!filename:~4!!extension!" rem リネーム後のファイル名が存在しない場合のみリネーム if not exist "!tempname!" ( ren "%%F" "!tempname!" ) ) else ( echo ファイル名が短すぎて変更できません: "%%F" ) )

  • バッチファイル 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 異常終了】の表示がログ上に出力されるだろうと期待して実行した結果、 何も表示されてませんでした。 どこに問題があるのでしょうか?

  • バッチファイルに日付(ミリ秒まで)をつけたい

    OS: Windows XP あるソフトを使っており、20分おきにexcelシートが自動的に デスクトップ上に「full01.xls」という名前で記録されます。 そこで上書きされないようにするためにバッチファイルを使ってリネー ムするようにしました。 そこで質問ですが新しいexcelシートが出来るたびに出来た時間がわか るようにしたいです。 どのようにすればよいでしょうか? またそれをどこに挿入すればよいか教えていただきたいです。 よろしくお願いします。 @echo off :TOP rem 空きファイル名を検索 set /a N=2 :SEARCH rem 2~9はfull0x, 10以上はfullxxにする set F=full0 if %N% GTR 9 set F=full if not exist %F%%N%.xls goto WAIT set /a N=N+1 goto SEARCH rem full01.xlsが生成されるのを待つ :WAIT echo Search full01.xls :LB1 rem Sleep if not exist full01.xls goto LB1 echo Found full01.xls echo New File = %F%%N%.xls echo Waiting for file write... rem ファイルの書込動作が完全に終るまで待つ set /a M=1 :WAIT2 if "%M%"=="9999" goto RENAME set /a M=M+1 goto WAIT2 :RENAME echo Rename ren full01.xls %F%%N%.xls echo Done. rem ずっと繰り返し goto TOP

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

    いつも大変御世話になっております。 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ではない場合は異常終了のログをはきだす仕組みにしたいのです。 プログラムのどこに問題があるのでしょうか? バッチファイルにお詳しい方、ご教授願いますでしょうか? ※サンプルがあれば、光栄です。 何卒、宜しくお願い致します。

  • バッチファイルとVBスクリプトの連携エラーコード取得

    イベントログにアベンドしたJOBが出力されない場合 せめて、logファイルにだけでも内容を書きたいのですが うまくいきません。 リターンコードが全部(1)の元バッチファイルで0がかえってきます。 どなたがご教授願います。 (1)親バッチファイルの中味 @echo off rem============================================== rem rem ARG1 = スケジュール日 rem ARG2 = ネットワーク名 rem ARG3 = 終了コード rem rem ================================================ set SDATE=%1 set NETWORK=%2 set RC=%3 set SDATE_SHORT=%SDATE:~2,6% set WK_DIR=D:\temp set TOML_TXT=%WK_DIR%\toml_%NETWORK%.txt set VBSCRIPT=D:\stage\tools\bat\GetJobName.vbs echo ### ARG1(%1) ARG2(%2) ARG3(%3) ### if "%RC%"=="00" ( echo NETWORK NORMAL END #AUTONEND# ) else ( echo NETWORK ABNORMAL END #AUTONEND# if exist %TOML_TXT% ( del %TOML_TXT% ) toml -p999 > %TOML_TXT% cscript //Nologo %VBSCRIPT% %SDATE_SHORT% %NETWORK% %RC% %TOML_TXT% )      if not "%errlrlevel%"=="0" ( set EVT_CRT_RC=%errorlevel% echo EVETCREATE Failed. RC=%EVT_CRT_RC% ) ) exit (2)VBスクリプトの中味 800文字以上になるので、補足要求してください。 (3)イベントログ出力バッチファイルの中味 @echo off rem rem 引数 rem %1:SDATE rem %2:NETWORK rem %3:RC rem %4:JOB set MSG=A-AUTO JOBNET : NETWORK(%2) JOB(%4) SDATE=%1 ABNORMALLY ENDED RC=%3 eventcreate /l application /t error /so autonend /id 999 /d "%MSG%" exit %errorlevel%

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

    以下のバッチファイルを作成して実行したのですが、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

  • batの検証依頼

    現在、batを作成中です。 ターゲットが巨大HDD(2TB)のディスクをbatで読み込んで処理中ですが 処理時間が10分程度必要なのでHDDで何度もトライ&エラーで処理するのは効率的ではありません。 しかも、処理を何度も行うとHDDに負担がかかる。 そこで、以下のコードで問題ないか コードを検証してもらえないでしょうか? 長い文字列(フルパス)が何度も出てきて読みにくいので変数で処理すべきでしょうが 自分のコード作成能力上間違いが少ない方法を選んでいます。 コメントをたくさん入れたのでどんな事をやりたいかはご理解願えると思いますが 不明な点は追加で説明いたします。 コードに不都合な点あれば、修正していただければ幸いです。 ’-------------------------------------------------------------------- REM ドライブレターの全フォルダー名のみを階層を含めて出力 REM ドライブ直下のファイル名(フルパス)の出力にも対応 REM ---------------------------------------------------- @echo off set /p D="ドライブを入力してください <例> x --> " cd /d %D%: REM サーチ先のドライブに移動して以下の作業を行う(書き出しもサーチ先になる) REM -- ドライブレターの全フォルダー名のみを階層を含めて出力 REM -- ドライブ直下のファイル名は出力しない dir /b /ad /s>temp1.txt REM -- /d ドライブ直下のファイル名のみを出力 (a-d ドライブ直下のファイル名のみ出力) dir /b /d >temp2.txt REM ファイル結合してコピー REM C:\UsersTAC_\Desktop\Mp3_MergeDrive\ ---> BATがあるフォルダを表す copy /Y temp2.txt + temp1.txt C:\UsersTAC_\Desktop\Mp3_MergeDrive\temp.txt REM tempファイル削除 del /Q temp1.txt del /Q temp2.txt REM 出力ファイルをソート sort /o C:\UsersTAC_\Desktop\Mp3_MergeDrive\temp.txt C:\UsersTAC_\Desktop\Mp3_MergeDrive\temp.txt rename C:\UsersTAC_\Desktop\Mp3_MergeDrive\temp.txt C:\UsersTAC_\Desktop\Mp3_MergeDrive\FileName_ListUp.txt REM ------------------------------------------------ REM Vol1, Vol2, Vol3という変数にボリューム名をセット set Vol1=K-N set Vol2=456 set Vol3=789 REM IDという変数を空でセット set ID= REM wmicコマンドでHDDのvolumenumberを取得し、findコマンドでVol1, Vol2, Vol3の値を検索 REM errorlevelの値に応じて、IDという変数にX, Y, Zの値をセット wmic logicaldisk get volumename | find "%Vol1%" if errorlevel 0 if not errorlevel 1 set ID=X wmic logicaldisk get volumename | find "%Vol2%" if errorlevel 0 if not errorlevel 1 set ID=Y wmic logicaldisk get volumename | find "%Vol3%" if errorlevel 0 if not errorlevel 1 set ID=Z REM 調査結果の表示、numの値で、serialnumberの中に一致するものがあったため、ID=X,Y,Zを表示。 REM serialnumberの中に一致するものがなかった場合、IDには何もセットせずに表示。 if defined ID ( echo Match found. ID=%ID% ) else ( echo No match found. ID=%ID% REM ドライブを加味したファイル名に変名 if defined ID rename C:\UsersTAC_\Desktop\Mp3_MergeDrive\FileName_ListUp.txt C:\UsersTAC_\Desktop\Mp3_MergeDrive\%ID% _FileName_ListUp.txt cls & echo "終了しました" & pause exit /b

専門家に質問してみよう