• 締切済み

バッチファイルでカウントアップするには

:loop set id=0 if '%1' == '' goto end cd %1 if exist %1 for %%i in (*.bmp) do ( set id+=1 echo %id% ) shift goto loop :end pause バッチファイルをSend Toフォルダにおいて 送られてきた画像データをカウントアップしていきながら名前を id.bmp変えていきたいのですが、 idをカウントアップさせたいのですが方法がわかりません。 どうすればカウントアップされるのでしょうか?

みんなの回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

遅延展開を使うようにすれば出来るようです バッチファイルの起動を cmd /v /c バッチ名.bat といった具合にします if exist %1 for %%i in (*.bmp) do ( set id+=1 echo %id% ) を if exist %1 for %%i in (*.bmp) do ( set /a id+=1 echo !id! ) といった具合にしてみてください

onnobu
質問者

お礼

お返事ありがとうございます。 遅延展開を使用するとSend Toから送られてきたパスを 取得する方法がわからなかったので 別にリネーム用のプログラムを作成する方法で回避いたしました。

  • dummyplug
  • ベストアンサー率58% (134/230)
回答No.1

cmd.exeの機能は結構OSによって変わるので、使っているOS(MS Windowsだとは思いますが、XP(SP3)とか2000とか)書いた方がいいですよ。 たぶんXPからじゃないかと思いますが、setコマンドに/aオプションが追加されています。セットする値を数式として評価してくれます。ですので、 set /a id=%id%+1 のようにすれば環境変数idの(数値としてみたときの)値を一つ増やすことができます。

onnobu
質問者

お礼

お返事ありがとうございます。 これからはOS環境を書くようにいたします。 教えていただいた方法を試してみましたが for文の中ではidは+1をされずに for文をでてから足された数を出力していたので、 別にリネーム用のプログラムを作成する方法で回避いたしました。

