【.cmd】 バッチファイルスクリプト %3 【.bat】 at TECH
[2ch|▼Menu]
1:デフォルトの名無しさん
08/08/04 23:27:23
拡張子が .cmd または .bat のバッチファイルのスクリプティング(プログラミング)に関わる
質問,テクニック(JScript,Perl等の埋め込みなど含む),関連情報のためのスレです。

※何でも無理矢理バッチでやろうとせず、WSH等の使用も検討しましょう。

【前スレ】 (関連スレは>>2)
【.cmd】 バッチファイルスクリプト %2 【.bat】
スレリンク(tech板)



2:デフォルトの名無しさん
08/08/04 23:27:53
【関連スレ】
DOSでプログラミング
スレリンク(tech板)
HTAをもっと流行らせる計画
スレリンク(tech板)
WSH(・∀・)スレッド! Part 3
スレリンク(tech板)
Windows板:お前ら、wsh使ってますか? Part7
スレリンク(win板)
Windows板:Windows PowerShell (正式版リリース)1.0
スレリンク(win板)
Windows板:初心者〜管理者まで必読!コマンドライン(DOS Pt.7)
スレリンク(win板)
Windows板:MS-DOS・Win3.1総合スレッド2.01
スレリンク(win板)
OS板:DOS全般を語るスレ 2
スレリンク(os板)
OS板:■★▲DOSはまだ現役! Drive.B:
スレリンク(os板)
昔のPC板:MS-DOS総合スレッド 2
スレリンク(i4004板)



3:デフォルトの名無しさん
08/08/04 23:35:28
**ご注意**

Windows板の「初心者〜管理者まで必読!コマンドライン(DOS Pt.7)」スレや
PC初心者板のURLを貼りたがる人は、運営の人にも認定された荒しですので
その人に指示に従う必要はありません。

4:デフォルトの名無しさん
08/08/04 23:51:14
937 名前:デフォルトの名無しさん[sage] 投稿日:2008/07/30(水) 22:50:02
>>935
マジレス禁止。
昔からあからさまにBATと関係ない話題が出てくるのは誘導厨の自演。

スルーするか、気づかないフリして力技で解決するかのどちらかが良いと思われ

5:デフォルトの名無しさん
08/08/05 01:30:39
echo 乙 >1

6:デフォルトの名無しさん
08/08/05 12:34:05
あるファイルの中に、削除したいファイル&ディレクトリの一覧があって、
一覧のファイルを削除するバッチファイルの書き方を教えてください。

[aaa.txtの中身例]
c:\a.txt
c:\Program Files\a
d:\a.bat\

rmdir /Q /S < aaa.txt ← こーんな感じで消せると思っていた・・
rm -rf < aaa.txt     ←UNIXだとこんな感じで消せると思っていた・・・(これもダメ)

独自努力2時間、検索2時間がんばったけどわかりませんOrz
もし分かれば、UNIXでのシェルのスクリプトでの方法も教えていただけば助かりますOrz

7:バッチはしらね
08/08/05 12:41:48
>>6
xargs rm -rf < aaa.txt

8:デフォルトの名無しさん
08/08/05 14:00:07
for /f "delims=" %i in (aaa.txt) do if exist "%~i" (rd /s/q "%~i" || del "%~i")

9:デフォルトの名無しさん
08/08/05 14:11:02
>6
その程度のレベルの質問なら各OSの板で質問しろ

UNIX
URLリンク(pc11.2ch.net)

Linux
URLリンク(pc11.2ch.net)

Windows
URLリンク(pc11.2ch.net)

Windows板:初心者〜管理者まで必読!コマンドライン(DOS Pt.7)
スレリンク(win板)

10:デフォルトの名無しさん
08/08/05 14:41:03
>>6-7
ありがとうございます!

>>9
ごめんなさい、1行で済むとは思ってませんでした。。。
次からそうしますO-rz

11:デフォルトの名無しさん
08/08/05 14:42:01
あああああ

そしてアンカー違い・・・
吊ってきます('A`)シ

12:デフォルトの名無しさん
08/08/05 19:23:37
バッチに限らない質問なんですが、
if文で、構造上絶対ここに分岐される事は無いという場所には、
どうしておけば良いですか?
今のところ、適当なエラーメッセージを表示させるようにしてますが、
思い切って省略してしまった方が良いんでしょうか。

13:デフォルトの名無しさん
08/08/05 19:38:36
予防的プログラミングの観点からは、エラーになるようにしておいたほうが良いだろうね。

14:デフォルトの名無しさん
08/08/05 21:35:24
早速>>9で基地外嵐が来たか

15:デフォルトの名無しさん
08/08/05 23:46:20
>>12
こんな感じ?

SET bRet=TRUE
IF %bRet%==FALSE (
    echo !ERROR!
    goto :EOF
)

まぁこれならいらんから質問なんかしないか・・・

16:デフォルトの名無しさん
08/08/09 00:41:58
わざわざWSHやPerlでやんなくてもバッチファイルである程度出来てしまうし、
Windowsならbatの方がスマートになる場合が多いのでbatは好きです。


17:デフォルトの名無しさん
08/08/09 00:44:11
俺のコマンドプロンプトの初期化スクリプトです。
みなさんどんな初期化スクリプトつかってますか?
@echo off
getconcolor
@if "%ERRORLEVEL%" == "0" set col=7
set col=%ERRORLEVEL%
setconcolor 1 8
rem プロンプト設定
prompt ‡$s%username%@[$t]$s$n:$m$g$s
echo // 日付:%date% 時刻:%time%
doskey cat=type $*
doskey his=doskey /history
doskey rm=del $*
rem doskey ls=dir/w $*
doskey b=bld
doskey c=cls
doskey d=cd
doskey e=exit
set LS_OPTIONS=-bhAC --color=auto --recent --streams
doskey ll=l -al $*
doskey lx=l -SsortX -al $*
doskey lstree= l -SsortX -R -al $*
doskey s=l -al $*
doskey clean=deltempexec
doskey reboot=rebootafter
call vc
call setbcc
call setcygwin
call setperl
call setdoxygen
call setvim
setconcolor 0 %col%

18:デフォルトの名無しさん
08/08/09 10:19:15
PowerShellは大仰だし、WSHは使いにくい。
なので、cmd.exeも地味に改良継続してほすい。
awkとかPerl4位の規模と機能をきれいに実装してくれ。

19:デフォルトの名無しさん
08/08/09 12:24:49
WSH使いにくいか?

20:デフォルトの名無しさん
08/08/09 15:41:44
@絵著 おふ
Set FILENAME=execfor
Set LOGFILE=%FILENAME%.log
Set CMDFILE=%FILENAME%.txt

echo -------------------------------------------------------------------------------
echo 処理内容(%CMDFILE%)
type %CMDFILE%
echo -------------------------------------------------------------------------------
@echo 上記処理を開始します.
@echo よろしいですか?(y/n)
Set /p ret=

If %ret%==y goto LOOP
goto END
:LOOP
For /F "usebackq eol=; tokens=1,2 delims=," %%i in (%CMDFILE%) DO %%i %%j 2>&1 | tee -a %LOGFILE%

:END
@echo 処理が完了しました。


21:デフォルトの名無しさん
08/08/09 15:43:44
Set LOGFILE=setallacl.log
Set CMDFILE=setallacl.txt

echo -------------------------------------------------------------------------------
echo 処理内容(%CMDFILE%)
type %CMDFILE%
echo -------------------------------------------------------------------------------
@echo 上記処理を開始します.
@echo よろしいですか?(y/n)
Set /p ret=

If %ret%==y goto EXECLOOP
goto END
:EXECLOOP
For /F "usebackq eol=; tokens=1,2 delims=," %%i in (%CMDFILE%) DO %%i %%j 2>&1 | tee -a %LOGFILE%

:END
@echo 処理が完了しました。

setallacl.txt
cacls c:\dos /T /C /E /R,me Administrator Administrators Everyone Users
cacls c:\dos /T /C /E /R,"POWER USERS"
cacls c:\dos /T /C /E /R,"CREATOR OWNER"
cacls c:\dos /T /C /E /G,Administrators:F SYSTEM:F me:F Everyone:R Users:R "CREATOR OWNER":F "POWER USERS":R


22:デフォルトの名無しさん
08/08/09 15:47:25
@echo off
set rootdir=C:
set doxydir=%~s1\
echo %doxydir%
set doxyfile=%~2
if "%doxyfile%" == "" set doxyfile=%defdxy%
echo %doxyfile%
if "%doxydir%" == "\" set doxydir=%defdir%
cd
cd /d %doxydir%
cd
echo nkfで文字コードをSHIFT-JISからUTF-8に変換開始
nkf -w -Lw --overwrite %doxydir%*.frm
nkf -w -Lw --overwrite %doxydir%*.cls
nkf -w -Lw --overwrite %doxydir%*.bas
echo nkfで文字コードをSHIFT-JISからUTF-8に変換終了
rem pause

echo doxygen処理開始
rem SET PATH=%path%;%doxydir%
echo %doxyfile%
setconcolor 1 3
doxygen %doxyfile%
setconcolor 0

%doxydir%\html\index.html

echo nkfで文字コードをSHIFT-JISに戻す
nkf -s -Lw --overwrite *.frm
nkf -s -Lw --overwrite *.bas
nkf -s -Lw --overwrite *.cls


23:デフォルトの名無しさん
08/08/09 15:48:42
@echo off
rem set temp=%userprofile%\Local Settings\Temp
set tempusr=%temp%
set tempwin=%systemroot%\Temp
set temphome=%homedrive%\Temp

echo -------------------------------------------------------------------------------
echo %tempusr%の全ファイル・フォルダ削除
erase /f/s/q %tempusr%\*
rmdir /s/q %tempusr%\

echo -------------------------------------------------------------------------------
echo %tempwin%の全ファイル・フォルダ削除
erase /f/s/q %tempwin%\*
rmdir /s/q %tempwin%\

echo -------------------------------------------------------------------------------
echo %temphome%の全ファイル・フォルダ削除
erase /f/s/q %temphome%\*
rmdir /s/q %temphome%\

echo -------------------------------------------------------------------------------
echo ディレクトリ復元
md %tempusr%
md %tempwin%
md %temphome%
echo 処理完了-----------------------------------------------------------------------

rem pause



24:デフォルトの名無しさん
08/08/09 15:50:54
バッチを貼る人は何をするものなのか説明も書いてください。

25:デフォルトの名無しさん
08/08/09 15:55:13
>>20
FILENAMEに書かれたコマンドを連続実行する

>>21
caclsを連続実行する

>>22
doxygenでVBのコードを処理する

>>23
tempディレクトリをクリーンする

以上

26:デフォルトの名無しさん
08/08/09 17:00:31
板を勘違いしているのかと思うほどの内容のなさに笑えた。

27:デフォルトの名無しさん
08/08/09 17:04:47
スレ違いと言うしか脳の無い奴よりはるかにましだろう。

28:デフォルトの名無しさん
08/08/09 18:52:15
>>20
| tee -a
なんてふつうやらんだろ?

@echo よろしいですか?(y/n)
Set /p ret=

Set /p ret=よろしいですか?(y/n)
だろ?

29:デフォルトの名無しさん
08/08/09 21:45:08
>>26
能なしもなんか貼ってよ

30:デフォルトの名無しさん
08/08/09 21:48:36
>>23は call を使ってもっと簡潔にした方がいいな

31:デフォルトの名無しさん
08/08/09 22:09:00
フォルダ削除しちゃうとaclとか不味くない?

32:デフォルトの名無しさん
08/08/10 00:23:22
>>28
choice><

33:デフォルトの名無しさん
08/08/10 00:38:04
スキルの低い人間しかいないなこのスレw

34:デフォルトの名無しさん
08/08/10 00:56:58
>>33
スキルの高い人もなんか貼ってけよ。








どうせ別スレでも1行レスしかしないんだろ?
クズ低学歴は死ねよ?

35:33
08/08/10 01:02:33
なんかって何?具体的に言って

36:デフォルトの名無しさん
08/08/10 01:04:08
>>35
お前は来なくてよい。

37:デフォルトの名無しさん
08/08/10 01:08:22
>>20-23みたいな糞バッチ押し付けられるよりはまし

38:デフォルトの名無しさん
08/08/10 01:11:09
スレを荒らす脳しかない奴より>>20-23のほうがはるかにまし

39:デフォルトの名無しさん
08/08/10 01:16:27
だな。どうせGOMPlayerとかWinnyとか2ch専ブラくらいしかソフト使ってない奴らばっかりなんだろ?
昔のプログラム板は違ったのにな。今はいろんなコミュニティがあるし、海外のコミュニティサイト使え
ば高度な情報は手に入るから、ここに来る奴はコーディングも英語もまともにできない奴らばっかり
になってしまったな。

40:デフォルトの名無しさん
08/08/10 01:17:31
英語分からないです><
とか逝ってる職業PG・SE涙目w


41:デフォルトの名無しさん
08/08/10 03:47:17
>>39
ん?自己紹介かw

42:デフォルトの名無しさん
08/08/10 03:53:58
>>18
俺もそう思ってたんだけど、
今は無いコマンドはベクターで探せばいいと思って

43:デフォルトの名無しさん
08/08/10 03:57:19
>33-34
バッチでスキル高いとか低いとか・・・・
まぁ確かにあるんだが、所詮スクリプトだろ


44:デフォルトの名無しさん
08/08/10 04:01:42
>>40
さすがにISPの時はなかったが
オープン系やWeb系開発で英語分からないんです><
って公言してそこで思考停止する奴は腐るほどいる現状。
たいがい老人たちもその口だからそれで免罪符になってしまう。

45:デフォルトの名無しさん
08/08/10 13:54:32
>>18
sfu使えばええがな

46:デフォルトの名無しさん
08/08/10 14:07:59
>>23
LFNに""囲まないで大丈夫か?

47:デフォルトの名無しさん
08/08/10 18:09:54
>>42>>45
標準化は嫌、でも標準ツール以上もダメ!な困った会社の仕事。
未だに95,NT3.51〜Vistaまでの色々な環境で動くスクリプトとか言われると、バッチ位なので・・・
標準で組み込んでくれると数年後に仕事が楽になるお。

48:デフォルトの名無しさん
08/08/10 21:36:52
95のDOS窓とNT以降のコマンドプロンプトじゃ全然別物じゃんw

49:デフォルトの名無しさん
08/08/10 22:32:16
ぜんぜんではないぞ

50:デフォルトの名無しさん
08/08/10 22:44:32
95はまだ良い。
NT351が鬼門過ぎる。

51:デフォルトの名無しさん
08/08/11 00:08:25
 

52:デフォルトの名無しさん
08/08/11 23:33:25
95は大分駆除されてるけどNT4もまだ結構あるからなぁ

53:デフォルトの名無しさん
08/08/13 01:46:51
rem Perlのワンライナースクリプトを利用して、
rem 複数ファイル中の文字列を置換する

rem Wild.pmを使ってワイルドカードを使用できるように環境変数を設定
rem set PERL5OPT=-MWild

rem -i.bak ファイルを.bakを付けてバックアップ

rem perl -i.拡張子 -pe s/検索文字列/置換文字列/g ファイル名
rem %1 検索文字列
rem %2 置換文字列
rem %3 ファイル名(ワイルドカード使用可能)
perl -i.bak -pe s/%1/%2/g %3


54:デフォルトの名無しさん
08/08/13 01:53:13
rem sbrmake.bat
@echo off
call vcvars32
dir/s/b *.sbr > sbrs.txt
echo /n /v /nologo /S stdafx.h /o appname.bsc > sbrs.tmp
rem echo /n /v /o appname.bsc > sbrs.tmp
for /f "delims=;" %%i in (' dir/s/b *.sbr' ) do @echo "%%i" >> sbrs.tmp
bscmake @sbrs.tmp
rem del sbrs.tmp
pause


55:デフォルトの名無しさん
08/08/13 02:18:56
まだまだ貼るぞぅ

56:デフォルトの名無しさん
08/08/13 02:24:50
>>53
cygwinとかgrepとかない環境用にperlで文字列置換バッチファイル

>>54
VC(6以前)のブラウザ情報データベースをメイクするバッチファイル

57:デフォルトの名無しさん
08/08/13 11:26:37
>>53>>56
一行野郎(OneLiner)は一行その場で打って使えるから意義があるんであって、
そんなバッチを用意するなんて何が楽しくてperlを使っているんだか判らんな。
ついでに言えば、文字列の置換はcygwinがなくてもできるがgrepではできない。
間抜けなバッチを作る前に基礎知識を身に着けたら?
つーか、せめて文字列くらいダブルコーテーションで囲む位しなさいよ。
>54もなんつーか、今更感が強いし。
もしかして、「こんなにバッチファイルを作れて僕ちゃん凄い」なんて勘違いしていないよな。

58:デフォルトの名無しさん
08/08/13 11:39:27
夏だな〜

まあ、余程の事がなければPerlとかデフォで使えないコマンドは無しでしょ。
何事もなかったかのように続きよろしく>>56


59:デフォルトの名無しさん
08/08/13 11:49:12
いや、もういいよ。

60:デフォルトの名無しさん
08/08/13 12:48:36
>>56
どうせスレも進まないので、じゃんじゃん書き込みおk

61:デフォルトの名無しさん
08/08/13 13:10:29
誰も誉めないけどな

62:デフォルトの名無しさん
08/08/14 02:42:28
>>56
が貼らなければあとは荒らしという糞スレですね

63:デフォルトの名無しさん
08/08/14 02:45:12
どうせこの板はマウスばっかりでコーディングしてる奴らの巣窟

64:デフォルトの名無しさん
08/08/14 05:16:49
ていうかawkとかならわかるがperlでワンライナーって発想が俺にはなかった
PCも速くなってきてるんだな

65:デフォルトの名無しさん
08/08/14 17:30:00


66:デフォルトの名無しさん
08/08/14 20:19:09
デジカメで撮ったjpgファイルをmspaintで開いて上書き保存すれば
容量が少なくなるのですが、画像 001.jpg、画像 002.jpg・・・と
同じフォルダ内にデータが沢山あるので自動処理したいです。
batスクリプトで可能でしょうか?

67:デフォルトの名無しさん
08/08/14 20:24:11
おまえ馬鹿なの?

68:デフォルトの名無しさん
08/08/14 20:24:48
>>66 mspaintで開くところまでなら

69:デフォルトの名無しさん
08/08/14 20:41:02
>>66
簡単なのはImageMagick(convert.exe)の導入かなぁ。
でもそれって画質落としてるわけだけどほんとにいいのん?


70:デフォルトの名無しさん
08/08/14 21:09:20
>>66
MSPAINTのJPG圧縮率は結構高くて画質悪い。
容量が小さくなってるのは必要な情報(細かさとか鮮明さといったもの)を
捨ててるからなんだけど、それはわかってるのかな?

71:デフォルトの名無しさん
08/08/15 02:52:32
念のため、横から>70に追加。 JPG変換(保存)時に一度捨ててしまった情報を元に戻す事はできない。
予め元のファイルをどこかにバックアップしてから作業し、処理後のファイルと見比べてから
元のファイルを残すかどうか決めるのであればいいけどね。

72:デフォルトの名無しさん
08/08/15 13:23:09
IrfanView辺りならバッチ処理があるよ。ImageMagick使うよりは敷居が低いんじゃない?

73:デフォルトの名無しさん
08/08/16 09:06:51
なんか貼れよキモヲタ共

74:デフォルトの名無しさん
08/08/16 10:44:58
こういう事書くのだけが生きがいのキモオタっているんだよね。

75:デフォルトの名無しさん
08/08/16 12:19:34
nconvertとか

76:デフォルトの名無しさん
08/08/16 18:20:47
>>74
キモヲタ涙目w

77:デフォルトの名無しさん
08/08/17 02:55:50
ウィザード形式でバッチファイルやバッチコマンドを生成してくれるようなソフトってある?
全部のコマンドとは言わないけど、for系とかfindstr系とかのややこしそうなやつだけでも。

78:デフォルトの名無しさん
08/08/17 03:26:33

こなの見つけた
URLリンク(www.google.com)


79:デフォルトの名無しさん
08/08/17 03:58:05
便利な外部コマンド(ベクターとかに)いっぱいあるけど、
普通のfor文やwhile文が使える外部コマンドがあったら、
すげー便利だろうなぁ

80:77
08/08/17 11:09:46
>>78

いやぁ、あるもんだなぁ。さんくす。ちょっと使い込んでみるわ。

81:デフォルトの名無しさん
08/08/17 13:36:41
>>79
powershell.exe
cscript.exe
mshta.exe

82:デフォルトの名無しさん
08/08/17 19:35:23
>>78
それってOS/2のDr.Dialog作ってたところ?

83:デフォルトの名無しさん
08/08/17 22:42:10
DrDialog、あれはいいものだ・・・

84:デフォルトの名無しさん
08/08/20 04:25:11
ひょっとしたら1行で済むかもしれないが、俺には考え付かなかったので質問…

ren *.exe *.exe.dat で拡張子を偽造したファイルが同一ディレクトリに大量に
存在するのだが、この拡張子を簡単に *.exe に戻すバッチが思いつかない。
仕方ないので今はバッチからWSHを呼び出しているが、これをなるべく少ない行数
のバッチで処理する方法ってある?
exe等の外部ファイルが使用できないため、何とかバッチだけで処理したいのだが
何かいい方法ってあります?
(1行で済むなら板違いなので申し訳ない)

85:デフォルトの名無しさん
08/08/20 04:36:09
ren *.exe *.

86:デフォルトの名無しさん
08/08/20 04:37:08
>>85 ren *.exe.dat *.

87:デフォルトの名無しさん
08/08/20 05:44:14
>>84
for %i in (*.exe.dat) do ren %i %~ni

for文使えるとラクだぞ。
ディフォルトのWindowsである程度の処理は可能。
C:\WINDOWS\Help\ntcmds.chm

88:デフォルトの名無しさん
08/08/20 06:20:53
Windowsならbat+wsh最強。
なんたってディフォルト。
RubyとかPerlとかPythonとかいらね。
Windowsしか使わないのにRubyとか笑えるw
スクリプトで済む事をexeにしてVectorに臆面もなく公開とか超うけるw

まぁ、異論は認める。

89:デフォルトの名無しさん
08/08/20 10:16:53
>>88
昔、某セキュリティソフトにwshであるというだけでウィルスの疑いをかけられたので
なんとなくwshを敬遠してしまう。

90:デフォルトの名無しさん
08/08/20 11:18:42
WSHっつってもVBScriptかJScriptでしょ?

91:デフォルトの名無しさん
08/08/20 12:34:56
VBScriptはFSOとかすぐに反応してくるからな…

92:デフォルトの名無しさん
08/08/20 12:44:37
WSH用のbatエンジンが開発されたのかとおもったぜ。

93:84 ◆W4wSOopp0M
08/08/20 13:45:45
>>85
>>87
ありがとう!
というか、やっぱり1行でできるのか…
特に ren の *. には参った。
普段よく使うコマンドなのに、こういう使い方、全く知らなかった。
なぜ [*.] で拡張子が消えるのかいまだにわからないが、
恥ずかしくて、これ以上ここで質問できない…。

94:デフォルトの名無しさん
08/08/20 14:03:37
*.はDOS時代からの仕様というしかないからな。
ファイル名にほぼ制限のない現在からすると変に見えるのはしかたない。

95:デフォルトの名無しさん
08/08/20 15:27:23
↑こいつは何を言ってるんだw

96:デフォルトの名無しさん
08/08/20 18:34:36
>>93
なぜもなにも、そういう仕様だからだよ。
URLリンク(technet2.microsoft.com)

97:デフォルトの名無しさん
08/08/20 21:20:19
↑こいつは何を言ってるんだw

98:デフォルトの名無しさん
08/08/21 00:13:28
command.comからcmd.exeに変わったときに切り捨ててもよかったと思う物の一つだねぇ。拡張子のアレ


99:デフォルトの名無しさん
08/08/21 01:32:14
このスレの人間はワイルドカードも知らんのか?!

100:デフォルトの名無しさん
08/08/21 08:17:43
知ってるけどなにか

101:デフォルトの名無しさん
08/08/21 11:48:24
あぁゴメン
>>94>>98だけだよな、ワイルドカード知らないのなんてw

102:デフォルトの名無しさん
08/08/21 14:31:01
>拡張子のアレ
ソレは関係ないよ

103:デフォルトの名無しさん
08/08/21 14:35:40
>なぜもなにも、そういう仕様だからだよ。
URLリンク(technet2.microsoft.com)
ほんとかどうか試してから言えよ。


104:その1
08/08/21 22:16:44
分かり難くて申し訳ありませんが、ご教授お願いします。
以下は、temp.txtというファイルに「ok」の文字列があった場合、
何もせず次の処理へ移行し、もし「ok」の文字列が無い場合は、
hello!!を5回連続して表示させたいと思い書いたものです。
----------------------------------------------------------------
@echo off
for /L %%i in (1,1,5) do (
echo %%i回目の処理を行います。
find "OK" < temp.txt
if errorlevel 1 goto NG temp.txt
if errorlevel 0 goto OK temp.txt

:NG
echo hello

:OK
echo 条件に一致している為、なにもしません。
goto END
)
:END
echo 次の処理へ続く・・・
----------------------------------------------------------------

105:その2
08/08/21 22:18:04

自分の行わせたかった動作としては、「ok」の文字列が無い場合、
1回目の処理を行います。
hello
2回目の処理を行います。
hello
・・・・が、5回続くようにしたかったのですが、実際には以下になります。

1回目の処理を行います。
hello
条件に一致している為、なにもしません。
次の処理へ続く・・・

5回繰り返すというfor文の記述が無視されています。
「goto END」に問題があるとは思いますが、いろいろ記述を変更しても、
思うような動作になりません。
どのようにすれば、for文の記述通り、5回の処理を行えるでしょうか。

106:デフォルトの名無しさん
08/08/21 23:37:07
OKラベルをforの外、いっちゃうとENDと置き換える。
たぶん勘違いしてるところはラベルは制御ブロックをつくるわけじゃなく
単に飛び先を提供しているだけなので、NGラベルへ飛んでecho helloしたら
次はOKラベル以降に突入するってこと。
とりあえず慣れんうちは先頭の@echo offを外しとく。

107:デフォルトの名無しさん
08/08/21 23:41:31
>>105
全部書き直したくなるが…w

:NG → :OK と書くからNGに行ったものも全てOKの処理を経て全部ENDへ飛ぶ。
:OK → :NG と書いてNGの時はOKの処理を飛ばせ。

108:デフォルトの名無しさん
08/08/23 00:13:49
>>104
仮にそれで動いたとして、
temp.txtを5回走査することになるがどう思うよ?

109:デフォルトの名無しさん
08/08/23 15:26:09
>>105
テスト用ソースじゃなくて実際にする事を詳しく聞いた方がいいぞ


110:デフォルトの名無しさん
08/08/24 21:34:59
>>104
IF okが見つかった (
    SET FLAG=TRUE
) ELSE (
    SET FLAG=FALSE
)

IF NOT %FLAG%==FALSE (
    FOR /L %%I IN (1,1,5) DO (
        ECHO hello
    )
)

ECHO 次の処理へ

111:デフォルトの名無しさん
08/08/24 23:03:51
つーかFLAG必要なくね?

112:デフォルトの名無しさん
08/08/28 22:29:25
俺ならforの処理内容を丸ごとラベルに飛ばしてcallするところかな

113:デフォルトの名無しさん
08/08/28 23:18:56
>>112
IF おk (
    CALL :OK
) ELSE (
    CALL :NG
)

GOTO :END

NG:
ECHO 次の処理へ
GOTO :EOF

:OK
るーぷ
GOTO :EOF

:END
GOTO :EOF



114:デフォルトの名無しさん
08/08/29 10:18:07
NGのラベル付け間違ってるぞ

115:デフォルトの名無しさん
08/08/29 11:41:10
大文字やめろよ、気持ち悪いw

116:デフォルトの名無しさん
08/08/29 11:46:50
ラベルをCALLするなんて上等なことができるのか
きちんと戻るんだろうな?

117:デフォルトの名無しさん
08/08/29 12:55:57
>>116

118:デフォルトの名無しさん
08/08/29 15:27:08
いくらなんでもこれは釣りだよな?

119:デフォルトの名無しさん
08/08/29 17:17:53
call exit
戻ってこないよー

120:デフォルトの名無しさん
08/08/29 17:29:45
call call echo なんて

121:デフォルトの名無しさん
08/08/29 19:13:51
dosのbat書いてた人にしてみれば普通の感想。
call %1 とかやって罠にはまったことのあるやつも多いだろう。

122: ↑
08/08/29 19:15:35
%1 じゃなくて %0 の間違い

123:デフォルトの名無しさん
08/08/29 19:54:05
それは関係ないだろ
%0
と書いても同じ

124:デフォルトの名無しさん
08/08/29 22:41:22
リカーシブコールで罠にはまるとか(笑)

125:デフォルトの名無しさん
08/08/29 23:48:39
罠ってのはね〜、中でcdしてるとき相対パスで使われちゃうとか〜

126:デフォルトの名無しさん
08/08/30 00:04:53
再帰呼び出しも出来ないマヌケw

127:デフォルトの名無しさん
08/08/30 00:15:35
そうそう、単なるサブルーチンを同一ファイルにまとめたいだけだったのに、
わけ分からん動作になってまいりましたよw

128:デフォルトの名無しさん
08/08/30 01:58:42
>>116
call /?

129:デフォルトの名無しさん
08/08/30 20:31:45
echo で空行って表示出来ないの?


@echo off
aaa
ECHO は <OFF> です。
bbb
pause

を実行すると
aaa
ECHO は <OFF> です。
bbb
って表示される


130:デフォルトの名無しさん
08/08/30 20:33:38
間違えた。こっち。


@echo off
echo aaa
echo
echo bbb
pause


131:デフォルトの名無しさん
08/08/30 20:39:45
echo=
scho\
echo[
echo]
echo{
echo:
echo;
echo+

132:デフォルトの名無しさん
08/08/30 21:35:53
>>129
echo.
だろjk

133:デフォルトの名無しさん
08/08/30 22:41:11
できた!サンキュッ!

134:デフォルトの名無しさん
08/08/31 00:01:17
つくづく、echo って、おバカな仕様ですよね。

135:デフォルトの名無しさん
08/08/31 01:10:10
↑echoよりバカ

136:デフォルトの名無しさん
08/08/31 16:03:39
echo.exe

137:デフォルトの名無しさん
08/09/01 15:47:13
>131
横レスだがこんなんでも出来たのか。
2番目スペルミスで5番目はエラーだけど。

138:デフォルトの名無しさん
08/09/02 23:47:01
エチョー

139:デフォルトの名無しさん
08/09/03 15:41:06
エクスプローラで
 chinco.txt ← これをマウスでドラッグして
 unko,bat ← ここにドロップする
これは出来るんですが、

インターネットエクスプローラかFireFoxで表示中のWEBページの
リンクをマウスでドラッグしてバッチファイルにドロップできません。
BAT でも VBS でもできません。
なにかいい方法はありませんか?

140:デフォルトの名無しさん
08/09/03 15:50:07
ファイル名を指定して実行にはドロップできるよ

141:デフォルトの名無しさん
08/09/03 17:45:39
>>139
エクスプローラやインターネットエクスプローラかFireFoxみたいな
パソコンの使い方の質問は板違い
こっち↓で質問した方がいい

PC初心者
URLリンク(pc11.2ch.net)

142:デフォルトの名無しさん
08/09/03 19:20:17
このスレにしてはめずらしく正しい誘導だな

143:デフォルトの名無しさん
08/09/03 22:38:22
htaで受ける

144:デフォルトの名無しさん
08/09/04 00:49:48
このスレの住人は、wshについてどういう見解なのでしょうか?

1.バッチもWSHも両方出来る
2.バッチしか出来ない(Wshに移行したい)
3.Wshよりバッチの方が優れてる(Wshに移行するつもりは無い)



145:デフォルトの名無しさん
08/09/04 03:09:28
1

146:デフォルトの名無しさん
08/09/04 19:40:39
両方使えるが、ここがム板のバッチスレである以上
どうしてもバッチじゃ無理なところだけは例外にしても
7割以上WSHでゴリゴリやるようならスレ違いだと思ってる

147:デフォルトの名無しさん
08/09/04 19:44:11
そもそもバッチというものはだな、

148:デフォルトの名無しさん
08/09/04 20:08:29
俺達の未来そのものだよ

149:デフォルトの名無しさん
08/09/04 21:45:15
>>144
釣り… だよな

150:デフォルトの名無しさん
08/09/05 01:45:43
ていうかさ、bat通り越してplとかpyとかrbとかって健全じゃないと思うんだ。
wshとかならまだいいけどさ。
batが頼りないのは誰もが承知してるんだ。
でもディフォルトで使えるのはbatかwshくらいなもんだろ?
で、どっちが早く仕事できるかっつったらやっぱbat。異論は認める。
ちょっとしたインストーラなんてほんの数行から十数行で済むしさ、
エンドユーザ共にシステムフォルダにhoge.dllをコピーしてregsvr32するんだっつっても
奴らちんぷんかんぷんだからさ、ちょっとbatつけたげればそれで解決。説明するよりずっと早いわけ。
ここでさ、お前らRubyのwin32バイナリをダウンロードして、インストールしろって説明から始めよう
としたら本末転倒だろ?
やっぱbat。お前らこれからもbatには世話になるはずだろ?

151:デフォルトの名無しさん
08/09/05 10:11:27
del /Q *.*

152:デフォルトの名無しさん
08/09/05 16:10:32
PROGRAM filename
というように実行するプログラム PROGRAM がありますが、
どうも filename と同じフォルダからしか実行できないみたいなんです。

そこで、以下を実行するバッチを作りたいと思います。
cd filenameと同じフォルダ
PROGRAM filename を実行
cd 元のフォルダ

filename と同じフォルダをどうやって取得するのか分からないので、
教えていただけないでしょうか。
または、他によい方法があれば教えていただけないでしょうか。
よろしくお願いいたします。

153:デフォルトの名無しさん
08/09/05 16:47:39
>152
まず基本的なパソコンの使い方を勉強しましょう

PC初心者
URLリンク(pc11.2ch.net)

154:デフォルトの名無しさん
08/09/05 17:13:34
>152
環境変数PATHを設定すれば、どこのディレクトリに居ても呼べるよ
設定の仕方はOSのバージョン毎に微妙に異なるが

155:デフォルトの名無しさん
08/09/05 17:16:50
プログラム板でパソコンの使い方を教える馬鹿

156:デフォルトの名無しさん
08/09/05 17:19:28
↑救いようのないバカw

157:152
08/09/05 17:49:25
どうも説明が足りなくてすみません。
今回はパスの設定では解決しません。
PROGRAM は filename を処理して、中間ファイルを filename と
同じフォルダに吐いて、さらにそれを処理します。
PROGRAM を filename と同じフォルダで実行しないと、
中間ファイルをどこに吐いたのか分からなくなっちゃうみたいなんですよね。

ちなみに、環境変数を設定して解決するのは、
「PROGRAM のおいてあるフォルダでしかPROGRAMが実行できない」場合で、
「filename のおいてあるフォルダでしかPROGRAMが実行できない」場合では
ないですよね?

引き続き、ご返答いただけないでしょうか。

158:デフォルトの名無しさん
08/09/05 17:50:20
おじいちゃんに環境変数PATHの意味と設定方法とか
バッチスクリプトについて教えているパソコン教室があるのか気になるところだな

159:デフォルトの名無しさん
08/09/05 18:05:32
>157
ああ、そういうことか。こっちこそ早とちりスマソ。

URLリンク(technet2.microsoft.com)

とかどうよ?
filenameがコマンド引数ならそのまま、そうでないならcallと組み合わせればいけるかと。

160:デフォルトの名無しさん
08/09/05 18:09:35
>>152
filenameを引数にとるバッチと仮定するとこんな感じかな

pushd "%~dp1"
PROGRAM "%~1"
popd


161:デフォルトの名無しさん
08/09/05 23:17:58
set BaseDir=%CD%
cd /d filenameのフォルダ
PROGLAMを実行
cd /d %BaseDir%


162:デフォルトの名無しさん
08/09/06 01:28:08
set unko="toilet"


163:デフォルトの名無しさん
08/09/06 09:08:42
あるテキストファイルから読んだ%%aは常に整数なんですが、これを計算する方法はありますか?
set /a n=%%a * 2
とかできないみたいで

164:デフォルトの名無しさん
08/09/06 09:41:45
>>163
%%aってことはテキストの読み込みにfor使ってるんだろうけど
それなら計算できてないんじゃなくて参照できてないだけ

setlocal ENABLEDELAYEDEXPANSION
for /f %%a in (n.txt) do (
set /a n=%%a * 2
echo !n!
)


165:163
08/09/06 10:08:37
へええええ
希望通りになりました
どうもありがとうございます

166:デフォルトの名無しさん
08/09/06 13:28:54
こういうのはechoをonにしてループしてる部分を見れば
遅延展開してない部分が全ループで同じになってるのですぐわかる。

167:デフォルトの名無しさん
08/09/06 15:08:57
>>166
遅延云々なんかより先に
forの中で変数展開できないのかー
としか思わんだろ

168:デフォルトの名無しさん
08/09/06 15:38:06
変数展開できないとは思わんでしょ。

>>164の!n!を%n%にしてると実際にまわるのは%n%が空で

set /a n=%%a * 2
echo

これのループになるんだから。変数参照してねーよってのがすぐわかる。

169:デフォルトの名無しさん
08/09/06 23:26:20
>>168
んー俺ならループ回す前に変数初期化するしなー

set n=0
で回したら、ひたすら
echo 0
でしょ

なんだ、forループじゃ変数いじれないのか?
と思ってしまう

170:デフォルトの名無しさん
08/09/06 23:58:33
変数いじれないのかとか思うのは人それぞれだけど、
実際に何が起きてるかは一目瞭然じゃん?

>>163は計算が出来ていないと勘違いしたみたいだけど、実際は
変数の参照が出来ていなくて全て定数を参照していたわけだから。

171:デフォルトの名無しさん
08/09/07 00:06:57
そうだそうだ

172:デフォルトの名無しさん
08/09/07 00:27:37
>>169
バカは黙ってろw

173:デフォルトの名無しさん
08/09/07 00:30:54
>>172
お前もなw

174:デフォルトの名無しさん
08/09/07 00:35:13
ん?悔しかったの?

175:デフォルトの名無しさん
08/09/07 00:51:19
俺は>>169じゃない

176:デフォルトの名無しさん
08/09/07 02:43:17
まぁ一筋縄じゃいかないってことには遅かれ早かれ気付くだろうな

177:デフォルトの名無しさん
08/09/07 07:35:10
>>174
だっさw

178:デフォルトの名無しさん
08/09/07 10:43:42
>>177
お前がなw

179:デフォルトの名無しさん
08/09/07 11:15:02
醜い煽り合いはやめてっ!

180:デフォルトの名無しさん
08/09/07 13:59:33
ちょっとした軽いアプリケーションを作ったので
連続して実行したいので bat処理したいのですが
あまり情報がないので質問させてください

[例]
hoge.exe
goto hoge

のように 永遠とhoge.exeを実行したいのですが
どうBATファイルを組めばいいのでしょうか?

181:デフォルトの名無しさん
08/09/07 14:09:45
:hoge
hoge.exe
goto hoge

182:デフォルトの名無しさん
08/09/07 14:15:23
アルゴリズウムっす

183:デフォルトの名無しさん
08/09/07 15:04:17
set counter=100
for /L %%C in (1,1,%counter%) do (
hoge.exe
)

184:デフォルトの名無しさん
08/09/07 15:56:23
ウイルスか

185:デフォルトの名無しさん
08/09/07 16:40:14
gotoの情報があまりないって考えられなくね?
goto /?で大体分かるだろうし、もうちょい詳しく
知りたければヘルプとサポート見てもいい。
どっちにしろオフラインで解決できるレベルだよ。


186:デフォルトの名無しさん
08/09/07 16:41:32
ウイルスを作るつもりだな

187:デフォルトの名無しさん
08/09/07 16:49:30
>>180
× 永遠と
○ 永遠に
○ 延々と

188:デフォルトの名無しさん
08/09/08 04:18:27
この程度で躓く程度じゃろくなウイルスじゃない

189:デフォルトの名無しさん
08/09/08 06:05:15
batにファイルをドロップすると、ts2ts.exe(変換プログラム)というファイルに
ドロップしたファイルのフルパスを渡すbatを作ります。

ドロップしたファイルを変数に入力にはどうすればいいですか?

↓以下作ろうと思っているbat
set PATH=ドロップしたファイルのパス

TS2TS "%PATH%" C:\ドロップしたファイル名.ts
pause
exit

190:デフォルトの名無しさん
08/09/08 06:57:02
こういうことを言ってるの?

TS2TS "%~d1%~p1" "%~nx1"
pause
exit

191:デフォルトの名無しさん
08/09/08 09:27:25
こう言う事だと思う

TS2TS %1 "C:\%~n1.ts"
pause
exit

192:デフォルトの名無しさん
08/09/08 10:21:22
>>189
%0 バッチファイル本体
%1〜%9 バッチファイルに渡した引数(先頭順に)

hoge.bat "C:\test\fuga.ts"

とやると、
%0=hoge.bat
%1="C:\test\fuga.ts"
%~1=C:\test\fuga.ts
%~d1=C:
%~p1=\test\
%~n1=fuga
%~x1=.ts
等々

組み合わせて
%~dp1=C:\test\
%~nx1=fuga.ts
といったような使い方もできる。詳しくはfor /?でも見れ。

193:デフォルトの名無しさん
08/09/08 12:46:22
hoge.exe
%0

194:デフォルトの名無しさん
08/09/08 17:22:58
次のようなバッチを作りたいのです。

フォルダを指定する。
フォルダの中のbatファイル名をすべて取得する。
すべてのバッチファイルを順次実行する。

こんなことってbatファイルでできますか?
全くの初心者で、参考になるようなサイトや本、wshのほうがいいよということが
ありましたらぜひ教えてください。

195:デフォルトの名無しさん
08/09/08 17:26:35
【質問者の皆様へ】
高機能広汎性発達障害の人が不適切なレスをすることがありますが無視してください。
>>3参照

196:デフォルトの名無しさん
08/09/08 17:33:18
>194
それぐらいだったらパソコンの使い方を勉強すればできるよ

PC初心者
URLリンク(pc11.2ch.net)

197:デフォルトの名無しさん
08/09/08 17:39:52
>>194
バッチで出来ます

198:デフォルトの名無しさん
08/09/08 19:17:37
cd /d 指定するフォルダ
for %%i in (*.bat) do %%i

199:デフォルトの名無しさん
08/09/08 19:25:01
↑お前いい加減 pushd 使えるようになれよw

200:デフォルトの名無しさん
08/09/08 19:26:51
戻ること考えんでいいのに必要ないだろ。

201:デフォルトの名無しさん
08/09/08 19:28:44
パソコンの使い方の話は板違い
こちらへどうぞ

PC初心者
URLリンク(pc11.2ch.net)

202:デフォルトの名無しさん
08/09/08 19:37:40
>>161とか笑っちゃうだろ

203:デフォルトの名無しさん
08/09/08 20:53:06
>>198
ええwこれだけでいけるの??
ちょっとやってみる><

204:デフォルトの名無しさん
08/09/08 20:53:53
>>196
そうなの?

205:デフォルトの名無しさん
08/09/08 20:57:37
>>198
なんかたくさんコマンド実行してるみたい。
これじゃだめだよ><

206:デフォルトの名無しさん
08/09/08 21:16:47
>>205
ダメって何がダメなんだよ。
沢山コマンド実行したいんだろ。

先頭に@echo off入れたらおkkkみたいなボケかまさないでくれよ?

207:デフォルトの名無しさん
08/09/08 21:21:10
>>190-192
うまく作成できました。ありがとうございます。

208:デフォルトの名無しさん
08/09/08 21:22:12
>>204
9つ前のレスぐらい読んでください

209:デフォルトの名無しさん
08/09/08 21:51:48
迷惑メールをメル友の相手と勘違いして
エッチな言葉つきで返信しちゃったんですが大丈夫でしょうか?

210:デフォルトの名無しさん
08/09/08 21:53:35
ここ変な人しかいないね。
pg以前の問題だ。

211:デフォルトの名無しさん
08/09/08 22:54:22
ただ変なの湧いてきただけだよ

212:デフォルトの名無しさん
08/09/08 23:13:48
>>210
> ここ変な人しかいないね。

わざわざ便所のドアを開けて
ここウンコしてる人しかいないねというようなもの

213:デフォルトの名無しさん
08/09/09 08:57:01
バッチから抜けてプロンプト手動入力に移行したいのにcme.exeが終了してしまうーなんでええ><

> exitで終了すると、コマンドプロンプトまで終了してしまうため、
> コマンドプロンプトを終了せずにバッチを抜けたい場合に使用します。
URLリンク(tooljp.com)
URLリンク(www.atmarkit.co.jp)
URLリンク(dos.g.hatena.ne.jp)

214:デフォルトの名無しさん
08/09/09 10:30:38
>>213
バッチファイルをExplorerからダブルクリックで
実行してないか?


215:デフォルトの名無しさん
08/09/09 10:41:18
>>214
はい、してます
>>213はコマンドプロンプト手動入力時にcallで外部batを呼び出した時の話なんですかね
バッチファイルをダブルクリック実行時は不可能ですか?

216:デフォルトの名無しさん
08/09/09 12:40:59
可能です

217:デフォルトの名無しさん
08/09/09 12:43:36
はじめから cmd /k aaa.bat で起動するか
batの最後にcmd呼んでごまかすか。

218:デフォルトの名無しさん
08/09/09 12:44:19
バッチファイルの最後でcmd.exeを動かしておけばいいんじゃね?w

219:デフォルトの名無しさん
08/09/09 13:00:09
Explorerから起こされたときだけ区別しろ

220:デフォルトの名無しさん
08/09/09 13:01:19
またパソコンの使い方か

221:デフォルトの名無しさん
08/09/09 13:11:58
cmd呼んでごまかすってw
環境変数の引継ぎも出来ないじゃないかと

222:デフォルトの名無しさん
08/09/09 13:41:05

> 環境変数の引継ぎも出来ないじゃないかと


223:デフォルトの名無しさん
08/09/12 01:43:03
あれあれ?ここスクリプトスレだよな?

224:デフォルトの名無しさん
08/09/12 01:45:08
さすが能なしFラン共が集うにちゃんねる・・・
せっかくのスレも糞まみれスレになってしまう・・・

225:デフォルトの名無しさん
08/09/12 01:47:42
【キーワード抽出】
対象スレ: 【.cmd】 バッチファイルスクリプト %3 【.bat】
キーワード: 糞


37 名前:デフォルトの名無しさん[sage] 投稿日:2008/08/10(日) 01:08:22
>>20-23みたいな糞バッチ押し付けられるよりはまし

62 名前:デフォルトの名無しさん[] 投稿日:2008/08/14(木) 02:42:28
>>56
が貼らなければあとは荒らしという糞スレですね

224 名前:デフォルトの名無しさん[] 投稿日:2008/09/12(金) 01:45:08
さすが能なしFラン共が集うにちゃんねる・・・
せっかくのスレも糞まみれスレになってしまう・・・


抽出レス数:3

226:デフォルトの名無しさん
08/09/13 11:33:07
>>225
抽出厨うぜぇ

227:デフォルトの名無しさん
08/09/13 12:07:19
【キーワード抽出】
対象スレ: 【.cmd】 バッチファイルスクリプト %3 【.bat】
キーワード: うぜぇ


226 デフォルトの名無しさん [sage] 2008/09/13(土) 11:33:07
>>225
抽出厨うぜぇ




抽出レス数:1

228:デフォルトの名無しさん
08/09/13 13:51:09
専ブラデビューおめでとう

229:デフォルトの名無しさん
08/09/14 01:35:15
バッチファイルの最後で
start /b cmd.exe

230:デフォルトの名無しさん
08/09/15 15:34:05
コマンドの結果を変数に入れたいのですが方法はありませんでしょうか?

dir `hoge %*`

みたいなことがやりたいのですが、`hoge %*`を展開してくれません。
hoge %*の結果をどこかに入れて、

RESULT = hoge %*
dir %RESULT%

みたいにできればよいのですが・・・


231:デフォルトの名無しさん
08/09/15 15:39:36
>>230
for /?

setの拡張でもできればわかりやすいのにね。

232:デフォルトの名無しさん
08/09/15 15:47:26
ありがとう。できました。

for /f "usebackq tokens=*" %%i in (`hoge %*`) do @set RESULT=%%i
echo %RESULT%

面倒くさくてワロタ
バッチファイル死ね


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5383日前に更新/119 KB
担当:undef