11/09/27 16:43:32.32
findstr
51:デフォルトの名無しさん
11/09/27 17:04:58.38
findstrをfindと同じ使い方をしたらもっと遅いんですが…
単純に指定しただけではOR検索になる仕様ですし、
正規表現でAND検索をやるには前後の組み合わせを変えてOR検索するという
馬鹿みたいな表記になり、2語程度が限界ですが。
52:デフォルトの名無しさん
11/09/27 17:44:55.74
orのfindstr出力をfindでandする
53:デフォルトの名無しさん
11/09/27 18:01:01.08
言っている事がよくわからない…
aaa bbb ccc ddd でAND検索を現状は
サブルーチンに渡して
:sub
echo %hoge% |find "%~1"
if errorlevel 1 goto :eof
shift
goto :sub
みたいなことやってるわけなんだけど…
findstrの出力をfindでandする? 2語の話じゃないですよね?
54:デフォルトの名無しさん
11/09/27 18:13:28.08
最初からそれ書けあほ
ファイル処理だと思うだろがばか
環境変数の:=置換を使えぼけ
55:デフォルトの名無しさん
11/09/27 18:15:45.94
ファイルの検索だったとして、結局同じだけどどういう意味だったの?
56:デフォルトの名無しさん
11/09/29 17:21:21.58
ファイルの検索だったとして、結局同じだけどアホには無理
57:デフォルトの名無しさん
11/09/29 18:25:24.38
多分自分で間違えてるの気付いてないんだと思うけど。
58:デフォルトの名無しさん
11/09/29 21:07:11.40
>>39
for %%A in (%*) do (
set X=%%A
call move %%A %%X:\aaa\=\bbb\%%
)
59:デフォルトの名無しさん
11/09/29 21:45:18.04
ドロップしたファイル名を set で取り込みたいのですが & が含まれているときに
そのファイル名全てを受け取るにはどのようにすればいいのでしょうか?
60:デフォルトの名無しさん
11/09/29 22:08:31.84
ファイルかフォルダ名に空白を入れとけ
でなきゃ難しいからやめとけ
61:デフォルトの名無しさん
11/09/29 22:43:26.15
そうなんですか。
別の方法あたってみます。
自分で名前をつけたなら & なんてヤな気配のする文字は使わないんですけどね……
!! とか……
62:デフォルトの名無しさん
11/09/30 00:04:50.12
!もやめとけ 遅延展開で困るかも
63:39
11/09/30 21:25:22.32
先日はお世話になりました。
>>58
お返事遅れてしまい申し訳ありません。どうもありがとうございました。
先ほど試してみたらこれだけで移動する事ができました!ものすごく感動しました!
そこで是非とも意味を理解したく:や=や単体での%%の使い方、またはfor %%A in (%*) do (set X=%%A
の意味を調べているのですが、なかなか見つかりません。
なので、もうこうなったらbatの優しい参考書があれば購入しようと思うのですが
何か初心者にも分かり易いものはありますでしょうか?
64:デフォルトの名無しさん
11/09/30 21:39:24.06
for/?
set/?
call/?
以上で十分
65:デフォルトの名無しさん
11/09/30 22:14:41.45
昔なら良書もあったが、いまどきはねぇ・・・
Webなら初心者向きHPも腐るほどあるから、お金出さずに勉強できるよ
(古い情報のまま放置のところもあるけど)
66:39
11/09/30 22:36:23.51
>>64
穴が空くまで読めということですね。ありがとうございました。
>>65
Webの場合は全てのHPを行き来すれば網羅的だと思うのですが
この行き来をなくして、馬鹿な私もついていけるような前提から説明して一緒にbatを作り上げるような
そんな本であれば購入しようと思っていたのですが、古い情報だとまずかったりするのですね。
HPをめぐって勉強しようと思います。ありがとうございました。
67:デフォルトの名無しさん
11/09/30 23:30:56.08
>>66
古い情報でもまずいことはあまりないのだが、cmdやコマンドもOSによっていろいろ進化しているから
昔は何行もバッチを書いていたのが今ではコマンド1発でいろいろ出来てしまうことが多々ある。
WinNT系ではWin9xまで(DOS含む)に比べて大幅に機能が拡張されているから、
HPを見つけたらいつ頃書かれたものなのか意識していくといいと思う。(書いていないことが多いが)
いまどきから始めるならバッチよりもWSHの方がいいのかなぁ・・・
68:デフォルトの名無しさん
11/10/03 15:50:30.91
いまどきWSH???
69:デフォルトの名無しさん
11/10/03 23:32:29.20
5.6で機能強化の止まってしまったWHSなぁ
70:デフォルトの名無しさん
11/10/04 00:51:43.69
5.7だけど
71:デフォルトの名無しさん
11/10/04 00:57:39.22
そやな
72:デフォルトの名無しさん
11/10/04 02:04:12.37
せやな
73:デフォルトの名無しさん
11/10/04 19:30:10.04
WSHだけど
爺さん婆さんみたいだな ムヒをヒムとか
74:デフォルトの名無しさん
11/10/04 20:46:47.70
パンツをパンスとか
75:デフォルトの名無しさん
11/10/05 20:25:02.09
初めてのプログラムでbatに挑戦したいと思うのですが
下記のような事はbatでも出来ますか?
フォルダ名が『レーベル] タイトル』のものと『タイトル』のものが沢山あり
これらの中からタイトルが殆ど一致するものを検索し、該当するフォルダについては
txtかエクセルに出力し、そこにフォルダ名とパスとサイズとファイル数を表示したいと思ってます。
よろしくお願いします。
76:デフォルトの名無しさん
11/10/05 20:50:06.13
すいません、フォルダ名には他にも
『[レーベル] タイトル (ジャンル)』というものがありました。
正規表現を使って末尾から一致を探そうと思ったのですが
これはちょっと困りました・・・
77:デフォルトの名無しさん
11/10/05 21:25:42.61
>>76
> タイトルが殆ど一致するものを
殆ど一致て似たものもってこと?「殆ど一致」ではなく「完全に一致」で
フォルダ名の書式が
[レーベル] タイトル (ジャンル)
[レーベル] タイトル
タイトル
が厳密に守られていて、且つ
レーベル、タイトル、ジャンルの文字に "]" "(" の文字が使われて居ないならば
やる気さえあれば出来るよ
ただこれから始めるような人には敷居がちょっと高いかもね
とりあえず"[レーベル] タイトル (ジャンル)"から
"タイトル"を抜き出す方法からやってみるといい
78:デフォルトの名無しさん
11/10/05 21:41:55.24
>>77
タイトルの先頭や末尾に加えてメモが書いてあったりするフォルダもあり
また、稀にですがアルファベットや記号で半角全角など違う場合もあるので
殆ど一致であれば全てカバーできるのではないかと、そう表現しました。
フォルダ名の形式についてはタイトル以外は殆ど厳密に守られていると思いますが
タイトル(ジャンル)このように半角スペースが入ってないフォルダも結構ありました。
とりあえず敷居は高いとはいえ出来ない事はない、と聞いてやる気が湧いてきました。
ご指摘頂いた「タイトルを抜き出す方法」をまずは学んでみます。
どうもありがとうございました。
79:デフォルトの名無しさん
11/10/05 22:45:45.00
> アルファベットや記号で半角全角など違う
出来るか出来ないかで言うと出来ないことってあまり無いよ
ただ、ものによっては実装するのにすごく手間がかかるので
別の言語を使うほうが楽だったりして現実的ではなかったり
if /i で大文字小文字の違いは無視して比較出来るけど
半角全角は無視出来ないから、一旦全角を半角に直して比較、、
とかならやれなくないけど面倒だね
フォルダ・ファイル名、一括リネームソフトとかで手直ししてから使うとか
もっと言えば、わざわざBATで書いて作らなくても
正規検索で "タイトル"の一致するPATHを書き出してくれる
フリーソフトを探せばあるんじゃないかな?
BAT書いてみたくて身近なネタがそれだったとかなら別だけど。
目的の為の手段としてBATで書くってなら近いフリーソフトを探したほうがいいよ
あと77の方法だけど set の環境変数の置換使って
](を区切り文字みたいに使えば楽に出来るよ
set a=%a:*]=%
うしろは一工夫すれば出来る
80:デフォルトの名無しさん
11/10/06 00:37:27.69
>>79
ご丁寧にありがとうございます。
半角全角については結構大変なのですね。
batでなくても難しいみたいなので、今回は未対応で作りたいと思います。
フリーソフトでも正規検索で結果を書きだす事が可能とのことで
こちらでも検討してみます。ただ、今は正規表現さえままならない状態であるのと
今回の処理以外にもやってみたいプログラミングがあるので、まずはbat
(または他に初心者でもやりやすい言語があればそれで)でやってみます。
お気遣いありがとうございました。
また、紹介して頂いたsetなんですが、もしよろしければ質問させて下さい。
set a=%a:元=先%はどこかで見てメモしたのですが、
set a=%a:*]=%この場合には先がないですよね?この場合には
*]を%aで表現できるという事でしょうか?つまり、()の場合には
set b=%b:(*=%によって%bで表現できるとことでしょうか?
…すいません、自分で検証してみろって話ですね。失礼しました。
後はifを使って%a %b以外で一致する場合には[コマンド1]をするみたいな感じで検討してみます。
沢山のヒントをありがとうございました!
81:デフォルトの名無しさん
11/10/06 00:46:04.94
すいません、凄い初歩でつまづいたのですが、どうか質問をさせてください。
まずはcmdと正規表現の繋がり、基礎を学ぼうと
URLリンク(ykr414.com)
ここの使用例を参考に、Cドライブ直下にaaaフォルダを置いて、そこに
bbb.txt(中身は適当でテキストという文字も入れた)と、試作.batを入れ、batには
>findstr テキスト bbb.txt
pause
と書いて、これをクリックしたのですが
’テキスト’は操作可能なプログラムまたはbatファイルとして認識されていません
と表示されてしまいました。
なんとか調べてコマンドプロントからcd/をして
C:\aaa>findstr テキスト bbb.txt
とした場合には、「アクセスが拒否されました」と表示されてしまいました。
これは何がまずいのでしょうか?こんな調子で先が思いやられますが…
どうかよろしくお願いします。
82:デフォルトの名無しさん
11/10/06 01:36:09.33
> set a=%a:*]=%この場合には先がないですよね?この場合には
> *]を%aで表現できるという事でしょうか?
set a=ab]cd(ef
echo %a%
echo %a:*]=%
> set b=%b:(*=%によって%bで表現できるとことでしょうか?
*は先頭から次の文字までの一致は出来るけど
"(*"という風に後方の一致には使えない
だから一手間かかる
set a=ab]cd(ef
set b=%a:*(=%
echo %b%
call set c=%%a:%b%=%%
echo %c:~0,-1%
call set c=%%a:%a:*(=%=%% こう書けばset b要らないが
わかりにくいかと思って一旦%b%としてる
遅延展開使えばcall使わなくても出来るけど
文字列に"!"が入ってると一旦別の文字へ置換して後で戻したりとかすることになる
83:デフォルトの名無しさん
11/10/06 01:42:35.54
findstr "テキスト" "bbb.txt"
84:デフォルトの名無しさん
11/10/06 02:56:38.52
>>82
見よう見まねでbatを作ってみたのですが
とても分かりやすい展開で勉強になりました!
分からない行もありましたが、じっくり解読できるよう励んでみます。
ご丁寧にどうもありがとうございました。
>>83
ありがとうございます、出来ました!
batの場合は""が必要なんですね。
cdの操作はカレントディレクトリの移動が出来てないだけでした。
失礼しました。
85:デフォルトの名無しさん
11/10/06 06:48:56.02
XPと7で処理を分けたい場合ってどうやればいいんですか
環境変数
OS=WINDOWS_NT
ってもうなんの意味もない気が…
86:デフォルトの名無しさん
11/10/06 07:58:08.97
ver
87:デフォルトの名無しさん
11/10/06 14:53:12.95
>>82
昨日はありがとうございました。
もう殆ど答えを頂いていたのですが、あれから何回も見直して
大方を理解すると共に、cdの抜き出しに成功できました!
set a=ab]cd(ef
echo %a%
set b=%a:*(=%
echo %b%
call set c=%%a:%b%=%%
echo %c%
set d=%c:~0,-1%
echo %d%
set e=*]
echo %e%
call set title=%%d:%e%=%%
echo %title%
pause
後は上記の1行目を
set full=%1
echo %full%
set a=%full:*\=%
に変えたらドロップしたフォルダ名からも抽出できました!
今はifとforを調べているのですが
もしよろしけば次にやるべきことを教えて頂けないでしょうか?
どうかよろしくお願いします。
88:デフォルトの名無しさん
11/10/06 17:29:01.73
すいません、出来たと思っていたのは
"[ab] cd (ef)"ネームのフォルダだけでした。
"[ab] cd"の場合には別途それに合うbatでないと駄目でした。また、
set full=%1
set a=%full:*\=%
とさっきは書きましたが、これは後の*]で運よくパスを削って貰っていただけで
"cd"ネームのフォルダには対応できませんでした。
どうすればsetにフォルダ名だけを載せれるかわかりません。
それも問題ですが他にも頓挫してる場所がありまして
もしよろしければダメ出しをして頂けると嬉しいです。
以下に作ってみたbatを書きます。もしお手数でなければ診てやって下さい。
よろしくお願いします。連投すいません。
89:デフォルトの名無しさん
11/10/06 17:31:57.91
"abcdef.bat"
set full=%1
set a=%full:*\=%
set b=%a:*(=%
call set c=%%a:%b%=%%
set d=%c:~0,-1%
set e=*]
call set title1=%%d:%e%=%%
echo %title1%
rem ↑ここまでさっきと同じ。[ab] cd (ef)ネームの場合だけ成功。"[ab] cd"ネームの場合はここまでくる途中で既にボロボロになってるので、そのボロボロを一回放棄(null?どうやって挟む?)が↓のためになるのか検討中。
if i not exist %title1% (call abcd.bat) else call hikakuj.bat
rem 他のbatに渡らない。今は↑を試行錯誤中
"abcd.bat"
set full=%1
set a=%full:*\=%
set b=*]
call set title2=%%a:%b%=%%
echo %title2%
rem ここまでは[ab] cdネームであれば成功。以下略失敗
if i not exist %title2% (call cd.bat) else call hikaku.bat
"cd.bat"
rem そもそも失敗
set full=%1
set title3=%full:*\=%
echo %title3%
if i exist %title3% (call hikaku.bat)
"hikaku.bat"
rem まだ渡ってさえいない
if i %title1%==%title2% ()改行if i %title1%==%title3% ()改行if i %title2%==%title3% ()
90:デフォルトの名無しさん
11/10/06 19:30:24.24
とりあえず "コマンド バッチ" でググれ
あと
set /?
for /?
if /?
call /?
くらいはよく読んでわからなければ試してどういう動作になるか確認して覚えれ
バッチにドロップしたフルパスの取得とフォルダ名の取得は
set DPATH="%~1"
set DNAME="%~nx1"
文字列は常に""で囲まれるようにしないと
バッチの中で特別な意味のある"&"なんかの文字が含まれていた場合、誤動作してエラーになる
そういった対処しながら"タイトル"を抜き出そうとすると
set b=%a:*(=% は set b="%a:*(=% こうなったり。削る側の外側に"を置く。
set d=%c:~0,-1% は set d=%c:~0,-2%" 他にも細かく変更が必要
](があったりなかったりする場合は該当の文字があるかないか判別して
あれば処理をする。といった判定処理が必要になってくる
"[レーベル] タイトル (ジャンル)"
"[レーベル] タイトル "
" タイトル "
"タイトル"
処理の流れとしたらこんな感じかな
最後に" タイトル "の先頭末尾 (実際には2文字目と後ろから2文字目) が
" 半角空白" " 全角空白"かを判定して真なら削ってループ。偽なら抜ける。
で"タイトル"の取得完了
echo on にして途中で echoして pause入れて確認したりとかしながらがんばれ
複数のパス渡して"タイトル"の重複を比較するとなると
"フルパス" "タイトル"を関連付けて環境変数に保持することになるから動的な配列とかかな
URLリンク(d.hatena.ne.jp)
この辺参考になるかもね
91:デフォルトの名無しさん
11/10/06 21:00:10.20
>>90
とても為になるアドバイスをありがとうございました。
未だ変数、装飾子、文字列の区別も曖昧ですが、今後は文字列を意識して見ていきたいと思います。
また、%~nxは名前.拡張子の表示だと思っていたのですが、フォルダにも使えるのですね!
そして、私は%1なら""付きだからと安心していたのですが、%~1でこれを""で囲った方が良いのですね。
今後はそのようにします。そして](の判定ですね。上記を修正したら取りかかりたいと思います。
紹介頂いたURLまでたどり着けるように頑張ります。どうもありがとうございました。
92:デフォルトの名無しさん
11/10/06 21:21:41.03
>>91
"タイトル"同士を厳密に比較出来なくて良くて
対象フォルダが全て同じフォルダにある
パスの書き出しのみ
というエクスプローラーで検索と変わらないようなので良ければもっと簡単に出来るよ
c:\test\music 以下にあるなら
dir /ad /b /s "c:\test\music" | find "タイトル"
この結果をテキストに整形しながらリダイレクトするとかでリスト化は可能かな
93:デフォルトの名無しさん
11/10/06 22:34:23.34
入力上call set c=%%a:%b%=%%
画面上C:\test\juufuku>call set c=%a:"甲乙&&!!?)"=%
なのにecho %c%をすると
"[あああ] aaa (甲乙&&!!?)"削れてない・・・orz
call set c="%%a:%b%=%%だと認識されないしset b="%a:*(=%との違いが分からないや…
明日set /?から"を探してみよう。
この説明もtxt出力出来れば楽に見れるんだけどな・・・それも明日にしよう
>>92
"タイトル"を抜き出す事が出来ましたらさっそくやってみます。
私には今の段階でもかなりキツいので、ここらへんが潮時なのかもしれません。
渡りに船になればよいのですが、ご紹介ありがとうございました。
94:デフォルトの名無しさん
11/10/06 23:25:49.60
>>93
%変数:置換文字列=置換後文字列%
set a=abcdef
echo %a:ab=123%
echo %a:ab=%
call set c=%a:"甲乙&&!!?)"=%
これだと置換する文字列は「"甲乙&&!!?)"」
(「」は含まず。以下も同じ)
%c%が 「"[あああ] aaa (甲乙&&!!?)"」
だとすると
「甲乙&&!!?)"」なら存在するが
「"甲乙&&!!?)"」は存在しない
call set c=%%a:%b%=%%
%b%の文字列を""で囲みつつ""を外して使いたいなら
%b:~1,-1%
こう直せばいい
call set c=%%a:%b:~1,-1%=%%
> この説明もtxt出力出来れば楽に見れるんだけどな
set /? >sethelp.txt
リダイレクトでテキストファイルに書き出せばいい
95:デフォルトの名無しさん
11/10/06 23:26:46.18
"あいう" と書いた時に認識されてるのは「あいう」という文字列ではなく
「"あいう"」という文字列
%a:"あいう"=% で置換されるのは 「123"あいう"えお」であり
「123あいうえお」には反応しない
96:デフォルトの名無しさん
11/10/07 16:45:46.83
>>94-95
ありがとうございます。もの凄く分かりやすかったです。
echo %a%→"[あ&あ] a&a (甲&乙)" "も普通の文字
echo %b%→ "甲&乙)" "も普通の文字
%b%の「"甲&乙)"」は%a%で存在(完全一致)しないので%a%から%b%は検出できない
なので、%b%を「甲&乙)」の形にして、完全一致にもっていく。と理解しましたが
どうした訳か上手くいきません・・・orz
rem フォルダ名「[あ&あ] a&a (甲&乙)」これを↓のbatにマウント
set a="%~nx1"
echo %a%
set b="%a:*(=%
echo %b%
1、call set c="%%a:%b:~1,-1%=%%
→C:\test\juufuku>call set c="%a:甲&乙)=%
2、call set c="%%a:%b~1%=%%
→C:\test\juufuku>call set c="%a:甲&乙)"=%
1&2、echo %c%
→C:\test\juufuku>echo
→ECHOは <ON> です。
1&2、rem %c%←この場合はC:\test\juufuku>remとしか表示されす、以降のコマンドもバグッたままでした。
helpを入手しました。どうもありがとうございました。
97:デフォルトの名無しさん
11/10/07 18:05:02.34
@echo on
setlocal disabledelayedexpansion
set a="[あ&あ] a&a (甲&乙)"
set b="甲&乙)"
set b=%b:&=^&%
call set c=%%a:%b:~1,-1%=%%
echo %c%
pause
exit /b
98:デフォルトの名無しさん
11/10/07 18:59:13.39
>>97
"タイトル"を無事に抜けました!
とりあえず困った時は&を^&にしてみます!ありがとうございます!
ただ、紹介頂いたコマンドでは遅延展開をsetlocalで無効とのことでしたが
私の方ではそれを外してしまいました。遅延展開が良く分からないので調べてみます。
::成功
rem :ABCDEF
set a="%~nx1"
echo %a%
set b="%a:*(=%
echo %b%
set b=%b:&=^&%
echo %b%
call set c=%%a:%b:~1,-1%=%%
echo %c%
set d=%c:~0,-3%"
echo %d%
call set title1="%%d:*] =%%
echo %title1%
→"a&a"
rem goto END
pause
今からifで"[レーベル] タイトル"と"タイトル"を頑張りたいと思います。
ただ、昨日もとりあえず&がないバージョンでやってみたんですが
if /i exist "](" (goto ABCDEF) else (goto ABCD1)
この"]("や"]"では判別がうまくいきませんでした。
とりあえず専念してみます。ほんとうにありがとうございました。
99:デフォルトの名無しさん
11/10/07 20:39:45.92
発想を変えてforから%title1,2,3%を抜こうと思ったのですが
@echo on
setlocal disabledelayedexpansion
for /D %%X in (*]*"("*) do (
echo a="%%~X"
set a="%%~X"
echo %a%
set a=%a:&=^&%
echo %a%
)
pause
URLリンク(www.dotup.org)
こうなってしまいます。これを解決したとして
"[レーベル] タイトル"の場合にfor /D in (*]*)これだと先の (*]*"("*) も含まれてしまい上手くいきません。
今はこれが精いっぱいなんですが、このエネルギーを
for /D %%X in (*) do (if exist ファイル名 (goto ABCDEF) else goto ABCD)
これの形に全力投球しても良いでしょうか?
ifのファイル名を何とかforの(セット)みたいに出来ないか検索中です。
方向性が合っていれば良いのですが…どうかよろしくお願いします。
100:デフォルトの名無しさん
11/10/07 21:02:23.01
すいません、書き方が間違っていました。
正確にはこうでした。
URLリンク(www.dotup.org)
101:デフォルトの名無しさん
11/10/07 21:51:38.52
@echo on
setlocal disabledelayedexpansion
set DNAME="[あ&あ] a&a (甲&乙)"
echo %DNAME%|find "(" 1>nul
if errorlevel 1 ( set DTITLE=%DNAME%
) else ( call :DEL_GENRE )
echo %DTITLE%|find "]" 1>nul
if not errorlevel 1 ( set DTITLE="%DTITLE:*]=%
)
call :DEL_SPACE
echo %DTITLE%
pause
exit /b
:DEL_GENRE
set DGENRE="%DNAME:*(=%
set DGENRE=%DGENRE:&=^&%
call set DTITLE=%%DNAME:%DGENRE:~1,-1%=%%
set DTITLE=%DTITLE:~0,-2%"
exit /b
:DEL_SPACE
rem DTITLE前後の空白文字削除処理
exit /b
"[あ&あ] a&a 甲&乙)" も "[あ&あ a&a (甲&乙)" も大丈夫だが "[あ&あ a&a 甲&乙)" は失敗する
"[あ&あ a&a 甲&乙" だと大丈夫だから ")" のみだとマズいのかも。よくわからん
102:デフォルトの名無しさん
11/10/07 22:18:03.36
>>101
こんなに沢山書いて頂いて本当にありがとうございます!
findと1>nulとif errorleve 1さらにcallまで使用して頂いて
とても勉強になります!よく意味を調べて
使えるようになった上で適応させてみます!
こんなコマンドがあったんですね!盲目になってました。
今日は寝るまで>>101のコマンドを解読しようと思います。
ご丁寧にどうもありがとうございました!
103:デフォルトの名無しさん
11/10/08 01:58:10.42
>>101
> "[あ&あ a&a 甲&乙)" は失敗する
if not errorlevel 1 ( set DTITLE="%DTITLE:*]=%
)
これがダメ
if not errorlevel 1 ( call :DEL_LABEL )
call 使ってここもサブルーチン化
104:デフォルトの名無しさん
11/10/08 02:40:16.51
if not errorlevel 1 set DTITLE="%DTITLE:*]=%
()使わなければいいんじゃねーの?
callしといたほうが無難そうだけどな
105:36
11/10/08 03:29:47.11
すいません、質問なんですが
batって最大でいくつくらい同時に起動しても大丈夫でしょうか?
batとは関係ないのですが
以前単なるD&Dでドライブをまたいてファイルなどを一気にコピーした際に(80GB程度)
どうゆう訳かコピーが出来ていないファイルや使えなくなったファイルありまして…
同時起動するbatについては処理中には特にPCも重くならないのですが
先のD&Dのような破損やバイナリが変わったらどうしようと思い質問しました。
bat自体の数は1つで下記になります。>>45さんに作って頂いたものです。
@echo off
:loop
if "%~n1"=="" goto end
cd /d "%~dp1"
2>nul "%cd:\="&set "HIRAGANA=%"
move %1 "Z:\hoge\bbb\%HIRAGANA%\"
echo %~n1
shift /1
goto loop
:end
echo end
pause
使っているソフトウェアからファイルをこのbatに送る際
ソフトウェアの制約で複数ファイルを送る場合には
その複数ファイル個分だけこのbatを多重起動させる必要があるのです。
batを起動できる個数は設定上Simultaneous runs;Unlimitedで無制限ですが
今は不安なので5個程度、10個以上の場合は実際のbatにソフトウェア上からドロップしています。
ファイルは1つ50MB程度で、同一ドライブ内での移動になります。
何か思い当たるところがありましたらコメントを頂けると助かります。
それではどうかよろしくお願いします。
106:デフォルトの名無しさん
11/10/08 05:10:28.71
> batって最大でいくつくらい同時に起動しても大丈夫でしょうか?
OSの仕様や搭載メモリ容量によるかもしれんし俺にはよくわからん。すまんね
> 以前単なるD&Dでドライブをまたいてファイルなどを一気にコピーした際に(80GB程度)
> どうゆう訳かコピーが出来ていないファイルや使えなくなったファイルありまして…
firefilecopy使え
ベリファイ出来るしcuiからも使えるからbatに組み込むことも出来る
> 使っているソフトウェアからファイルをこのbatに送る際
> ソフトウェアの制約で複数ファイルを送る場合には
> その複数ファイル個分だけこのbatを多重起動させる必要があるのです。
パスひとつずつbatに送ってるならもしかして上のスクリプト意味無いんじゃないの?
その「使っているソフトウェア」とやらのサポートかスレで聞け
107:36
11/10/08 07:55:45.20
>>106
いえいえ、とんでもないです。
firefilecopyちょっと実験してみます。
ちなみにPCスペックは下記になります。
CPU core2cuo 2.9GHz
メモリ 4G
OS vista 64bit
>上のスクリプト意味無いんじゃないの?
複数用のbatで1つだけファイルを処理しているので、全く意味が無いわけでは無いですが
殆ど無駄になっている感じではあります。せっかく皆様に教えて頂きながら作ったのに
こちらこそ申し訳ないです。ただ、ソフトウェア上から送る場合にはbat複数起動ですが
ソフトウェア上から実際のbatにD&Dする場合にはbat1つだけ起動して処理できています。
ただ、これが多少おっくうなので、送るボタン(複数起動)で処理したく伺わせて頂いた次第です。
ありがとうございました。
108:デフォルトの名無しさん
11/10/08 08:36:49.94
>>107
@echo off
if not exist "%~1" goto :eof
set fpath="%~1"
move %fpath% %fpath:\aaa\=\bbb\%
それならこれだけでOK
ffc.exe使うならmoveと差し替えて適切なコマンドラインスイッチを追加
109:102です!出来ました!
11/10/08 12:16:55.81
set DNAME="フォルダネームを手入力"については全て問題なく?出来ました。
しかし、ドロップしたフォルダについては"タイトル"(&入り)だけ出来ませんでした。
名前がabc&defだとしたら、一番最初のset DNAME="%~nx1%"で&の手前のabcまでしか入らないみたいでした。
何度も晒して恐縮なんですが、また暫定のbatを下記に書いておきます。
もしよろしければアドバイスを頂るとありがたいです。
@echo on メイン
setlocal disabledelayedexpansion
set DNAME="%~nx1%"
echo %DNAME%|find "(" 1>nul
if errorlevel 1 ( set DTITLE=%DNAME%
) else ( call :DEL_GENRE )
echo %DTITLE%
echo %DTITLE%|find "]" 1>nul
if not errorlevel 1 ( call :DEL_LABEL )
echo %DTITLE%
echo %DTITLE%|findstr /r /c:"^. ." 1>nul
if not errorlevel 1 ( call :DEL_SFARST )
echo %DTITLE%
echo %DTITLE%|findstr /r /c:"^. ." 1>nul
if not errorlevel 1 ( call :DEL_BFARST )
echo %DTITLE%
echo %DTITLE%|findstr /r /c:". .$" 1>nul
if not errorlevel 1 ( call :DEL_SLAST )
echo %DTITLE%
echo %DTITLE%|findstr /r /c:". .$" 1>nul
if not errorlevel 1 ( call :DEL_BLAST )
echo 完成したタイトル=%DTITLE%
pause
exit /b
110:続き
11/10/08 12:19:50.67
:DEL_GENRE
set DGENRE="%DNAME:*(=%
set DGENRE=%DGENRE:&=^&%
call set DTITLE=%%DNAME:%DGENRE:~1,-1%=%%
set DTITLE=%DTITLE:~0,-2%"
exit /b
:DEL_LABEL
set DTITLE="%DTITLE:*]=%
exit /b
:DEL_SFARST
set DTITLE="%DTITLE:~2%
exit /b
:DEL_BFARST
set DTITLE="%DTITLE:~2%
exit /b
:DEL_SLAST
set DTITLE=%DTITLE:~0,-2%"
exit /b
:DEL_BLAST
set DTITLE=%DTITLE:~0,-2%"
exit /b
また、現在はいよいよbatクリックでその階層に表示されている、全てのフォルダから"タイトル"を抜く処理に取り掛かっているのですが、これもうまいこといきません。例えば3行目を
for /D %%X in (*) do ( 改行 set DNAME="%%~X"
に置き換えて、forの〆である「)」をどこにおけば良いのか試行錯誤してるのですが未だ成功しません。また、他には3行目に
for /D %%X in (*) do ( call :LOOP ) 改行 pause 改行 exit /b 改行 改行 :LOOP 改行 set DNAME="%%~X"
と置き換えてみましたが、%~X自体が無効になってしまいました。ホント質問ばかりで恐縮なんですが、どうか叱咤ご鞭撻のほどよろしくお願いします。
111:デフォルトの名無しさん
11/10/08 12:29:40.60
DEL_(S,B)FARSTなんて言葉ないですね、デリート(スモール、ビック)FIRSTの意味です。それと
>>103,>>104
ありがとうございます。さっそく使わせて頂きました。
何度も連投して申し訳ないのですが、もう少しの間だけお相手お願い致します。
112:デフォルトの名無しさん
11/10/08 13:48:37.77
> ドロップしたフォルダについては"タイトル"(&入り)だけ出来ませんでした。
パスにスペースが無くて&が入ってるとwinのドロップハンドラが""で囲まずにパスを送るからそうなる。winの仕様
例えばdirの結果から使うとか該当ディレクトリにcdしてfor(*)で受け取るとか別の方法考えたほうがいい
どうしてもドラッグドロップから使いたいのなら%cmdcmdline%から引数を受け取るという方法があるけど
これらのキーワードからどうすればいいか自分で思い付けないようであればやめといたほうがいい
簡単な解決策としてはパスにスペースを入れること
c:\test\music以下にあるとしたらc:\test\X music X
とか上位のディレクトリにスペース入れれば、「たぶん」問題なくなる
> :DEL_SFARST
> set DTITLE="%DTITLE:~2%
> exit /b
> :DEL_BFARST
> set DTITLE="%DTITLE:~2%
> exit /b
全く同じ処理してるんだからサブルーチン分ける必要ない
echo %DTITLE%|findstr /r /c:"^. ." 1>nul
if not errorlevel 1 ( call :DEL_SFARST )
echo %DTITLE%
echo %DTITLE%|findstr /r /c:"^. ." 1>nul
if not errorlevel 1 ( call :DEL_SFARST )
私ならif "%DTITLE:~1,1%"==" " とかで判定してgotoでループさせるかな
スペースひとつとは限らないし。位置も特定されたものを判定だから。
> )」をどこにおけば良いのか試行錯誤してるのですが未だ成功しません。
> for /D %%X in (*) do ( 改行 set DNAME="%%~X"
いきなり本番書き上げようとせずにtest.batとか作って必要最小限で構文試せ
echo が基本
for /D %%X in (*) do (echo "%%~X"
せめてロジックを思い付けれるくらいにはコマンドの動作を理解したほうがいい。丸暗記する必要は全く無いが
どんなコマンドがあるとかコマンドの説明書いてるサイトやリファレンスを一通り読んで
コマンドごとに簡単なものを書いてみて、もう少し理解を深めることを勧める。forの中でしかfor変数は使えない
113:デフォルトの名無しさん
11/10/08 15:19:37.10
>>112
骨身に沁み入ります。善処します。
上位のディレクトリに"タイトル(&入り)"を挟んだところ、正常に処理が出来ました。
ラベルを同一にすればよかったのですね。そこまで気が回りませんでした。
>if "%DTITLE:~1,1%"==" "これならかなり絞り込めますね。
先のfindやifの流れから、練習問題として捉えてました。
正規表現に浮かれて盲目になっていたのもありますが、とても参考になりました。
しばらくgotoとforのサンプルをechoを使いながら見てみます。
身の丈に合わない早歩きで不愉快な思いをさせてしまい申し訳ありませんでした。
そしてご丁寧にどうもありがとうございました。
114:デフォルトの名無しさん
11/10/08 19:52:00.13
>>109の3行目を下に置き換えたら成功しました。
また、簡単なものですがソートもさせてみました。
for /D %%X in (*) do (
echo "%%~X"
set DNAME="%%~X"
call :MAIN %DNAME%
)
sort aaa.txt >bbb.txt
del aaa.txt
pause
exit /b
:MAIN
echo %DNAME%
rem ここまで
rem 以下MAINの下から2行目を置換え
echo "%DTITLE:~1,-1% 「Tab*2」 ¥%DNAME:~1,-1%" >>aaa.txt
次はタイトルが同じものだけをサブディレクトリに入れるような
そーゆうコマンドに調整していこうと思います。
とりあえず一段落ついてホッとしました。サポートをして頂いた皆様に感謝します。
どうもありがとうございました。
115:デフォルトの名無しさん
11/10/08 20:56:39.36
> for /D %%X in (*) do (
> echo "%%~X"
> set DNAME="%%~X"
> call :MAIN %DNAME%
> )
@echo off
for /d %%X in (*) do ( call :MAIN "%%~X" )
pause
exit /b
:MAIN
echo %1
exit /b
callに引数付けてサブルーチンに送るならサブルーチンでは%1で受け取る
call :MAIN "%%~X" "YY" "ZZ"とか複数送る場合は%1,%2,%3...となる
@echo off
for /d %%X in (*) do ( set DNAME="%%~X"
call :MAIN
)
pause
exit /b
:MAIN
echo %DNAME%
exit /b
環境変数にセットするならサブルーチンでも変数名で使える
用途に応じて使いやすいほうを。
set の文は末尾にスペースが入ったりする場合もあるから改行で終わるようにしたほうが無難
改行で終われない場合でスペースが入らない書き方が出来てるか確認するには
echo %DNAME%%DNAME%
とかで二つ重ねてechoしてみればわかる
116:デフォルトの名無しさん
11/10/08 22:48:56.39
sortはリダイレクトでファイルに出力した場合は
自分自身をソートするという使い方は出来ないけど
/o で出力した場合は自分自身もソートできる。
リダイレクトして元ファイルを削除するなんて事をしなくてもいい。
117:デフォルトの名無しさん
11/10/08 23:09:11.12
ソートはしらなんだ
118:デフォルトの名無しさん
11/10/08 23:12:00.92
type aaa | find "aaa" | sort /+1000000 /o aaa
119:デフォルトの名無しさん
11/10/10 06:31:34.40
カーナビのmp3の再生順序が、ファイル名や更新日時などではなく
FATテーブルに書き込まれている順序で再生されるのですが、
この並び順を変える良い方法はありませんか?
120:デフォルトの名無しさん
11/10/10 08:15:04.51
一昨日のあれから"タイトル"が重複するフォルダの移動に取り掛かっているのですが
全くうまくいかずに心が折れました。色々試したつもりではあるのですが…
もしよろしければ、次に何をすべきか、どう組み立てるべきかご教示願えないでしょうか?
>>90さんに紹介頂いた配列変数や、>>115さんに教えて頂いたcall :ラベル 複数→%1,%2%3
これを活用できないかと考えてはみたのですが、私の力では想像が足りませんでした。
せっかく紹介して頂いたのに申し訳ありません。
どうか智慧をお貸し下さい。お願いします。
121:デフォルトの名無しさん
11/10/10 10:05:15.18
>>120
結局どうしたいの?
重複がわかりやすくなって簡単な方法であれば
フォルダ名を "[レーベル] タイトル (ジャンル)"→"タイトル [レーベル] タイトル (ジャンル)"
とか元のフォルダ名の前にタイトル追加すれば綺麗に並ぶ
"タイトル"tab"ディレクトリパス" とテキストにリスト化することだって出来るし
ディレクトリを "\タイトル\[レーベル] タイトル (ジャンル)\" と
タイトルフォルダ作ってそこへコピーすることだって出来る
それに重複「だけ」にこれらの操作を適用するのか全てのディレクトリに適用するのかとか
(もちろん面倒なのは「重複だけ」の方) 全てに適用でタイトルフォルダへコピーなら
タイトルを比較する必要もなくなる
前にも書いたけど厳密に比較でなく乱暴でよければ
dirの結果を"タイトル"でfindしてその結果を"タイトル"フォルダへコピーとかなら
全ての対象フォルダからタイトル抜いて配列orリスト.txtにして"タイトル"を比較とかしなくて済む
方法なんていくらでもあるしやろうと思えば出来るから。
ただ、あなたがどうしたいかによってやり方や難易度は全然変わってくるので
どういう動作をさせる&させたいのかはっきりしてくれないとこの先はアドバイスしようがないよ
122:デフォルトの名無しさん
11/10/10 10:14:30.08
>>119
それがわかってるなら再生させたい順で転送しなおせば?
あとそれってバッチは関係あるの?
123:デフォルトの名無しさん
11/10/10 10:33:58.09
>>121
様々なプランを提示して頂いてありがとうございます。
具体的にやりたい事は、C:\test\juu fuku\ここでbatを実行し
この階層にある全てのフォルダ(フォルダネームは弄らない方向で)を対象に
タイトルが重複するものだけを、C:\test\juu fuku\該当\に移動できるようしたいと思ってます。
面倒になってしまい恐縮ですが、ひとつよろしくお願いします。
124:デフォルトの名無しさん
11/10/10 21:13:00.51
1つ目の方法
titlelist.txtに"C:\test\juu fuku"配下のフォルダを対象に"タイトル" "フォルダ名"書き出し
titlelist.txtから"C:\test\juu fuku\該当"の行を削除
ここからループ処理
titlelist.txtから1行目が読み込めなければ終了処理
titlelist.txtから1行目の"タイトル"を読み込んで find /c """タイトル""" "titlelist.txt"
結果が1ならtitlelist.txtから1行目を削除してループに戻る
結果が2以上ならfind """タイトル""" "titlelist.txt"の結果をforで2番目のtoken抜き出して"フォルダ名"を順に取り出し
move "C:\test\juu fuku\フォルダ名" "C:\test\juu fuku\該当\フォルダ名"
titlelist.txtから"タイトル"の行を削除してループに戻る
2つ目
一度全てのフォルダを"C:\test\juu fuku\該当\タイトル\フォルダ名"とする
"C:\test\juu fuku\該当\"でdir /ad /bとかで"タイトル"フォルダ名を
forで順に取得してdirで"タイトル"フォルダ配下のフォルダ数を判定
"タイトル"フォルダ以下にフォルダがひとつであれば
"C:\test\juu fuku\フォルダ名"へ移動
ふたつ以上ならそのまま
上の処理が終わったら"C:\test\juu fuku\該当\タイトル\フォルダ名"を
"C:\test\juu fuku\該当\フォルダ名"へと移動して終了
他にも方法はいくらでもあるだろうけどとりあえずこんなところかな。
2つ目の方が簡単だけどコピーする数増えるしコピーで壊れる確率も増える
ベリファイする処理混ぜるとかコピーに>>106が言ってたfirefilecopy使ってベリファイするとかすればいい
自分で無理そうならこちらへ
気軽に「こんなソフトありませんか?」 Part.141
スレリンク(software板)
◆こんなソフトウェアつくってください~Part16~◆
スレリンク(software板)
125:デフォルトの名無しさん
11/10/10 22:12:28.47
> 2つ目
> 一度全てのフォルダを"C:\test\juu fuku\該当\タイトル\フォルダ名"とする
"C:\test\juu fuku\TMP\タイトル\フォルダ名"
とかのほうがいいな
一旦全てを"C:\test\juu fuku\TMP"へ移動
そこから
"C:\test\juu fuku\Not juufuku"と"C:\test\juu fuku\該当"へ振り分ける感じで
まあ処理がわかりやすくなれば分けるフォルダ名はなんでもいいよ
126:デフォルトの名無しさん
11/10/11 00:02:59.36
質問者は >>80 を見るとバッチファイルにこだわっているわけではないようだし
テンプレにも「※何でも無理矢理バッチでやろうとせず、WSH等の使用も検討しましょう。」とあるように
他の言語を使ったほうがいいんじゃないか?
そもそもバッチファイルによる高度なプログラミングは初心者向きではなく、職人芸みたいな感じだし
127:デフォルトの名無しさん
11/10/11 00:05:54.23
>>124,>>125,>>126
ありがとうございます。挑戦させて頂いたのですが
またもや分からない点が溢れだしました。
しかし、これ以上私のレスでここを埋めてしまうのも忍びないので
一度、誘導して頂いたスレッドで依頼してみます。
ただ、並行して1つ目は理解できるよう挑戦していきたいと思います。
それとWSHについてもROMってみるとよく話題にのぼっているので
私も調べてみます。どうもありがとうございました。
128:デフォルトの名無しさん
11/10/11 15:45:30.09
自分も>>101を試してみようとそのままbatにしてみたのですが
echo %DNAME%|find "(" 1>nul
find: invalid expression; expected to find a ')' but didn't see one.
Perhaps you need an extra predicate after '('
このように表示されてしまいました。
おそらく自分だけ?だと思うので何か環境がまずいのだとは思うのですが
何がまずいんでしょうか?winXPを使ってます。
129:デフォルトの名無しさん
11/10/11 16:44:47.21
find/?
where find
130:デフォルトの名無しさん
11/10/11 17:24:09.98
>>129
find /?さえ開けない・・・
コマンドプロント開いて%PATH%打ったらどう表示されますか?
多分ここが違うものに変更されて出来なくなったのかなぁ
131:デフォルトの名無しさん
11/10/11 17:54:01.17
for %I in (find.exe) do echo %~$PATH:I
132:デフォルトの名無しさん
11/10/11 18:09:54.10
>>131
実行したら
C:\Ruby192\bin\find.exe
になりました。Ruby192は今日インストールしたやつです。
これからどうすればよいのでしょうか?
133:デフォルトの名無しさん
11/10/11 18:43:25.57
>>129
where findってそーゆうことだったんですか
てっきり英語で聞いてるのかと思ってました、ごめんなさい。
where find
C:\Ruby192\bin\find.exe
C:\Windows\System32\find.exe
これ2つあるからRuby192の方のfind.exe削除しちゃって大丈夫ですかね?
削除しようとしても削除できなったんですけども。
とりあえず環境変数PATHの並び順をRubyの方を%SystemRoot%の後にしてみたら
とりあえずうまくいきました。これで問題ないですかね?
134:デフォルトの名無しさん
11/10/11 18:44:40.72
そもそもなんでrubyの方が前に来てるんだよ
135:デフォルトの名無しさん
11/10/11 18:53:36.18
別にPATHに頼らんでも
C:\Ruby192\bin\find.exe
C:\Windows\System32\find.exe
で好きなほうが使えるだろw
そんなことも知らなかった?
136:デフォルトの名無しさん
11/10/11 19:16:28.07
>>134
なんかインスコする時PATHがどうこうチェックしたったら前になったったった
>>135
知らないボクに教えて下さい><どうやるんです?
137:デフォルトの名無しさん
11/10/11 19:19:35.88
> 自分も>>101を試してみようとそのままbatにしてみたのですが
おまえ>>127だろ?なんで別人のフリしてんの?
スレリンク(software板:88-98番)
138:デフォルトの名無しさん
11/10/11 19:24:39.25
>>137
そのスレで知って来たんですけど別人です
139:デフォルトの名無しさん
11/10/11 19:31:12.09
そもそもRuby入れてどうするのさ
140:デフォルトの名無しさん
11/10/11 19:40:25.44
>>139
なんか色々使いまわしできそうなフリーソフトの内容だったから自分も欲しくなって。
Rubyのソース貼ってあったしちょっとやってみようかなと入れて見ました。
141:デフォルトの名無しさん
11/10/11 19:45:44.76
>>136
>>135に書いてあるだろボケ
142:デフォルトの名無しさん
11/10/11 19:56:13.96
バッチも使えないのがRubyなら使える?
143:デフォルトの名無しさん
11/10/11 20:49:01.35
>>140
人のマネするなら真摯な受け答えと学習の姿勢も見習った方がいいぞ。
144:デフォルトの名無しさん
11/10/11 21:22:07.29
>>143
> 学習の姿勢も見習った方がいいぞ。
誰を見習うの?>>127のことを言ってるのならあいつ学習なんてしてなかったと思うが。
あいつが動かないって言って貼ったやつ見たらほとんど試してねーのまるわかりじゃん。
教えたがりのバカもほどほどにしろよと。
スレリンク(software板:88番)
> 途中までbatで皆様の助けを得ながら作りましたので
> "タイトル"の抜き出しまでですが
とか言ってるけど>>101と>>103がまるまる書いたんじゃねーかよw
145:デフォルトの名無しさん
11/10/11 22:03:54.50
まあ、重複を調べるなら初めから他の言語で教えたほうが良かったんじゃとは思う
146:デフォルトの名無しさん
11/10/12 00:01:52.28
>>144
本当にその通りだと思います。言葉の綾にしても酷すぎました。
>>101さんと>>103さん、申し訳ありませんでした。
そしてもう一度、ありがとうございました。
また、お陰様で依頼の品を作って頂く事が出来ました。
紹介して頂いた>>124さんありがとうございました。
最後に、今までの長きに渡りご指導を頂きました皆様に感謝します。
無知な私に時には厳しく、時には易しく教示して頂いた事を忘れず
これらも精進していけたらと思います。本当にありがとうございました。
それでは失礼します。
スレをかき乱してしまい申し訳ありませんでした。
147:デフォルトの名無しさん
11/10/12 23:36:51.13
rem >>114のpauseに下記を代入
md "[重複フォルダ]"
set DPATH="%~dp0"
for /f "delims=, tokens=1,2" %%i in (bbb.txt) do call :sub %%i %%j
for /f "delims=," %%k in (ccc.txt) do call :last "%%~k"
del bbb.txt&del ccc.txt
rem >>110の最後に下記を挿入
:sub
set DNAME=%2
for /f "tokens=1-3" %%a in ('find /c ""%1"" "bbb.txt" ^|find "-"') do (
if %%c==2 echo "%DNAME:~1,-1%",>>ccc.txt
)
exit /b
:last
set DMOVE=%1
move "%DPATH:~1,-1%%DMOVE:~1,-1%" "%DPATH:~1,-1%[重複フォルダ]\"
pause
exit /b
これで重複フォルダのみを移動する事ができました。
教えて頂いたせめてもの誠意として、完成品を書きました。
他にも欲しいとおっしゃる方がいましたので、もしよろしければ使ってみて下さい。
本当は>>124さんに教えて頂いたものをそのまま書きたかったのですが
私の力では理解が足りず、再現することが出来ませんでした。しかし、大変為になるロジックばかりで
このコマンドを作成するにあたり大変お世話になりました。改めてありがとうございました。
それでは失礼しました。
148:デフォルトの名無しさん
11/10/12 23:50:38.95
192.168.0.1という文字列を引き渡して、最後の1だけを254に
置き換えたいのですが、どうやったらできますでしょうか?
forを使ってやってみたのですが、うまく置き換えられません。
よろしくお願いします。
149:デフォルトの名無しさん
11/10/12 23:51:22.22
>>147
動かないです><
150:デフォルトの名無しさん
11/10/12 23:56:17.44
>>148
set a=192.168.0.1
echo %a:~0,-1%254
151:デフォルトの名無しさん
11/10/13 00:03:12.90
>>149
すいません、忘れてました。>>109のpauseに下記を代入してください。
echo "%DTITLE:~1,-1%","%DNAME:~1,-1%">>aaa.txt
これで多分大丈夫だと思います。
152:デフォルトの名無しさん
11/10/13 00:20:07.61
set a=192.168.0.1
set b=254
for /f "tokens=1,2,3,* delims=." %%A in ("%a%") do set c=%%A.%%B.%%C.
echo %c%%b%
pause
exit /b
153:デフォルトの名無しさん
11/10/13 22:35:06.20
>>148
これだと一桁しかダメでした。説明不足ですみません。
>>152
うまくいきました!ありがとうございました。
154:デフォルトの名無しさん
11/10/14 19:58:12.44
set a=!?-,.、。!?~ー☆#♪
for %%x in (! ? - , . 、 。 ! ? ~ ー ☆ # ♪)do call set a=%%a:%%x=%%
echo %a%
このようにすると「,」と「?」が残ってしまうのですが
その2つも消すにはどうすればよいのでしょうか?
また、これは一体何が原因なのでしょうか?
155:デフォルトの名無しさん
11/10/14 20:12:15.64
エスケープされてないので
,は空白に置換
?は1文字ファイル名に置換
156:デフォルトの名無しさん
11/10/14 23:12:48.73
>>155
最初のsetを""で囲んでforのセットに^?^,でいけるかなと思ったんですが駄目でした。
他も色々と試してみたのですが、うまいことエスケープ出来ませんでした。
forの外ならset a=%a:?=%とset a=%a:,=%でエスケープもいらないのですが
仕組みを理解したいのでもうちょっと調べてみます。よく分かりませんが。
ありがとうございました。
157:デフォルトの名無しさん
11/10/15 00:55:29.25
set a=!?-,.、。!?~ー☆#♪
for %%x in (! ^^? "?" - "," . 、 。 ! ? ~ ー ☆ # ♪ ') do call set a=%%a:%%~x=%%
echo %a%
set a=%a:?=%
echo=%a%
pause
forの()中 ?は "?"はダメで ^^?でエスケープ出来るが %%xに渡してくれない
カレントディレクトリに1文字のファイル置けば一応エスケープされてることが確認できる
158:デフォルトの名無しさん
11/10/15 01:40:23.71
?はエスケープでけん
159:デフォルトの名無しさん
11/10/15 07:59:56.29
>>147
for /d /r c:\test %a in ("*タイトル*") do @echo %a
160:デフォルトの名無しさん
11/10/15 09:06:03.07
>>157、>>158
ファイル名に使えない=\|/:*<>は試してませんが
(! ^ ! ? ☆ ★ ♪ # # $ $ ~ - ― < > ー - "," " " " " . ・ 「 」 → 、 ” ’ 。 _ & + / \ ・ + "&" % @ @) do なんかは普通に通りました。後は遅延を考慮した""%%""位が特殊な形でした。
危険そうな所は避けているので他にもあるとは思いますが…これらは成功しました。
それでようやく理解しかけているのですが、例えば?と同じく出来なかった%の置換。
doの遅延で2つで1つ状態なので、セットの段階から%%にして、これに他と同じく
""を付けるのですが、他は%%~xで""を外しても大丈夫だったのですが
これは""を外して置くと特殊文字化するので、再びここで囲み直し
結果的に""%%""と二重で囲んで成功しました。
これは?にも当てはまって、""?""これで無効化された普通文字というのでしょうか
おそらく他もこの仕組みなんだろうと思いました。^自体は^^でした。
アドバイスのおかげで成功出来ました。どうもありがとうございました。
161:デフォルトの名無しさん
11/10/15 09:18:12.11
>>159
forはある程度理解できるようになったと思っていたのですが、全然浅かったです。
ありがとうございます。解読して挑戦してみます。まだgoto文が苦手なんですよね。
おそらくgoto文も使うのでちょっと腰を据えて学んでみます。ご紹介ありがとうございました。
162:デフォルトの名無しさん
11/10/15 14:22:35.26
set a=%%%!?-,.
echo %a%
for /f %%a in ('echo "%a%"') do @echo %%~a
for /f %%a in ('echo %a%') do @echo %%a
for /f %%a in ("%a%") do @echo %%a
pause
面白いなw
163:デフォルトの名無しさん
11/10/15 14:34:34.66
スレリンク(tech板:32番)
32 名前:デフォルトの名無しさん[sage] 投稿日:2011/03/09(水) 04:52:28.96
setlocal enabledelayedexpansion
set o=me
set me=de
set de=to
set to=u
set u=omedetou
set omedetou=^^^>^^^>31 説明しても良いが、何故かもう一回展開できてしまって、この理由が全く説明できないから、展開されるタイミングとか勘違いしてるかもしれんが良いか?
for /f %%A in ( 'call echo %%%%!%o%!%%%%' ) do call echo %%!%%A!%%
endlocal
164:デフォルトの名無しさん
11/10/15 14:44:44.95
>>162
どこが?当たり前だのクラッカだが?
165:デフォルトの名無しさん
11/10/15 14:48:55.47
スレリンク(tech板:45番)
45 名前:デフォルトの名無しさん[sage] 投稿日:2011/03/09(水) 22:13:30.35
>>43
んじゃ、このバッチで復習を
setlocal enabledelayedexpansion
set o=me
set me=de
set de=to
set to=u
set u=omedetou
set omedetou=おめでとう
for /f %%A in ( 'call echo %%^^^!%%%%!%o%!%%%%^^^!%%' ) do call echo %%A
endlocal
166:デフォルトの名無しさん
11/10/15 14:54:44.85
つまらん もちっと珍しいことはないのか?
167:デフォルトの名無しさん
11/10/15 15:28:12.86
ここを見てると、「(PerlやRubyのような)フリーソフトは危ないから導入禁止」
とかほざいてる馬鹿会社が、いかに罪深いかがよく分かるな。
まあ趣味でバッチを追究するのは、また別の話だが…
168:デフォルトの名無しさん
11/10/15 15:41:20.39
>>164
いや、ファイル名に%が付いてるのはどうなるかなと思ってね
たいした意味はないよ
169:デフォルトの名無しさん
11/10/15 15:44:12.87
べつにちっともこまらんが?
あるものを使いこなせない馬鹿社員が、いかに罪深いかがよく分かるな。
170:デフォルトの名無しさん
11/10/15 15:47:22.16
>>169
暇な窓際社員は呼んでない
171:デフォルトの名無しさん
11/10/15 17:46:30.61
forのfile setでは?はエスケープできないね
でもfor/fなら?が渡せるよ
URLリンク(scripting.cocolog-nifty.com)
の要領でfor /f in (複数行)にすればよい
172:デフォルトの名無しさん
11/10/16 15:19:28.43
亀レスだけど>>36
これ凄いな・・・職人芸を感じる。
他の言語知らないから普通の事かもしれんが
173:デフォルトの名無しさん
11/10/16 16:17:39.50
set a=!?-,.、。!?~ー☆#♪
set b=! ? - , . 、 。 ! ? ~ ー ☆ # ♪
for /f %%x in ('echo %b: =^&echo %') do call set a=%%a:%%x=%%
echo %a%
174:デフォルトの名無しさん
11/10/16 17:13:39.45
set a=!?-,.、。!?~ー☆#♪
set b=! ? - , . 、 。 ! ? ~ ー ☆ # ♪
for /f %%x in ('"echo %b: =&echo %"') do call set a=%%a:%%x=%%
echo %a%
175:デフォルトの名無しさん
11/10/16 17:34:19.64
何か云えよw
176:デフォルトの名無しさん
11/10/16 17:35:27.55
何か
177:デフォルトの名無しさん
11/10/16 17:37:14.47
これ凄いな・・・職人芸を感じる。
178:デフォルトの名無しさん
11/10/16 22:56:12.18
>>167
windows鯖いじる仕事だったら普通だけど、、
まあ、本番で使ってるのはもっとシンプルなバッチばっかりだけどな。
179:デフォルトの名無しさん
11/10/17 05:53:06.23
2>nul "%cd:\="&set "HIRAGANA=%"
これなにをやってるの?さっぱりわからない…
180:デフォルトの名無しさん
11/10/17 11:34:00.25
set dir=G:\ほげ1\ほげ2\
set dir=%dir:~0,-1%
2>nul "%dir:\="&set "target=%"
echo %target%
pause
フォルダ名を取得してるんじゃない
181:デフォルトの名無しさん
11/10/17 15:36:37.01
%~nxIを使えば済むところを物好きな
182:デフォルトの名無しさん
11/10/17 16:13:38.98
>>181
%~nxIだとカレントディレクトリ名でなく、そこにあるフォルダ名になると思うんだが
183:デフォルトの名無しさん
11/10/17 16:22:55.35
置換の方がfor使って書くより単純だけどな。
ちなみに最後の文字が\だと%~nxiもNGだからね…
184:デフォルトの名無しさん
11/10/17 16:28:36.69
あたま悪いの?
185:デフォルトの名無しさん
11/10/17 16:35:08.24
>>184
頭悪い本人乙
186:デフォルトの名無しさん
11/10/17 16:35:29.48
>>184
あたま良いの?なら書いてみてよ
187:デフォルトの名無しさん
11/10/17 16:36:36.04
for %%I in ("%~dp1.") do set HIRAGANA=%%~nxI
より
cd /d "%~dp1"
2>nul "%cd:\="&set "HIRAGANA=%"
とは物好きな
188:デフォルトの名無しさん
11/10/17 16:37:04.21
まあ待て。本人は頭がいいと思ってるのかもしれないけど、
知らない方がいいってこともある。
189:デフォルトの名無しさん
11/10/17 16:40:29.12
どっからcdなんて出てきたと思ったらえらい昔のレスじゃないか…
安価付けろボケ
190:デフォルトの名無しさん
11/10/17 16:48:52.08
ボケはおまえだけだが?
191:デフォルトの名無しさん
11/10/17 16:51:22.28
>>187
これ凄いな・・・職人芸を感じる。
192:デフォルトの名無しさん
11/10/17 17:11:58.24
>>191
もう許してやれよww
193:デフォルトの名無しさん
11/10/17 17:42:56.14
>>187
あたま悪くてごめんなんだけど
("%~dp1.")これはどうしてdp1の後ろに.がついてるの?
いや確かにこれがないと取得できないんだけど
何かをドロップしなくても"."になって取得できるし
そもそもの"."の意味もよく分からなくって、そこを教えてもらえると嬉しいです。
194:デフォルトの名無しさん
11/10/17 17:58:04.27
>>191
> これ凄いな・・・職人芸を感じる。
一銭にもならん職人芸だけどな。
195:デフォルトの名無しさん
11/10/17 18:02:09.59
dir .
すると
.
..
があるだろ?
a\b\c\.はa\b\cを指す。
a\b\c\..はa\bを指す。
つまり、\.は\.を削除、\..は\~\..を削除したものと同じ
というのがOSのパス名のコンベンションなんだよ
196:デフォルトの名無しさん
11/10/17 18:06:37.06
×職人芸を感じる
○職人技を感じる
と思ってたんだが違うのか?
それでネタにされてたんだと思ったがw
>>193
横レスで俺もよく分からんけど"."でカレントディレクトリを1つ上位のパスに戻してるんじゃないのか?
例えばcd ..だと1つ前に戻るけど、forの場合には1個でいいみたいな。試しに".."だと2つ前に戻った。
>>195
なるほど㌧
197:デフォルトの名無しさん
11/10/17 18:29:39.96
>>195
dirをしたときの.と..もずっと意味分かってなくて
今までは仕方なくそれを含めて計算してたんですが
なるほど、ようやく意味が分かりました。ありがとうございました!
>>196
ありがとうございます。試してみます。
198:デフォルトの名無しさん
11/10/19 20:12:37.19
FOR文の中にGOTOのラベルって書いたらNGですか?
FOR /f "usebackq tokens=*" %%j IN (`reg query "HKLM\System\CurrentControlSet\Services\Tcpip\Parameters\Interfaces"`) DO (
IF "! REG.EXE VERSION 3.0" EQU "%%j" goto Skip
IF "HKLM\System\CurrentControlSet\Services\Tcpip\Parameters\Interfaces" EQU "%%j" goto Skip
処理色々
:SKIP
)
こんな感じでかいたらエラーになっちゃいます。
199:デフォルトの名無しさん
11/10/19 20:15:32.28
gotoは書けるが、ラベルは複文の中に書けない
つまり脱出のみ
200:デフォルトの名無しさん
11/10/19 20:43:35.56
IF "! REG.EXE VERSION 3.0" NEQ "%%j" (
...
)
でいいんじゃないの。
インデント増えるけど。
ややこしい処理書きたくなったら
for %%i ... do call :eachline %%i
してサブルーチンに飛ばしちゃうと色々楽。
201:デフォルトの名無しさん
11/10/19 21:57:06.94
>199
>200
なるほど~、勉強になりました。
ありがとうございます。
202:デフォルトの名無しさん
11/10/23 17:43:31.29
ちょっと教えてください
あるディレクトリ以下のファイルを処理したくて、とりあえず
dir /b /s /a-d cd > list.txt
でファイル一覧を作りました
中身はこんな感じ
test\test11 test12\texta
test1\test13 test14\textb
test2\test15 test16\textc
で、その一覧をforで処理しようと思ったら、空白までしか読んでくれない
for /F %i in ( list.txt ) do コマンド
どうしたらファイルの中の空白を含む文字列を正しく読み込めますか?
203:デフォルトの名無しさん
11/10/23 17:48:11.55
いったんファイルに吐いているのは、多少加工するためです
前と後ろを少し切るためなんですが、コマンドでやると面倒そうなので、
エディタの置換でやっています
204:デフォルトの名無しさん
11/10/23 17:53:37.29
自己解決しました
for の /Fが余計だった
頭使わずにコピペしてると駄目ですね
スレ汚し失礼しました
205:デフォルトの名無しさん
11/10/23 18:16:44.27
何言ってんだか
206:デフォルトの名無しさん
11/10/25 09:41:38.83
学校で宿題が出ました、助けて下さい><
実行すると下記のような動作をするバッチファイルスクリプトを作成したいです。
よろしくお願いいたします。
実行するバッチファイルが現在存在するディレクトリにある全てのテキストファイルを書き換えるバッチを作成しなさい。
テキストファイルの中に、pass = "C:\Users\users\Documents\workspace\test.txt"というような
パスを変数に代入する記述があった場合
そのパスの部分を、pass = "現在のバッチファイルの存在するディレクトリ\test.txt"
という風にディレクトリ名だけを(ファイル名は書き換えない)書き換えるバッチを作成しなさい。
207:デフォルトの名無しさん
11/10/25 10:21:55.23
>>206
hh.exe ms-its:ntcmds.chm::/ntcmds.htm
208:デフォルトの名無しさん
11/10/25 11:07:34.88
少しは考慮に値するレベルならまだしも、一行で終わるようなのはもう帰れとしか言いようがない。
209:デフォルトの名無しさん
11/10/25 22:23:47.19
1行じゃ終わらんでしょ
210:デフォルトの名無しさん
11/10/25 22:25:49.99
仕様があいまいで書く気にならんな
211:デフォルトの名無しさん
11/10/25 22:30:56.11
語句解析とか無理
212:デフォルトの名無しさん
11/10/25 22:33:49.07
> 現在存在するディレクトリにある全てのテキストファイル
えっ?
213:デフォルトの名無しさん
11/10/25 22:39:45.43
>>212
現在バッチファイルが存在するディレクトリ
バッチファイルと同階層のディレクトリ内の
214:デフォルトの名無しさん
11/10/25 23:37:14.09
助けなかったらどうなるの?
215:デフォルトの名無しさん
11/10/25 23:54:16.44
つまりバッチファイル自身も書き換えるのか
216:デフォルトの名無しさん
11/10/25 23:56:59.44
>>215
拡張子がtxtのものだけでお願いします。
217:デフォルトの名無しさん
11/10/26 00:06:34.90
そのまま解釈すれば
バッチでは無理なレベル
218:デフォルトの名無しさん
11/10/26 00:13:41.08
バッチの宿題やるまえに日本語の勉強しなきゃ
219:デフォルトの名無しさん
11/10/26 00:45:50.58
なの宿題のわけないが狙いは何だ?
220:デフォルトの名無しさん
11/10/26 00:49:53.39
バッチではできないが正解でわ
221:デフォルトの名無しさん
11/10/26 01:05:34.80
説明がわかりにくいようですまんかった。
画像にしてみた。
URLリンク(up3.viploader.net)
URLリンク(viploader.net)
画像の、C:\aaa\aaa\aaa\aaaとかの部分をC:\Users\workspaceに書き換えたいというわけです。
>>217>>220
バッチではムリなのか・・・
最初Pythonでやろうと思ったんだが、うちの会社のマシン、標準でPythonが入ってないから
わざわざこれやるためにインスコするのも何だしなあと思って
バッチならどのマシンでも実行出来るかなと思ったんだが・・・。
何か他に最適な言語はありますか。
>>219
パスを読んでくるようなスクリプトを他のディレクトリに移動させるとエラーが出ることがあって
今は毎回パスを手動で書き換えたりしてるんだけど、ボタンポチで書き換えられた方がいいかなあと。。
プログラム板は宿題スレが多いからこういう形で質問してみました。
222:デフォルトの名無しさん
11/10/26 01:23:34.64
それくらいならバッチでできるだろ
for/?
set/?
規模見積もり0.005KS
工数見積もり0.002人月
223:デフォルトの名無しさん
11/10/26 03:39:47.92
だからキモの部分は1行で終わるって…
224:デフォルトの名無しさん
11/10/26 03:45:15.11
無理だって
225:デフォルトの名無しさん
11/10/26 04:02:35.67
出来るよ
passはpathの間違いか?まあ変数名なのでどっちでもいいが。
ただ2枚目の画像のようにtxtの中身がpathを記述したものだけなのか?それ以外の行があるのか?
ひとつの行で指定されているpathはひとつのみ?;区切りで複数のpathが指定されてたりするのか?
によって面倒さが変わってくる
226:デフォルトの名無しさん
11/10/26 04:07:57.60
相対パス使えよ
227:デフォルトの名無しさん
11/10/26 04:13:52.72
何が無理なんだ?バッチに不可能はないが
228: ◆GisVTRdvfxOl
11/10/26 04:47:39.91
URLリンク(www1.axfc.net)
txt書式が変わると対応不可
エスケープ文字は非対応
スペースと日本語には対応させたつもり
229:デフォルトの名無しさん
11/10/26 05:16:38.97
>エスケープ文字は非対応
バッチの宿題やるまえに日本語の勉強しなきゃ
230:デフォルトの名無しさん
11/10/26 16:31:13.72
WinTabberって良さげなツール見つけたんだけど
AVGでWin32/Heurが検出される。
たぶん誤検出で大丈夫だと思うんで試しに誰か踏んでみてくれ。
231:デフォルトの名無しさん
11/10/26 16:45:25.13
断る
232:デフォルトの名無しさん
11/10/26 19:18:03.62
>>バッチならどのマシンでも実行出来るかなと思ったんだが・・・。
この条件なら WSH 使えばいい話
233:デフォルトの名無しさん
11/10/26 19:28:24.00
>何か他に最適な言語はありますか。
WSHは言語じゃない
234:デフォルトの名無しさん
11/10/26 19:35:38.57
そんなこといったらバッチファイルも言語じゃないだろ
235:デフォルトの名無しさん
11/10/26 20:02:33.21
>>234
じゃバッチファイルの言語はなんだ?言ってみろ
236:デフォルトの名無しさん
11/10/26 21:14:32.23
バッチ
237:デフォルトの名無しさん
11/10/26 22:01:34.34
バッチは基本的にコマンドの羅列でしかないので厳密には言語じゃないけど、
一般的には言語(スクリプト)として扱われることが多い・・・てことじゃない?
unixのシェルスクリプトも同じ扱い。
238:デフォルトの名無しさん
11/10/26 22:48:51.96
>>228
thx!!!!!ありがとうございます!!
バッチファイルを今まで書いたことなかったので
お願いしたのだけれど、やっぱり機能追加とかしたいので結局自分でも覚えなきゃいけないな・・・
仕事でバッチを頻繁に使うわけでもないので若干面倒臭い。。
>>232>>233
すみません、語彙力不足で・・・。
上でお願いしたようなことが出来るのなら言語じゃなくても何でも良いです。
ただ共有して使うつもりなのでインストールとかが必要なものは面倒なので要らない感じです。
WSHってのでバッチよりサクッと出来るならその方が個人的には嬉しいです。
239:デフォルトの名無しさん
11/10/26 23:23:21.05
最近スレの質が下がったな
日本語変なやついるし
検証もしないで出来ないとか無理とかいうやついるし
全角英字とか()
240:デフォルトの名無しさん
11/10/26 23:35:01.96
出来ないというか普通はsedとか使うんじゃないの
241:デフォルトの名無しさん
11/10/27 00:32:18.73
>>239
出来ると思うならやってみろよ
242:デフォルトの名無しさん
11/10/27 08:41:46.72
出来ると思うならやってみろよ(キリッ
243:デフォルトの名無しさん
11/10/27 17:46:44.38
どうでみいいから好きにしてよ(キリッ
244:デフォルトの名無しさん
11/10/27 23:02:47.57
出来ないと思うなら証明してみろよ(キリッ
245:デフォルトの名無しさん
11/10/27 23:39:38.13
うちも履歴が止まったが保存日数減らしたら再開したわ
246:デフォルトの名無しさん
11/10/28 00:15:34.97
このスレはあなたにとって役に立ちましたか?
○ 非常に役にたった
○ 役にたった
○ どちらともいえない
○ 役に立たなかった
○ 全く役にたたなかった
247:デフォルトの名無しさん
11/10/28 01:56:16.55
非常に腹がたった
248:デフォルトの名無しさん
11/10/28 11:58:38.57
ユーザー名がtestであるときに
cd C:\Users\testと打たないで
cd /~test見たいな感じでC:\Users\testに移動できる書き方ってありませんか?
249:デフォルトの名無しさん
11/10/28 12:13:54.46
エスパー回答
cd %USERPROFILE%\test
250:デフォルトの名無しさん
11/10/28 12:42:02.05
宇宙飛行士じゃないけど
cd /d %USERPROFILE%
251:デフォルトの名無しさん
11/10/28 12:53:08.99
ありがとうございます!
252:デフォルトの名無しさん
11/10/28 13:01:01.75
pushd使え
253:デフォルトの名無しさん
11/10/28 13:04:50.44
pushdとpopdっていうのがあるんですね
これ便利ですね!ありがとうございます!
254:デフォルトの名無しさん
11/10/31 06:25:29.84
hogehogeという名前のフォルダを右クリックの「送る」に登録したバッチファイルに送ると、
WinRARで圧縮すると同時に圧縮したファイル名の先頭にその時の日付と時刻を
「(yy-mm-dd_hh-nn) hogehoge.rar」
このように追加したいのですがどういう書き方をすれば良いでしょうか?
255:デフォルトの名無しさん
11/10/31 07:16:57.68
cd /d "%~dp1"
set "ymdhm=%date:~2,2%-%date:~5,2%-%date:~8,2%_%time:~0,2%-%time:~3,2%"
set "path=%path%;C:\Program Files\WinRAR"
winrar a "(%ymdhm%) %~nx1.rar" "%~nx1"
256:デフォルトの名無しさん
11/10/31 10:14:55.58
"C:\Program Files\WinRAR.exe" a -ag+{(}YY-MM-DD_HH-MM{) } "%~1"
257:デフォルトの名無しさん
11/10/31 11:03:26.79
7-zipを使っております
c:\code\の中のファイルで新しく更新されたファイルのみを
c:\backup.7zに追加・更新したいのですが
それを手動でやってたのですがバッチファイルでこういうのをクリックしたら自動的にできるようには出来ませんか?
258:デフォルトの名無しさん
11/10/31 12:56:16.55
hh.exe ms-its:C:\Program Files\7-Zip\7-zip.chm::/cmdline/syntax.htm
259:デフォルトの名無しさん
11/10/31 15:06:31.79
>>255
完璧に動きました。
バックアップ用に使います。最高です。
ありがとうございました。
>>256
WinRAR自体に日付と時刻をファイル名に付加するパラメータがあったんですね。
ありがとうございます。
260:デフォルトの名無しさん
11/10/31 15:51:50.41
>>259
pushd "%~dp1"
"C:\Program Files\WinRAR\WinRAR.exe" a -ag+(YY-MM-DD_HH-MM) " %~nx1.rar" "%~nx1"
261:デフォルトの名無しさん
11/11/02 11:18:59.37
Windows8でコマンド使おうとすると
いつまでバッチ使ってるんだPowerShell使えやって警告が出るみたいだな
Windows9あたりでcmdは廃止になるかもしれないな
262:デフォルトの名無しさん
11/11/02 18:19:04.70
なんのために?
263:デフォルトの名無しさん
11/11/02 18:30:20.91
PowerShellってvista以降なら標準で入ってるものですか?
もし標準で入っているならPSに移行してみたいですが
264:デフォルトの名無しさん
11/11/02 20:34:51.75
>>261
mjd?batしか使かった事ないし腹立ってきた。
PowerShellとか難しそう
265:デフォルトの名無しさん
11/11/02 20:36:13.45
エディションによる
266:デフォルトの名無しさん
11/11/02 22:04:24.96
homeエディションなら問題ないですかね?
267:デフォルトの名無しさん
11/11/02 22:38:42.34
homeエディションなら問題なく入ってない
268:デフォルトの名無しさん
11/11/03 13:11:33.76
バッチファイルのソースによく書かれている
nx~~とかってどういう意味ですか?変数とは違うものなんでhそうか
あと~~みたいな上の方に出てるニョロニョロと、dpってやつが何者なんでしょうか。
初心者の質問ですみません・・・。
269:デフォルトの名無しさん
11/11/03 13:54:52.82
ntcmds.chmのバッチ パラメータを使用するを読むんだ
270:デフォルトの名無しさん
11/11/03 15:43:44.64
batファイルを為まくってたのに努力が水の泡になる困った
PSに移行するべきかRubyとかPerlとかPythonを使うべきか
271:デフォルトの名無しさん
11/11/03 15:46:05.16
>>270
ほんとそうだよな。せっかく今まで覚えてシコシコ作りまくってたのに
腹立つわマジで
272:デフォルトの名無しさん
11/11/03 16:26:22.70
command.comはなくなるだろうが、cmd.exeがなくなるものか、あほども
273:デフォルトの名無しさん
11/11/03 16:41:16.63
>>269
バッチファイル初心者だから、ntcmds.chmって何だろうと思って
調べてみたんだが、コマンドのヘルプみたいなもんか。
Win7では日本語のヘルプは無いらしい・・・。
本当にPowerShellっての覚えた方が良いってことか
URLリンク(d.hatena.ne.jp)
274:デフォルトの名無しさん
11/11/03 16:43:43.01
俺もRuby,Perl,Pythonで書きたいところなんだが
会社のマシンってこいつらが標準でインスコされてないことがあるんだよな…
275:デフォルトの名無しさん
11/11/03 16:49:09.86
>>274
「ウィルスの危険性があるので導入は認めませんキリッ」(by糞管理部門)
276:デフォルトの名無しさん
11/11/03 16:49:35.83
>>272
どういうことですか?
2つはOSによって名前が違ってますが片方がはいっているものではないのですか?
なくならないんですか?
277:デフォルトの名無しさん
11/11/03 16:50:31.25
プログラミングできない人が多い会社(おれ以外プログラミングってなに?レベル)の場合HSP導入するべき?
278:デフォルトの名無しさん
11/11/03 17:06:34.98
>>277
HSPはあくまでゲーム製作用スクリプトの趣が強いかと
とりあえずはWSH辺りが相場なんじゃないかね
279:デフォルトの名無しさん
11/11/03 17:37:56.28
>>273
for /?
280:デフォルトの名無しさん
11/11/03 18:01:03.13
>>276
command /?
281:デフォルトの名無しさん
11/11/03 18:45:15.02
WSHってPower shellに置き換えられる過去の遺産になるんじゃないっけ
282:デフォルトの名無しさん
11/11/03 18:48:03.85
すれ違い
283:デフォルトの名無しさん
11/11/07 07:08:39.26
ちょっと変な質問ですが
start myprog
のコマンドはstartですが
myprog
でmyprogを実行する(暗黙の)コマンド名ってなんて言うんでしょう
別のスクリプトで
start("myprog") => start myprogを実行する
と一緒に
s = exec("myprog") => myprogを実行して出力を返す
s = run("myprog")
と言ったメソッドを定義したいんですがその名前は何がいいのかなと
284:デフォルトの名無しさん
11/11/07 08:15:27.21
>>284
大雑把な説明だけど。
myprogがOSからみて実行ファイル(.exe、.com(笑)等)であればOSのプロセス管理機能の
管轄で実行されるので、特に暗黙のコマンドというものはない。
myprogがデータファイル(.txt等)であれば、OSに登録されている拡張子割当を元に
該当プログラムに"myprog"をパラメータとして勝手に渡して実行してくれる。
拡張子に割り当てられたプログラムが暗黙のコマンドになる。
(バッチファイルもこのパターンに相当する)
どちらの場合もstartコマンド有無は特に関係ない。
後者のパターンで"start myprog"を実行した場合でも、startコマンド実行後myprogに割り当てられた
プログラムが起動してmyprogがパラメータとして渡されるので、この場合も「暗黙のコマンド」が存在することになる。
拡張子割当の検索はバッチの範疇では無理・・・だと思う(レジストリを見なきゃならん)。
見当違いなことを言っていたらごめん。
285:デフォルトの名無しさん
11/11/07 09:24:59.10
拡張子割り当てはassocとかftypeとか?
286:デフォルトの名無しさん
11/11/07 15:57:27.19
>>284
アンカミス
見当違い
>>283
>start myprog
>のコマンドはstartですが
の引数もコマンドです。
>myprog
>でmyprogを実行する(暗黙の)コマンド名ってなんて言うんでしょう
myprogです。
287:デフォルトの名無しさん
11/11/07 19:08:03.54
>>284
callだよーん
288:デフォルトの名無しさん
11/11/07 19:17:40.95
C:\doc1.0\bin
C:\doc2.0\bin
という二つのパスがあります
このうち前者のほうをシステムのパスに登録しているのですが
batファイルでパスを後者に切り替えるにはどう書くのでしょうか?
289:デフォルトの名無しさん
11/11/07 19:21:27.08
set path=%path:C:\doc1.0\bin=C:\doc2.0\bin%
290:デフォルトの名無しさん
11/11/07 19:31:54.97
289様ありがとうございます
pathはC:\doc1.0\bin以外にもjavaなどのパスやらインストールしたソフトが勝手に登録したパスもありますが
ご教示いただいたコードのC:\doc2.0\binの部分にそれらを足したほうがいいのでしょうか?
それともC:\doc1.0\binというパスを見つけたらC:\doc2.0\binに置換するという動作でしょうか?
291:デフォルトの名無しさん
11/11/07 19:59:48.22
set /?
292:デフォルトの名無しさん
11/11/18 17:54:49.91
batファイルを起動してから毎時00分に指定したdosコマンドを実行したいのですがタスクスケジューラを使わずにbatファイルでできますか?
293:デフォルトの名無しさん
11/11/18 18:09:19.93
%TIME%の分を取り出して比較して
これを繰り返せばよい
適当に待ちを入れて
294:デフォルトの名無しさん
11/11/18 22:44:52.61
:loop
sleep 60-現在の秒数
タスクを実行
goto loop
295:デフォルトの名無しさん
11/11/18 23:04:41.04
'sleep' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
296:デフォルトの名無しさん
11/11/18 23:09:40.73
waitfor sleep /t 60-現在の秒数
297:デフォルトの名無しさん
11/11/18 23:12:44.67
'waitfor' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
298:デフォルトの名無しさん
11/11/18 23:25:22.75
msg %username% /time:60-現在の秒数
299:デフォルトの名無しさん
11/11/18 23:38:21.08
送信するメッセージを入力してください。メッセージの入力を終了するには、改行してか
ら、Ctrl+Z キー、Enter キーを押します。
300:デフォルトの名無しさん
11/11/18 23:38:48.90
送信するメッセージを入力してください。メッセージの入力を終了するには、改行してか
ら、Ctrl+Z キー、Enter キーを押します。
^Z
セッション名の取得エラー 1702
301:デフォルトの名無しさん
11/11/18 23:55:48.28
msg * /time:60-現在の秒数 sleep
302:デフォルトの名無しさん
11/11/19 00:18:03.47
セッション名の取得エラー 1702
303:デフォルトの名無しさん
11/11/19 00:34:43.64
:loop
if not 60-現在の秒数 == 00 goto loop
タスクを実行
:loop2
if 60-現在の秒数 == 00 goto loop2
goto loop
304:デフォルトの名無しさん
11/11/19 00:46:53.69
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
コマンドの構文が誤っています。
305:デフォルトの名無しさん
11/11/19 00:48:02.09
役立たずばかりだな
306:デフォルトの名無しさん
11/11/19 00:50:05.81
おまえの役に立ってたまるかぼけ
307:デフォルトの名無しさん
11/11/19 01:00:26.80
おれんちはsleepあるからいいよw
308:デフォルトの名無しさん
11/11/19 19:30:14.31
1秒スリープ
echo WScript.Sleep(1000) >sleep.vbs
cscript //Nologo sleep.vbs
309:デフォルトの名無しさん
11/11/19 20:33:07.77
>>294
>>296
osのバージョンによっては入っていないんだな
>>301
セッション名の取得エラーって知っているか?
>>303
アホか負担が高すぎる
>>307
何も解決してない答えだな
汎用性がないわ
>>308
これは使えるな
310:デフォルトの名無しさん
11/11/19 23:24:06.28
厳密じゃなくて適当に1秒待ちで良いなら
ping -n 2 127.0.0.1 1>nul
OS制限はまず無いし
311:デフォルトの名無しさん
11/11/20 00:06:16.93
start /wait "" mshta vbscript:Execute("GetObject(""winmgmts:{impersonationLevel=impersonate}"").
ExecNotificationQuery(""select * from __InstanceModificationEvent
where TargetInstance isa 'Win32_LocalTime'
and TargetInstance.Minute = 0 and TargetInstance.Second = 0"").NextEvent:Close")
312:デフォルトの名無しさん
11/11/20 00:15:53.25
pingは環境によってFWでブロックされて止まってしまう
313:デフォルトの名無しさん
11/11/20 00:24:34.55
アホには>>303がちょうどよいw
314:デフォルトの名無しさん
11/11/20 00:41:31.13
mshta javascript:setTimeout('close()',10000)
315:デフォルトの名無しさん
11/11/20 10:04:22.81
そもそも最初は、「毎時00分に」なのに「00秒に」と誤解した上に、途中から「1秒待ち」の話になってる。
へぼプログラマがバグを作りこむ理由の一端がわかった気がする。
316:デフォルトの名無しさん
11/11/20 15:37:58.48
応用のできないアホはスルーで
317:デフォルトの名無しさん
11/11/20 15:40:21.60
msまで追求するのが漢道
318:デフォルトの名無しさん
11/11/20 16:12:00.10
>>315
へぼプログラマがバグを作りこむ理由の一端がわかった気がする。
319:デフォルトの名無しさん
11/11/20 17:19:17.93
>>316
応用? 00分の検出と、1秒待ちってぜんぜん違う機能だぞ。
どう応用するのか、見せてもらえるかな?
320:デフォルトの名無しさん
11/11/20 17:26:48.84
>>319
なんでその2つを同じ階層で考える?
321:デフォルトの名無しさん
11/11/20 17:32:09.01
応用のできないアホはスルーで
322:デフォルトの名無しさん
11/11/20 17:36:30.86
まぁまぁ落ち着けよお前ら
一番悪いのは>>303なんだから
323:デフォルトの名無しさん
11/11/20 17:50:30.16
>>320
え゛っ、応用じゃないの? (w
応用見せてみと言うと階層が違うとか、なんだかねぇ。
324:デフォルトの名無しさん
11/11/20 18:00:38.70
おい単芝vipに帰れよ
325:デフォルトの名無しさん
11/11/20 18:21:54.10
HP機だと
c:\hp\bin\sleep.exe
が使えるよ
326:デフォルトの名無しさん
11/11/20 18:25:01.24
>>324
お前が帰れよ、つーかででくんな。
327:デフォルトの名無しさん
11/11/20 18:32:56.02
powershell start-sleep
328:デフォルトの名無しさん
11/11/20 18:42:28.32
'powershell' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
329:デフォルトの名無しさん
11/11/20 18:43:43.94
'c:\hp\bin\sleep.exe' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
330:デフォルトの名無しさん
11/11/20 19:01:18.78
hpの事なんて聞いてねえよ!
331:デフォルトの名無しさん
11/11/20 19:05:48.99
おまえなんかに言ってないよw
自我肥大するんじゃねーよw
332:デフォルトの名無しさん
11/11/20 23:10:10.73
自我肥大はスルーで
333:デフォルトの名無しさん
11/11/20 23:18:48.73
pause /t:n
334:デフォルトの名無しさん
11/11/20 23:59:17.74
>>292
やったな、おい!大漁じゃねーか!雑魚ばっかりだけど!
335:デフォルトの名無しさん
11/11/21 00:35:05.56
これってそんなに難しい質問なのか
336:デフォルトの名無しさん
11/11/21 00:45:48.84
応用のできないアホには
337:デフォルトの名無しさん
11/11/21 03:33:48.01
choice /t 10 /d y
338:デフォルトの名無しさん
11/11/21 03:47:51.65
diskpart /t 15
339:デフォルトの名無しさん
11/11/21 05:32:44.27
>>333
続行するには何かキーを押してください . . .
>>337
'choice' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
>>338
DiskPart はパラメータを処理できませんでした。
詳細については、'diskpart /?' を使用してください。
340:デフォルトの名無しさん
11/11/21 09:26:48.83
cmd.exe組み込みコマンドと同名のプログラムがPATH中に存在するとき、
組み込みコマンドを指定する方法はありますが?
mkdirはmdに変更することで逃げられますが、この方法が使えないとき
はどうすればいいでしょうか?
341:デフォルトの名無しさん
11/11/21 13:42:17.35
似たような機能のtoolを入れる
342:デフォルトの名無しさん
11/11/21 14:41:11.23
>>340
うそこけ 組み込み優先でないってか?
343:デフォルトの名無しさん
11/11/21 16:03:37.77
>>341
それすると何がどうなるって?ばかか
344:デフォルトの名無しさん
11/11/21 16:30:39.06
>>340
逆ならいくらでもあるが
345:デフォルトの名無しさん
11/11/21 16:39:27.54
>>340
setlocal
set path=
組み込みコマンド
endlocal
346:デフォルトの名無しさん
11/11/21 17:28:38.33
>>342
うーん。試してみたらコマンドプロンプトは組み込み優先でした。
実はnmakefileの中だったのです。>>345を採用することにしますた。
set path= & 組み込みコマンド
347:デフォルトの名無しさん
11/11/21 17:35:24.19
最初からそう言え
cmd /c 組み込みコマンド
348:デフォルトの名無しさん
11/11/21 22:14:14.00
timeout /t 10
349:デフォルトの名無しさん
11/11/22 06:18:57.26
NDWord: /t
350:デフォルトの名無しさん
11/11/22 10:59:35.06
'NDWord:' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
351:デフォルトの名無しさん
11/11/22 12:48:26.59
整合性レベルの低で起動する簡単な方法ないですか?
352:デフォルトの名無しさん
11/11/22 12:57:18.84
%~tIは更新日時のようですが、作成日時は取れないんですか?
353:デフォルトの名無しさん
11/11/22 13:30:43.72
start /low
354:デフォルトの名無しさん
11/11/22 13:56:05.67
for /f "usebackq tokens=1,2*" %i in (`dir /tc "%~f1"^|find "%~nx1"`) do (set a=%i%j&call echo %a%)
355:デフォルトの名無しさん
11/11/22 14:04:16.98
%i%jじゃ繋がっちゃうだろ
356:デフォルトの名無しさん
11/11/22 21:16:09.49
"%~nx1"が"ファイル"だとだめだろ
357:デフォルトの名無しさん
11/11/22 21:24:25.23
"eol= "ってやればうまく行きそうだが、行かん。遺憾だ
358:デフォルトの名無しさん
11/11/22 21:39:46.47
eol=の仕様は謎だな
359:デフォルトの名無しさん
11/11/22 21:46:13.61
findstr /r /c:"^[^ ].*%~nx1"
360:デフォルトの名無しさん
11/11/22 21:59:25.95
for /f "usebackq tokens=1,2*" %i in (`dir /tc "%~f1"^|find "%~nx1"`) do (if not defined a set a=%i %j&call echo %a%)
361:デフォルトの名無しさん
11/11/22 22:05:59.46
だからー "%~nx1"が"ディレクトリ"だとだめだろ
362:デフォルトの名無しさん
11/11/22 22:08:54.13
find "/"
がええかも
363:デフォルトの名無しさん
11/11/22 23:34:25.37
for eolでggったら"delims= eol= "でいいみたいね
364:デフォルトの名無しさん
11/11/23 01:56:38.52
そのじゃディレクトリの作成日時は取れんな
365:デフォルトの名無しさん
11/11/23 12:30:43.59
start cmd /c pause
とすれば、別プロセスで開始したコマンドの終了を待たずに次に進めるけど、
(start cmd /c pause & start cmd /c pause) | sort
などとパイプすると、startしたアプリをすべて終了するまで次に進まなくなってしまうのを回避する方法ありません?
(start cmd /c pause & start cmd /c pause) > hoge.txt
リダイレクトなら普通に次に進めるのですが…
366:デフォルトの名無しさん
11/11/23 16:12:04.51
意味不明だな
(start cmd /c pause & start cmd /c pause) | sort
で止まるのは当然だろw何がしたい?
start cmd /c "pause | sort"
とか?
367:365
11/11/23 17:35:31.29
>>366
確かにそのスクリプトじゃ何がしたいのか意味不明だけど、ようは、
[a.cmd]
Echo 処理1開始
Rem 処理1
Echo 処理2開始
Rem 処理2
Echo 処理3開始
start "" "重い処理3cmd"
Echo 処理4開始
start "" "重い処理.4cmd"
pause
exit /b
ってのがあって、そのスクリプトに対し、
call a.cmd | tee "log.log"
的なことをしたのです。
a.cmd 内では、pause まで進むのにもかかわらず、
重い処理3cmd, 重い処理4cmd が修了するまで、
call a.cmd | tee "log.log"
の次に進みません。
call a.cmd
だけなら問題なく次に進むのだけど、何でそうなるのかが自分にはよくわからんのです。
368:デフォルトの名無しさん
11/11/23 18:33:00.23
こういうこと?
URLリンク(scripting.cocolog-nifty.com)
369:デフォルトの名無しさん
11/11/23 18:45:04.00
>ProcessStartInfo.UseShellExecute=trueでプロセスを起こすと、
>ファイルハンドルを引き継がないようです。
ってことは
ショートカット作って
start "" "重い処理3cmd.lnk"
だな
370:デフォルトの名無しさん
11/11/23 21:55:29.35
rundll32.exe url.dll,FileProtocolHandler "重い処理3.cmd"
でもええんじゃね
371:365
11/11/23 22:04:00.88
>>368-369
ありがとうございます!!
> URLリンク(scripting.cocolog-nifty.com)
> どうもパイプの前のプロセスにパイプのハンドルの複製が残っているのでは?
なるほど…
ショートカットで、ばっちし うまく動きました。
372:365
11/11/23 22:12:02.17
>>370
なるほど!
手っ取り早くてイイですね!
373:デフォルトの名無しさん
11/11/24 20:05:50.79
cmd.exeのバグだな
374:デフォルトの名無しさん
11/11/24 23:51:22.85
そうだな
375:デフォルトの名無しさん
11/12/13 19:02:04.82
hou
窓の杜 - 【REVIEW】UnixのコマンドをWindowsのコマンドプロンプトで利用可能にする「Gow」
URLリンク(www.forest.impress.co.jp)
376:デフォルトの名無しさん
11/12/13 21:04:34.69
コマンドプロンプトで使えても、複数行の引数とかで困りそうな…
377:デフォルトの名無しさん
11/12/14 23:05:30.91
お願いします。
Windows7です。
host.txtが
<ホスト名A>,<IPアドレス>
<ホスト名B>,<IPアドレス>
というようなパターンで記載されております。
キーボード入力→入力を変数に格納(%host%)。
・変数%host%と一致する行を、host.txtの1列目から探す、見つかったら一致する行の2列目を変数ipに格納
という処理を行いたいのですが、まったく方法が思いつきません。
お知恵を拝借いたしたく。
よろしくお願いします。
378:デフォルトの名無しさん
11/12/14 23:30:42.76
set /p host="> "
for /f "tokens=1,* delims=," %%a in (host.txt) do (
if "%%a" == "%host%" set "ip=%%b"
)
echo %ip%
379:377
11/12/15 00:03:14.03
>>378
勉強になります。そのまま使わせていただきます。
ありがとうございます。
380:デフォルトの名無しさん
11/12/21 08:11:06.17
Windows2008使用です。
バッチ上から、システム環境変数(本来、マイコンピュータ右クリックでたどっていって編集するもの)を編集したいです。
reg add で編集(追加)はできるんですが、同じバッチ内(コマンドプロンプト内)では、反映されてません。
これを反映させられるようにしたいです。
pathを編集したいわけじゃないので、フルパスにしたからといって解決するものでもないです。
どなたかご存知の方いらっしゃいましたらご教授お願いします。
381:デフォルトの名無しさん
11/12/21 09:34:10.72
>set /?
382:デフォルトの名無しさん
11/12/21 09:58:29.01
馬鹿登場
383:デフォルトの名無しさん
11/12/21 10:26:35.05
reg addしたものと同じものをsetしなおすのが手っ取り早いとは思うけどな。
start "" cmd.exe /c "%~0" %*
とかやって独立したプロセス立ち上げると環境変数って新規のが使われるんだっけ?
そうなったら今度はローカルで変更した環境変数まで消えちゃうんだけど。
384:デフォルトの名無しさん
11/12/21 14:42:17.97
setx/?
385:デフォルトの名無しさん
11/12/21 17:15:10.74
'setx' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
386:デフォルトの名無しさん
11/12/21 17:59:03.37
setx.exeはServer 2003以降、Vista以降で有効の模様。2000/XPでは使えない。
387:デフォルトの名無しさん
11/12/21 18:26:27.91
2000/XPは使わない。
388:デフォルトの名無しさん
11/12/26 11:08:09.34
すいません以前ここでcdは使うな。代わりに○○を使えって教わったのですがそのコマンドが忘れました
どなたか教えてください
389:デフォルトの名無しさん
11/12/26 11:24:55.46
>>252-253 か?
別にcdでもいいよ
390:デフォルトの名無しさん
11/12/26 11:41:51.36
cd /d
かもよ
391:デフォルトの名無しさん
11/12/26 11:58:44.93
pushdとか?
392:デフォルトの名無しさん
11/12/26 12:45:07.22
>>389-391
先生方ありがとうございます
それです
393:デフォルトの名無しさん
11/12/26 18:39:34.18
hoge_012.txt
hoge_12345.txt
hoge_abcd.txt
みたいなファイル名のファイル群から、hoge部分を消したいんですが
どう書けばいいですか?
ren hoge_*.txt _*.txt
ってやると
_oge_012.txt
_oge_12345.txt
_oge_abcd.txt
とリネームされました
期待する結果は
_012.txt
_12345.txt
_abcd.txt
です
394:デフォルトの名無しさん
11/12/26 22:06:51.92
>>393
ファイル名の先頭のhogeを除去したいなら
for /f "tokens=1,* delims=_" %%a in ('dir /a-d /b ^| findstr /r "^hoge.*_.*"') do (echo "%%a_%%b" "_%%b")
こんな感じかな
ファイル名のどこかのhoge部分を除去したいなら、置換を利用して
for /f "delims=" %%a in ('dir /a-d /b ^| find "hoge"') do (call :renhoge "%%a")
goto :eof
:renhoge
set "name=%~1"
set name=%name:hoge=%
echo "%~1" "%name%"
set name=
goto :eof
こんな感じかな
リネームするときはechoをrenに置き換えてね
395:デフォルトの名無しさん
11/12/26 22:24:34.78
>>394
できました!ありがとう
ワイルドカードで簡単に出来るものだと思ってました
396:デフォルトの名無しさん
11/12/27 16:34:39.16
できるよ
397:デフォルトの名無しさん
11/12/28 01:02:03.81
カレントフォルダにあるすべてのファイルに対して
AABBBtxt→AA-BBB.txt
AACCCtxt→AA-CCC.txt
のように3バイト目にハイフンを入れたいです。
AAは必ず同じ文字列となります。
ren AA* AA-*
としたらAA-BB.txtとなりBが1個きえてしまいました。
どのようにしたらよいでしょうか
398:デフォルトの名無しさん
11/12/28 01:08:57.22
まず
set x=AABBBtxt
をAA-BBB.txtに変えてみな
それができればあとはできるだろ?
399:デフォルトの名無しさん
11/12/28 02:20:05.30
> 3バイト目にハイフンを入れたいです。
set a=%~1
set b=%a:~0,2%-%a:~2%
echo %b%
400:デフォルトの名無しさん
11/12/28 02:22:35.04
> AAは必ず同じ文字列となります。
set a=%~1
set a=%a:AA=AA-%
echo %a%
401:デフォルトの名無しさん
11/12/28 11:18:02.60
batファイルからカラーダイアログを呼び出せることって無理ですか?
402:397
11/12/29 00:13:43.43
>>398-400
ループ処理が難しそうですが、なんとかできそうです。
ありがとうございました。
403:デフォルトの名無しさん
12/01/01 02:26:05.21
mshta "about:<script>function b(){new ActiveXObject('Scripting.FileSystemObject'
).GetStandardStream(1).Write(d.ChooseColorDlg().toString(16));close();}</script>
<body onload='b()'><object id='d' classid='clsid:3050f819-98b5-11cf-bb82-00aa00b
dce0b'></object></body>"|more
404:デフォルトの名無しさん
12/01/05 16:14:43.54
【質問】
・1-18までカウントしていく関数(サブルーチン?)を作りたいです。
調べて自分なりに試しているのですが、上手くいかずに行き詰ってしまいました。
下記のように、1-9までは01-09のように0を付加して表示したいです。
01/18
処理結果
02/18
処理結果
【 OS 】
・Windows XP Professinal SP3
【構文】
SET /A CNT = 1
SET /A IND = 18
CALL :ZERO %CNT%
:ZERO
IF "%1" LEQ "9" (
SET /A DD = %1
SET /A DD += 100
SET /A ABC = %DD:~-2%
ECHO %DD:~1,2%/%IND%
SET /A CNT+=1
)
EXIT /B
よろしくお願いします。
405:デフォルトの名無しさん
12/01/05 17:07:34.22
> 1-18までカウントしていく関数(サブルーチン?)を作りたいです。
仕様がよくわからん。18超えたらどうするの?
01,02,03,・・・17,18とechoさせたいわけじゃないよね?
処理結果とあるけど、別の処理をループさせてのカウントかな?
だとすればわざわざサブルーチンにしなくても set CNT=101
で101-118をカウントして %CNT:~-2% で表示させればいい
@echo off
set CNT=100
:loop
set /a CNT+=1
echo %CNT:~-2%/18
echo 処理結果
if not %CNT%==118 goto :loop
pause