出産前後の痔にはご注意!

: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をカウントアップさせたいのですが方法がわかりません。
どうすればカウントアップされるのでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (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!
)
といった具合にしてみてください
    • good
    • 1
この回答へのお礼

お返事ありがとうございます。

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

お礼日時:2008/05/19 15:54

cmd.exeの機能は結構OSによって変わるので、使っているOS(MS Windowsだとは思いますが、XP(SP3)とか2000とか)書いた方がいいですよ。



たぶんXPからじゃないかと思いますが、setコマンドに/aオプションが追加されています。セットする値を数式として評価してくれます。ですので、

set /a id=%id%+1
のようにすれば環境変数idの(数値としてみたときの)値を一つ増やすことができます。
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。
これからはOS環境を書くようにいたします。

教えていただいた方法を試してみましたが
for文の中ではidは+1をされずに
for文をでてから足された数を出力していたので、
別にリネーム用のプログラムを作成する方法で回避いたしました。

お礼日時:2008/05/19 15:51

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q【DOSコマンド】for文の中で変数をカウントアップしたい。

【DOSコマンド】for文の中で変数をカウントアップしたい。


【現在のソース】
for %%i in (\\hoge\hoge\*.*) do (
 echo %%i,%%~ziバイト >> log.txt
 type nul > %%i
)

【現在の処理内容】
とあるフォルダの中になる全ファイルのパス、サイズをログファイルに書き出し、、
全ファイルを0バイトにクリアする。


【やりたいこと】
ログファイルにファイルパス、サイズを書き出す際に連番を出力したい。

例)
1,\\hoge\hoge\aaa.txt
2,\\hoge\hoge\ddd.txt
3,\\hoge\hoge\123.txt

【現在までに試みた方法】
for文の外で「set n=0」。
for文の中で「set /a n=%n%+1」「echo %%n」

【環境】
XP Pro Version2002 SP2


 DOSコマンドの変数に関する理解がいまひとつで、よくわかりません。
 ご存知の方がいらっしゃいましたらご教示いただけると幸いです。

Aベストアンサー

(-.-;)

Qバッチでテキストファイルから任意の行のみ取得したい

batファイルを作成していて、
txtから特定の行のみをとりだし、変数に入れたいです。
どうもよくわからないので質問したいと思います。
まず以下の様なテキストファイルがあります。
-------------------
111
222
333
-------------------
実際の値、行数は違いますが、こんな感じに文字列が複数行並んでいます。

行いたい動作は、
-----------------------------------------
1.テキストファイルの1行目を変数Textに入れる(set Text=111)
2.変数Textを使用し色々処理をする
3.テキストファイルの2行目を変数Textに入れる(set Text=222)
4.変数Textを使用し色々処理をする
-----------------------------------------
コレを繰り返します。
2と4は同じ動作ですので、行数のカウンタを設定しループさせる予定です。
n行目を全て取り出す方法がわかれば行けると思うのですが、
どうも見つかりません。ご存知の方がいればお教え願いたいと思います。

batファイルを作成していて、
txtから特定の行のみをとりだし、変数に入れたいです。
どうもよくわからないので質問したいと思います。
まず以下の様なテキストファイルがあります。
-------------------
111
222
333
-------------------
実際の値、行数は違いますが、こんな感じに文字列が複数行並んでいます。

行いたい動作は、
-----------------------------------------
1.テキストファイルの1行目を変数Textに入れる(set Text=111)
2.変数Textを使用し色々処理をする
3.テキストファイルの2行目を変数T...続きを読む

Aベストアンサー

No3ですが、たぶん提示したスクリプトを見ると、ある事に気がつくはず?

findstr /n /r "." a.txt | findstr /r "^3:"

で3行目を表示してくれます。え!? それだけ。そうなんです

ただ、あと、先頭の”3:” をどうやって切り離すか? と言う問題にぶつかる。さらにファイルに先頭に”3:”があった場合、どうするのか? さらに、findstr の正規表現の動作が??? 表示すれるのはいいが、変数にどうやってセットするのか?

となる。結局 for 文を使いまわす事になります。

まあ、適当に改変して、上記の問題を解決してください。

Qバッチファイルでフォルダ内のファイル数をカウントしたい

こんにちは。よろしくお願いします。

WindowsServer2003環境で、
バッチコマンドで以下のことをしたいと思っています。

(1)特定のフォルダに存在するファイル数をカウント
(2)既定の数あれば何もせず終了、数に相違があればエラーを返す。
(エラーはエラーレベルとSEND MESSAGEの出力)
既定の数は常に決まった数です。

やりたいことは簡単なのですが、
DOSコマンドだけだと方法が思いつきません。。。
VBScriptなどを使わないと無理でしょうか。。。