関連するQ&A

  • バッチファイルのIF分岐にて任意の文字を入力しておきたい

    バッチファイルのIF分岐にて任意の文字を入力しておきたいです。 下記のようなバッチファイルを作成し、「1」を入力すると「:AAA」のラベル に飛びメッセージが表示されるようにしています。 最初から「1」が自動で入力されているような状況にすることはできますでしょうか? 「set NUM=1」にしておけば、Enterを押すだけで「1」が入力されている のはわかったのですが、DOS上に「1」が表示されていません。 入力待ちの際に「1」が入力されている状況を作りたいと思っています。 Windows XP 32bitで動作させたいです。 お手数ですが知識をお借りしたいと思います。 もしくは「ここを見ろ」というのをご教授ください。 -------------------------------------------------- @echo off :LOOP set NUM= cls echo. echo "1. AAA" echo "2. BBB" echo "0. 終了" echo. echo. set /p NUM="番号を入力してください >" if %NUM% == 1 goto :AAA if %NUM% == 2 goto :BBB if %NUM% == 0 goto :owari echo 番号がありません echo. pause goto :LOOP :AAA echo "AAAです" echo. pause goto :LOOP :BBB echo "BBBです" echo. pause goto :LOOP :owari echo 終了します echo. pause goto :eof --------------------------------------------------

  • バッチファイルでの%を含むファイル名の取得

    以下はEドライブを走査してフォルダごとのjpgやpngなどのファイルの数を全て表示するバッチ処理ですが。基本的に上手く動きますが%を含むファイル名、フォルダ名に当たると上手く動きません。どうしたらいいでしょうか?”ファイル名、フォルダ名に%を使うな”という回答以外でお願いします。 @echo off pushd E:\ for /f "delims=" %%j in ('dir /b /s /a:d') do call :sub "%%j" exit /b :sub echo /////////////////////////////////////////////////////////////////////////// for /f "delims=" %%x in ('dir /b %1 ^| find /c ".jpg"') do call :jpg %%x for /f "delims=" %%x in ('dir /b %1 ^| find /c ".JPG"') do call :jpg2 %%x for /f "delims=" %%x in ('dir /b %1 ^| find /c ".png"') do call :png %%x for /f "delims=" %%x in ('dir /b %1 ^| find /c ".bmp"') do call :bmp %%x echo %1 echo jpg %jpg_c% echo png %png_c% echo bmp %bmp_c% echo JPG %jpg2_c% goto :EOF :jpg set jpg_c=%1 :echo %1 goto:EOF :jpg2 set jpg2_c=%1 :echo %1 goto:EOF :png set png_c=%1 :echo %1 goto:EOF :bmp set bmp_c=%1 :echo %1 goto:EOF :all set all_c=%1 :echo %1 goto:EOF

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

    バッチ処理でPerlを処理させたいのですが、どうすればいいのかわからず困っています。 sedだと・・  echo off  if "%1"=="" goto end    echo on     sed -g -f moji1.sed %1.mot > %1.tm1    echo off  :end と書くと処理してくれるのですが、Perlだとどう書けばいいんですかね。どなたかわかる方教えて下さい

  • バッチファイルのループ処理の質問です。

    バッチファイルのループ処理の質問です。 バッチファイルでサーバにセキュリティーパッチをインストールしたいのですが、 一件しかインストール出来ません。 ---------------------------------------------- @echo on setlocal set SrcDir=\\192.168.11.5\temp\ for %%i in (%SrcDir%*.msu) do ( %%i /quiet /norestart >>Instarll_log.log IF ERRORLEVEL 3010 GOTO ReqReboot IF ERRORLEVEL 1 GOTO NG IF ERRORLEVEL 0 GOTO OK :NG echo 異常 >> kekka.log echo ERRORLEVELは%ERRORLEVEL%です。 >> kekka.log :OK echo 正常 > kekka.log echo ERRORLEVELは%ERRORLEVEL%です。 >> kekka.log :ReqReboot echo 再起動が必要 >> kekka.log echo ERRORLEVELは%ERRORLEVEL%です。 >> kekka.log ) goto END :END endlocal ---------------------------------------------- 続けて次のファイルをインストールするにはどうすれば良いか 教えてください。

  • バッチファイルで悩んでいます。

    プログラミング初心者です。 御教授の程、宜しくお願いします。 以下のプログラムは 1.ユーザーからフォルダをドラッグ・アンド・ドロップしてもらう。 2.ユーザーに日付を入力してもらう(yyyymmdd方式) 3.ユーザーに下記の2つから選んでもらう。   1.入力した日付よりも前に更新されたファイルを表示   2.入力した日付よりも後に更新されたファイルを表示 4.ユーザーから受け付けた条件で、サブフォルダも含めて   コマンドプロンプト上に    更新日時 ファイルへのパス   を表示する。 ------------------------------------------- list.bat echo off set /P YYYYMMDD=日付を入力してください(YYYYMMDD): :loop echo ---------------------------------------------------- echo 入力した日付よりも前に更新されたファイルを表示 - [1] echo 入力した日付よりも後に更新されたファイルを表示 - [2] echo ---------------------------------------------------- set /P chk= 1 か 2 を入力してください: if not defined chk goto loop if %chk% EQU 1 set op=LSS&goto listup if %chk% EQU 2 set op=GTR&goto listup goto loop :listup echo. for /R %1 %%F in ( *.* ) do call :sub "%%~fnxF" %%~tF cmd /k :sub set fdate=%2 set fdate=%fdate:/=% if %fdate% %op% %YYYYMMDD% echo %2 %3 %1 goto :EOF このプログラムに関しまして、 4.ユーザーから受け付けた条件で、サブフォルダも含めて   コマンドプロンプト上に    更新日時 ファイルへのパス   を表示する。 をコマンドプロンプト上にではなく、エクセルファイル上に変更したいです。 教えて頂きますと助かります。 それでは、宜しくお願い致します。

  • バッチファイル goto前の表示のクリア

    バッチファイルでgoto前の表示のクリアしたいです。 どうしたらよいでしょうか? ●記述: :Select echo 選択_______ echo 1 --- 1です echo 2 --- 2です echo 0 --- 終了 set /P Res="入力 >>>>>>> " if "%Res%"=="1" goto 1 if "%Res%"=="2" goto 2 if "%Res%"=="0" goto END goto Select :1 echo. echo 111 echo. goto SELECT :2 echo. echo 222 goto SELECT ●結果: 選択_______ 1 --- 1です 2 --- 2です 0 --- 終了 入力 >>>>>>>1 111 選択_______ 1 --- 1です 2 --- 2です 0 --- 終了 入力 >>>>>>> ●入力後表示したい文字列(以下だけ): 選択_______ 1 --- 1です 2 --- 2です 0 --- 終了 入力 >>>>>>>

  • バッチファイルでのif文分岐

    ドラッグ・アンド・ドロップ(以下、D&D)によるバッチファイルを作成する際にダブルクリックでバッチファイルを開こうとする行為のフェールセーフを考えています。 現状では、以下のバッチファイルにファイルやフォルダをD&Dするとif文の分岐の箇所で終了してしまいます。 有識の方の教授をお願いします。 /* ↓↓ 以下コードです ↓↓*/ @echo off if "%1"=="" goto error rem D&Dされたパスを表示 echo %1 echo 終了しました。 goto end :error echo このファイルはダブルクリック形式ではありません。 echo ファイルやフォルダをD^&Dして下さい。 pause exit :end exit /* ↑↑ ここまで ↑↑ */ 開発環境 OS:WindowsXP 以上、よろしくお願いします。

  • こちらのバッチファイルの改修をお願いしたいです。

    過去に別のIDで質問したのですがパス紛失してしまったので・・・ http://okwave.jp/qa/q6858298.html?&status=true&errcode=&msg=&qid=6858298 改修の内容としては下記2点になります。 【○○】 [△△] □□.txt (1)○○や△△の部分にドット等の記号があるとそのファイルはスルーしてしまうので、スルーせずに動くように。 (2)もし、同じファイル名があったら上書きせずに「C:\被り」のフォルダに振り分ける。 どなたかお手すきでしたらよろしくお願い致します。 ----------- echo off set from=C:\振り分け set to=C:\整理済 for /f "delims=" %%a in ( 'dir /b "%from%\*.txt"' ) do call :sub "%%a" echo 振り分け終了しました exit /b :sub for /f "tokens=1 delims=]" %%f in ( "%~n1" ) do set findname=%%f] :FolderA if exist "%to%\A\%findname%*" move "%from%\%~nx1" "%to%\A\"&&goto :EOF :FolderB if exist "%to%\B\%findname%*" move "%from%\%~nx1" "%to%\B\"&&goto :EOF :FolderC if exist "%to%\C\%findname%*" move "%from%\%~nx1" "%to%\C\" goto :EOF

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

    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

  • IEのバージョンチェックとバージョンアップでBATの簡略化

    IEのバージョンチェックとバージョンアップでBATの簡略化 タイトルの通りで、なんとか仕事で使っている端末のバージョンチェックと 条件に合わない場合、バージョンアップするBATを作りました。 目的の作業は出来ますが、まだまだ勉強不足で簡略化するとしたら どのように短く出来ますか? お時間あるかたいましたらご教授下さい。 @echo off CLS echo IE ver6.0 の場合、IE7.0にアップグレードされます。 echo 実行続けますか? echo 中止:CTRL + C pause rem マウント net use T: \\server\setup$\microsoft\IE echo IEバージョン情報出力 REG QUERY "HKLM\SOFTWARE\Microsoft\Internet Explorer" /v "version" > %temp%\IEverchek.log :XP_SP2 C: CD %temp% find IEverchek.log "6.0.2900.2180" if %ERRORLEVEL% == 0 GOTO verup_start if %ERRORLEVEL% == 1 GOTO XP_SP3 :XP_SP3 C: CD %temp% find IEverchek.log "6.0.2900.5512" if %ERRORLEVEL% == 0 GOTO verup_start if %ERRORLEVEL% == 1 GOTO IE7 :IE7 C: CD %temp% find IEverchek.log "7.0.5730" set message=環境は「IE 7.0 」の環境でした。 if %ERRORLEVEL% == 0 GOTO END if %ERRORLEVEL% == 1 GOTO IE8 :IE8 C: CD %temp% find IEverchek.log "8.0.6001" set message=環境は「IE 8.0 」の環境でした。 if %ERRORLEVEL% == 0 GOTO END if %ERRORLEVEL% == 1 GOTO Error :verup_start for /f "tokens=2 delims=[" %%i in ('ver') do set ver1=%%i for /f "tokens=2" %%i in ('echo %ver1%') do set ver2=%%i for /f "tokens=1-2 delims=. " %%i in ( 'echo %ver2%' ) do set OSVER=%%i.%%j rem -------%OSVER% Win2k=5.00 XP=5.1 XPx64=5.2----------- set OS_TYPE="" if "%OSVER%" == "5.1" set OS_TYPE=32 if "%OSVER%" == "5.2" set OS_TYPE=64 echo installing IE7.0 %OS_TYPE%bit..... echo please wait..... T: start /wait "" "IE7-WindowsXP-x%OS_TYPE%.exe" /passive /forcerestart /update-no goto verupend :Error echo Internet Explorer のレジストリキーが見つかりません。 echo 必要なら手動でインストールしてね。 pause exit :END echo. echo チェックOK echo %message%終了します。 echo. pause exit :verupend echo. echo バージョンアップしました echo. pause exit

専門家に質問してみよう