Aベストアンサー

WindowsServer2003の環境がないで、XPのコマンドプロンプトで作ってみました^^;
参考になればいいですが・・・

規定の数はとりあえず10としています。
カレントディレクトリの(ディレクトリ含む)ファイルをカウントしています。

@echo off

set i=0
for /D %%f in (*) do set /a i=i+1

if %i% lss 10 goto Short:

echo ファイルが%i%個あります、
echo ファイルが10個以上のときの処理を行います。

goto Exit:
:Short

echo ファイルが%i%個しかありません、
echo ファイルが10個未満のときの処理を行います。

:Exit

Qバッチ処理でファイルの中身を変数に入れるやり方

あるファイルの中には1行の文字列があります。
このファイルをバッチで読み取り、変数に設定したいです。

例:
test.txt
abcacbacbacbacbacbacbacbacb

test,bat
set DATA=[test.txtを読み込んだ値]

よろしくお願い致します。

Aベストアンサー

これですね。

参考URL:http://www.upken.jp/kb/dqvgHNRUxwFDkmtoqEwfXHUjDrevNv.html

Qbatである文字列内に特定の文字列が含まれているか確認したい

batファイルの中である変数「abc」の中に「test」という文字が含まれていたら○○を行なうという分岐を作成したいのですが、どのように行なえばよいのでしょうか?

そのまま、ずばりのお答えお待ちしております。

よろしくお願い致します。

Aベストアンサー

大文字小文字を区別しなくていいなら、

if not "%abc:test=%" == "%abc%" echo 含まれていた

区別するなら、

echo %abc% | find "test" >NUL
if not ERRORLEVEL 1 echo 含まれていた

QDOSバッチで文字数カウント

DOSバッチでファイル内の文字数をカウントする方法をご存じの方はいませんでしょうか??
UNIXでいうところの「wc -c」です。
使用OSは、Windows2003ServerとWindowsXPです。
ユーティリティーなどは導入できず、DOSバッチで実現しなくてはなりません。
どなたかご助力をお願いいたします。

Aベストアンサー

> ユーティリティーなどは導入できず、

こういう場合、導入出来ないって事に対して明確な理由付けが無い場合が多く、単に「何となくセキュリティが」などの理由のナンセンスな条件である場合が多いです。

DOSの外部コマンド、標準ですとfcコマンド、findコマンドなども、
・置き場所がc:\windows配下
・最初からOSに付属する
以外は、他のユーティリティーと呼ばれているものと何ら変わりません。

ユーティリティーでない「wcコマンド」を.batと同じ場所に配置して実行とか。
(言い方が違うだけで、やる事は一緒。)

--
> DOSバッチで実現しなければならいという条件

「何故なのか?」と突き詰めれば必ずアラが出ますので、条件を撤回、変更させる方が合理的。

Qバッチファイルで昨日の日付を取得

すみません、どなたか教えて下さい。

バッチファイルの記述で、昨日の日付を取得する方法を教えて下さい。
今日の日付は下記のように取得しています。

rem 日時変数の取得
for /f "tokens=1-3 delims=/" %%a in ('echo %date:~-10%') do (set YYYYMMDD=%%a%%b%%c
)

Aベストアンサー

:: ----- prevdate.bat はじめ -----
@echo off
::今日の日付を取得
set yy=%date:~0,4%
set mm=%date:~5,2%
set dd=%date:~8,2%
echo 今日は、%yy%年%mm%月%dd%日です。

::1日前の日付を計算する
set /a dd=%dd%-1
set dd=00%dd%
set dd=%dd:~-2%
set /a ymod=%yy% %% 4
if %dd%==00 (
if %mm%==01 (set mm=12&& set dd=31&& set /a yy=%yy%-1)
if %mm%==02 (set mm=01&& set dd=31)
if %mm%==03 (set mm=02&& set dd=28&& if %ymod%==0 (set dd=29))
if %mm%==04 (set mm=03&& set dd=31)
if %mm%==05 (set mm=04&& set dd=30)
if %mm%==06 (set mm=05&& set dd=31)
if %mm%==07 (set mm=06&& set dd=30)
if %mm%==08 (set mm=07&& set dd=31)
if %mm%==09 (set mm=08&& set dd=31)
if %mm%==10 (set mm=09&& set dd=30)
if %mm%==11 (set mm=10&& set dd=31)
if %mm%==12 (set mm=11&& set dd=30)
)
echo 昨日は、%yy%年%mm%月%dd%日です。

echo.
pause
:: ----- prevdate.bat おわり -----

参考URL:http://www.atmarkit.co.jp/fwin2k/win2ktips/419batchdate/batchdate.html

:: ----- prevdate.bat はじめ -----
@echo off
::今日の日付を取得
set yy=%date:~0,4%
set mm=%date:~5,2%
set dd=%date:~8,2%
echo 今日は、%yy%年%mm%月%dd%日です。

::1日前の日付を計算する
set /a dd=%dd%-1
set dd=00%dd%
set dd=%dd:~-2%
set /a ymod=%yy% %% 4
if %dd%==00 (
if %mm%==01 (set mm=12&& set dd=31&& set /a yy=%yy%-1)
if %mm%==02 (set mm=01&& set dd=31)
if %mm%==03 (set mm=02&& set dd=28&& if %ymod%==0 (set dd=29))
if %mm%==04 (set mm=03&& set dd=31)
if...続きを読む

Qbatファイル処理でのテキストファイルの内容を編集

batファイル処理のみにてテキストファイルの内容を編集する事は可能でしょうか。

例えば
aaa=0
bbb=0
ccc=0
ddd=0

という内容のテキストファイルが存在し、batファイルにて
aaa=0
bbb=1
ccc=1
ddd=0

というように、指定行の内容を変更させたいのですが、この処理をbatファイルのみで行う事は可能でしょうか。

宜しくお願いします。

Aベストアンサー

こんな感じですか?
パスは適切に設定してください
----- a.bat -----
cd c:\foo\bar
if exist test.bak goto skip
copy test.ini test.bak
cscript a:\hogehoge\replace.vbs test.ini
:skip
----- a.bat ここまで -----

----- replace.vbs -----
Const ForReading = 1
Const ForWriting = 2

strFileName = Wscript.Arguments(0)

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(strFileName, ForReading)

strText = objFile.ReadAll
objFile.Close
strText = Replace(strText, "bbb=0", "bbb=1")
strText = Replace(strText, "ccc=0", "ccc=1")

Set objFile = objFSO.OpenTextFile(strFileName, ForWriting)
objFile.WriteLine strText
objFile.Close
----- replace.vbs ここまで -----

参考URL:http://www.microsoft.com/japan/technet/scriptcenter/resources/qanda/feb05/hey0208.mspx

こんな感じですか?
パスは適切に設定してください
----- a.bat -----
cd c:\foo\bar
if exist test.bak goto skip
copy test.ini test.bak
cscript a:\hogehoge\replace.vbs test.ini
:skip
----- a.bat ここまで -----

----- replace.vbs -----
Const ForReading = 1
Const ForWriting = 2

strFileName = Wscript.Arguments(0)

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(strFileName, ForReading)

strText = objFile.ReadAll
obj...続きを読む

Qtxtファイルから特定の文字列が書かれた行だけを取得や削除するソフト

txtファイルで
特定の文字列が書かれた行だけを
取得や削除するソフトや方法を探しています。
フリーで無いなら、シェアウェアなどになってもかまいません

例えば
(12)と書かれた文字列がある行だけを抜きだしたり
逆に(12)と書かれた文字列がある行だけを削除したり
したいです。

そのソフトの操作方法も教えてくださると助かります。

では、回答を心よりお待ちしております。

Aベストアンサー

NoEditor
http://www.vector.co.jp/soft/winnt/writing/se300436.html

というフリーのテキストエディタをインストールすると、YokkaGrepというソフトがセットでインストールされます。

検索ディレクトリ、検索文字列(正規表現も可)、ファイル名(ワイルドカードで複数のファイルの検索も可)などをセットして検索できます。

検索結果をテキストファイルやcsvファイルに出力することや、検索文字列を含む行を削除などの機能もあります。

grepで検索すると、他にも似たような機能のソフトがあると思いますが、NoEditor付属のYokkaGrepは、お勧めです。

QXCOPYで指定したフォルダとファイルをコピーしたい

C:\AAAフォルダとC:\AAA以下のファイルをコピーしたくて、
XCOPY C:\AAA D:\BBB /E
とすると、コピー先のD:\BBBにはAAAフォルダにあるファイルはコピーされるのですが、AAAフォルダそのものはコピーされません。
XCOPY C:\ D:\BBB /E
とすればコピーできるのですが、そうするとC:\のほかのフォルダもコピーされてしまいます。
EXCLUDEオプションを使うには指定するファイルが多いため、あまり使いたくありません。(コピーする前にMDでコピー先にAAAフォルダを作成するのもなるべく避けたい)
知っている方がいらしたら教えて下さい。

Aベストアンサー

xcopy /e C:\AAA D:\BBB\AAA
複数ファイルのコピーでコピー先が存在しないとき、ファイル名と見なすかディレクトリ名と見なすか聞いてきます。

応答を聞かれるのが嫌なら
echo d | xcopy /e C:\AAA D:\BBB\AAA
でいいはず。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング