[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 05/23 10:33 / Filesize : 215 KB / Number-of Response : 844
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【.cmd】 バッチファイルスクリプト %8 【.bat】



1 名前:デフォルトの名無しさん mailto:sage [2011/09/13(火) 01:20:20.25 ]
拡張子が .cmd または .bat のバッチファイルのスクリプティング(プログラミング)に関わる
質問,テクニック(JScript,Perl等の埋め込みなど含む),関連情報のためのスレです。

※何でも無理矢理バッチでやろうとせず、WSH等の使用も検討しましょう。
前スレ
【.cmd】 バッチファイルスクリプト %7 【.bat】
hibari.2ch.net/test/read.cgi/tech/1298873550/

【.cmd】 バッチファイルスクリプト %6 【.bat】
hibari.2ch.net/test/read.cgi/tech/1277465356/
【.cmd】 バッチファイルスクリプト %5 【.bat】
pc12.2ch.net/test/read.cgi/tech/1242268171/
【.cmd】 バッチファイルスクリプト %4 【.bat】
pc12.2ch.net/test/read.cgi/tech/1229955189/
【.cmd】 バッチファイルスクリプト %3 【.bat】
pc11.2ch.net/test/read.cgi/tech/1217860043/
【.cmd】 バッチファイルスクリプト %2 【.bat】
pc12.2ch.net/test/read.cgi/tech/1197881068/
【.cmd】 バッチファイルスクリプト %1 【.bat】
pc11.2ch.net/test/read.cgi/tech/1178281991/

47 名前:39 mailto:sage [2011/09/27(火) 05:47:47.48 ]
右クリbat
for %%A in (%*) do (call "C:\3.script\tst\sub.bat" %%A)

sub.bat
cd /d "%%~dpA"
2>nul "%cd:\="&set "HIRAGANA=%"
move %%A "Z:\hoge\bbb\%HIRAGANA%\"

>>40から見よう見真似で作ってみました。
多分構文が凄い間違ってるので%Aが引き継がれなくて何も起きませんでした。
もうちょっと勉強してきます。次はgoto…
あぁ頭良くなりたい眠いくっそおお

48 名前:39 mailto:sage [2011/09/27(火) 05:55:13.36 ]
あれ!?え!どうして!!?
>>45からまた始めたのですが、さっきは失敗したのに何故か成功しました!

おそらく最初のforでinを忘れたように、何か文字が抜けてたんだと思います。
ありがとうございました!これで完璧に達成できました!
皆様本当にありがとうございました!

これでやっと寝れる・・・6時か・・・・・・眠眠打破かってきます
けど凄い嬉しい目がしゅわしゅわする

49 名前:デフォルトの名無しさん mailto:sage [2011/09/27(火) 13:00:34.63 ]
バッチかWSHかで高速なAND検索って出来ないですかね?
今は単語毎にfindで探してerrorlevelを見て、全部の単語でerrorlevelが0だったら
マッチという風にやってるんですが、これが正直遅いです。

50 名前:デフォルトの名無しさん mailto:sage [2011/09/27(火) 16:43:32.32 ]
findstr

51 名前:デフォルトの名無しさん mailto:sage [2011/09/27(火) 17:04:58.38 ]
findstrをfindと同じ使い方をしたらもっと遅いんですが…

単純に指定しただけではOR検索になる仕様ですし、
正規表現でAND検索をやるには前後の組み合わせを変えてOR検索するという
馬鹿みたいな表記になり、2語程度が限界ですが。

52 名前:デフォルトの名無しさん mailto:sage [2011/09/27(火) 17:44:55.74 ]
orのfindstr出力をfindでandする

53 名前:デフォルトの名無しさん mailto:sage [2011/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 名前:デフォルトの名無しさん mailto:sage [2011/09/27(火) 18:13:28.08 ]
最初からそれ書けあほ
ファイル処理だと思うだろがばか
環境変数の:=置換を使えぼけ

55 名前:デフォルトの名無しさん mailto:sage [2011/09/27(火) 18:15:45.94 ]
ファイルの検索だったとして、結局同じだけどどういう意味だったの?



56 名前:デフォルトの名無しさん mailto:sage [2011/09/29(木) 17:21:21.58 ]
ファイルの検索だったとして、結局同じだけどアホには無理

57 名前:デフォルトの名無しさん mailto:sage [2011/09/29(木) 18:25:24.38 ]
多分自分で間違えてるの気付いてないんだと思うけど。

58 名前:デフォルトの名無しさん mailto:sage [2011/09/29(木) 21:07:11.40 ]
>>39

for %%A in (%*) do (
set X=%%A
call move %%A %%X:\aaa\=\bbb\%%
)


59 名前:デフォルトの名無しさん mailto:sage [2011/09/29(木) 21:45:18.04 ]
ドロップしたファイル名を set で取り込みたいのですが & が含まれているときに
そのファイル名全てを受け取るにはどのようにすればいいのでしょうか?


60 名前:デフォルトの名無しさん mailto:sage [2011/09/29(木) 22:08:31.84 ]
ファイルかフォルダ名に空白を入れとけ
でなきゃ難しいからやめとけ

61 名前:デフォルトの名無しさん mailto:sage [2011/09/29(木) 22:43:26.15 ]
そうなんですか。
別の方法あたってみます。

自分で名前をつけたなら & なんてヤな気配のする文字は使わないんですけどね……
!! とか……

62 名前:デフォルトの名無しさん mailto:sage [2011/09/30(金) 00:04:50.12 ]
!もやめとけ 遅延展開で困るかも

63 名前:39 mailto:sage [2011/09/30(金) 21:25:22.32 ]
先日はお世話になりました。

>>58
お返事遅れてしまい申し訳ありません。どうもありがとうございました。
先ほど試してみたらこれだけで移動する事ができました!ものすごく感動しました!

そこで是非とも意味を理解したく:や=や単体での%%の使い方、またはfor %%A in (%*) do (set X=%%A
の意味を調べているのですが、なかなか見つかりません。
なので、もうこうなったらbatの優しい参考書があれば購入しようと思うのですが
何か初心者にも分かり易いものはありますでしょうか?

64 名前:デフォルトの名無しさん mailto:sage [2011/09/30(金) 21:39:24.06 ]
for/?
set/?
call/?
以上で十分

65 名前:デフォルトの名無しさん mailto:sage [2011/09/30(金) 22:14:41.45 ]
昔なら良書もあったが、いまどきはねぇ・・・
Webなら初心者向きHPも腐るほどあるから、お金出さずに勉強できるよ
(古い情報のまま放置のところもあるけど)



66 名前:39 mailto:sage [2011/09/30(金) 22:36:23.51 ]
>>64
穴が空くまで読めということですね。ありがとうございました。

>>65
Webの場合は全てのHPを行き来すれば網羅的だと思うのですが
この行き来をなくして、馬鹿な私もついていけるような前提から説明して一緒にbatを作り上げるような
そんな本であれば購入しようと思っていたのですが、古い情報だとまずかったりするのですね。
HPをめぐって勉強しようと思います。ありがとうございました。

67 名前:デフォルトの名無しさん mailto:sage [2011/09/30(金) 23:30:56.08 ]
>>66
古い情報でもまずいことはあまりないのだが、cmdやコマンドもOSによっていろいろ進化しているから
昔は何行もバッチを書いていたのが今ではコマンド1発でいろいろ出来てしまうことが多々ある。
WinNT系ではWin9xまで(DOS含む)に比べて大幅に機能が拡張されているから、
HPを見つけたらいつ頃書かれたものなのか意識していくといいと思う。(書いていないことが多いが)

いまどきから始めるならバッチよりもWSHの方がいいのかなぁ・・・

68 名前:デフォルトの名無しさん mailto:sage [2011/10/03(月) 15:50:30.91 ]
いまどきWSH???

69 名前:デフォルトの名無しさん mailto:sage [2011/10/03(月) 23:32:29.20 ]
5.6で機能強化の止まってしまったWHSなぁ

70 名前:デフォルトの名無しさん mailto:sage [2011/10/04(火) 00:51:43.69 ]
5.7だけど

71 名前:デフォルトの名無しさん mailto:sage [2011/10/04(火) 00:57:39.22 ]
そやな

72 名前:デフォルトの名無しさん mailto:sage [2011/10/04(火) 02:04:12.37 ]
せやな

73 名前:デフォルトの名無しさん mailto:sage [2011/10/04(火) 19:30:10.04 ]
WSHだけど
爺さん婆さんみたいだな ムヒをヒムとか

74 名前:デフォルトの名無しさん mailto:sage [2011/10/04(火) 20:46:47.70 ]
パンツをパンスとか

75 名前:デフォルトの名無しさん mailto:sage [2011/10/05(水) 20:25:02.09 ]
初めてのプログラムでbatに挑戦したいと思うのですが
下記のような事はbatでも出来ますか?

フォルダ名が『レーベル] タイトル』のものと『タイトル』のものが沢山あり
これらの中からタイトルが殆ど一致するものを検索し、該当するフォルダについては
txtかエクセルに出力し、そこにフォルダ名とパスとサイズとファイル数を表示したいと思ってます。
よろしくお願いします。



76 名前:デフォルトの名無しさん mailto:sage [2011/10/05(水) 20:50:06.13 ]
すいません、フォルダ名には他にも
『[レーベル] タイトル (ジャンル)』というものがありました。

正規表現を使って末尾から一致を探そうと思ったのですが
これはちょっと困りました・・・

77 名前:デフォルトの名無しさん mailto:sage [2011/10/05(水) 21:25:42.61 ]
>>76
> タイトルが殆ど一致するものを
殆ど一致て似たものもってこと?「殆ど一致」ではなく「完全に一致」で
フォルダ名の書式が
[レーベル] タイトル (ジャンル)
[レーベル] タイトル
タイトル
が厳密に守られていて、且つ
レーベル、タイトル、ジャンルの文字に "]" "(" の文字が使われて居ないならば
やる気さえあれば出来るよ

ただこれから始めるような人には敷居がちょっと高いかもね
とりあえず"[レーベル] タイトル (ジャンル)"から
"タイトル"を抜き出す方法からやってみるといい

78 名前:デフォルトの名無しさん mailto:sage [2011/10/05(水) 21:41:55.24 ]
>>77
タイトルの先頭や末尾に加えてメモが書いてあったりするフォルダもあり
また、稀にですがアルファベットや記号で半角全角など違う場合もあるので
殆ど一致であれば全てカバーできるのではないかと、そう表現しました。
フォルダ名の形式についてはタイトル以外は殆ど厳密に守られていると思いますが
タイトル(ジャンル)このように半角スペースが入ってないフォルダも結構ありました。

とりあえず敷居は高いとはいえ出来ない事はない、と聞いてやる気が湧いてきました。
ご指摘頂いた「タイトルを抜き出す方法」をまずは学んでみます。
どうもありがとうございました。

79 名前:デフォルトの名無しさん mailto:sage [2011/10/05(水) 22:45:45.00 ]
> アルファベットや記号で半角全角など違う
出来るか出来ないかで言うと出来ないことってあまり無いよ
ただ、ものによっては実装するのにすごく手間がかかるので
別の言語を使うほうが楽だったりして現実的ではなかったり

if /i で大文字小文字の違いは無視して比較出来るけど
半角全角は無視出来ないから、一旦全角を半角に直して比較、、
とかならやれなくないけど面倒だね
フォルダ・ファイル名、一括リネームソフトとかで手直ししてから使うとか
もっと言えば、わざわざBATで書いて作らなくても
正規検索で "タイトル"の一致するPATHを書き出してくれる
フリーソフトを探せばあるんじゃないかな?
BAT書いてみたくて身近なネタがそれだったとかなら別だけど。
目的の為の手段としてBATで書くってなら近いフリーソフトを探したほうがいいよ

あと77の方法だけど set の環境変数の置換使って
](を区切り文字みたいに使えば楽に出来るよ
set a=%a:*]=%
うしろは一工夫すれば出来る

80 名前:デフォルトの名無しさん mailto:sage [2011/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 名前:デフォルトの名無しさん mailto:sage [2011/10/06(木) 00:46:04.94 ]
すいません、凄い初歩でつまづいたのですが、どうか質問をさせてください。

まずはcmdと正規表現の繋がり、基礎を学ぼうと
ykr414.com/dos/dos02.html#09
ここの使用例を参考に、Cドライブ直下にaaaフォルダを置いて、そこに
bbb.txt(中身は適当でテキストという文字も入れた)と、試作.batを入れ、batには
>findstr テキスト bbb.txt
pause
と書いて、これをクリックしたのですが
’テキスト’は操作可能なプログラムまたはbatファイルとして認識されていません
と表示されてしまいました。

なんとか調べてコマンドプロントからcd/をして
C:\aaa>findstr テキスト bbb.txt
とした場合には、「アクセスが拒否されました」と表示されてしまいました。

これは何がまずいのでしょうか?こんな調子で先が思いやられますが…
どうかよろしくお願いします。

82 名前:デフォルトの名無しさん mailto:sage [2011/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 名前:デフォルトの名無しさん mailto:sage [2011/10/06(木) 01:42:35.54 ]
findstr "テキスト" "bbb.txt"

84 名前:デフォルトの名無しさん mailto:sage [2011/10/06(木) 02:56:38.52 ]
>>82
見よう見まねでbatを作ってみたのですが
とても分かりやすい展開で勉強になりました!
分からない行もありましたが、じっくり解読できるよう励んでみます。
ご丁寧にどうもありがとうございました。

>>83
ありがとうございます、出来ました!
batの場合は""が必要なんですね。
cdの操作はカレントディレクトリの移動が出来てないだけでした。
失礼しました。

85 名前:デフォルトの名無しさん mailto:sage [2011/10/06(木) 06:48:56.02 ]
XPと7で処理を分けたい場合ってどうやればいいんですか

環境変数
OS=WINDOWS_NT
ってもうなんの意味もない気が…



86 名前:デフォルトの名無しさん mailto:sage [2011/10/06(木) 07:58:08.97 ]
ver

87 名前:デフォルトの名無しさん mailto:sage [2011/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 名前:デフォルトの名無しさん mailto:sage [2011/10/06(木) 17:29:01.73 ]
すいません、出来たと思っていたのは
"[ab] cd (ef)"ネームのフォルダだけでした。
"[ab] cd"の場合には別途それに合うbatでないと駄目でした。また、
set full=%1
set a=%full:*\=%
とさっきは書きましたが、これは後の*]で運よくパスを削って貰っていただけで
"cd"ネームのフォルダには対応できませんでした。
どうすればsetにフォルダ名だけを載せれるかわかりません。
それも問題ですが他にも頓挫してる場所がありまして
もしよろしければダメ出しをして頂けると嬉しいです。
以下に作ってみたbatを書きます。もしお手数でなければ診てやって下さい。
よろしくお願いします。連投すいません。

89 名前:デフォルトの名無しさん mailto:sage [2011/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 名前:デフォルトの名無しさん mailto:sage [2011/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入れて確認したりとかしながらがんばれ

複数のパス渡して"タイトル"の重複を比較するとなると
"フルパス" "タイトル"を関連付けて環境変数に保持することになるから動的な配列とかかな
d.hatena.ne.jp/jak-san/20090308/1236501217
この辺参考になるかもね

91 名前:デフォルトの名無しさん mailto:sage [2011/10/06(木) 21:00:10.20 ]
>>90
とても為になるアドバイスをありがとうございました。
未だ変数、装飾子、文字列の区別も曖昧ですが、今後は文字列を意識して見ていきたいと思います。
また、%~nxは名前.拡張子の表示だと思っていたのですが、フォルダにも使えるのですね!
そして、私は%1なら""付きだからと安心していたのですが、%~1でこれを""で囲った方が良いのですね。
今後はそのようにします。そして](の判定ですね。上記を修正したら取りかかりたいと思います。
紹介頂いたURLまでたどり着けるように頑張ります。どうもありがとうございました。

92 名前:デフォルトの名無しさん mailto:sage [2011/10/06(木) 21:21:41.03 ]
>>91
"タイトル"同士を厳密に比較出来なくて良くて
対象フォルダが全て同じフォルダにある
パスの書き出しのみ
というエクスプローラーで検索と変わらないようなので良ければもっと簡単に出来るよ

c:\test\music 以下にあるなら
dir /ad /b /s "c:\test\music" | find "タイトル"

この結果をテキストに整形しながらリダイレクトするとかでリスト化は可能かな

93 名前:デフォルトの名無しさん mailto:sage [2011/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 名前:デフォルトの名無しさん mailto:sage [2011/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 名前:デフォルトの名無しさん mailto:sage [2011/10/06(木) 23:26:46.18 ]
"あいう" と書いた時に認識されてるのは「あいう」という文字列ではなく
「"あいう"」という文字列

%a:"あいう"=% で置換されるのは 「123"あいう"えお」であり
「123あいうえお」には反応しない



96 名前:デフォルトの名無しさん mailto:sage [2011/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 名前:デフォルトの名無しさん mailto:sage [2011/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 名前:デフォルトの名無しさん mailto:sage [2011/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 名前:デフォルトの名無しさん mailto:sage [2011/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
www.dotup.org/uploda/www.dotup.org2111797.jpg
こうなってしまいます。これを解決したとして
"[レーベル] タイトル"の場合にfor /D in (*]*)これだと先の (*]*"("*) も含まれてしまい上手くいきません。

今はこれが精いっぱいなんですが、このエネルギーを
for /D %%X in (*) do (if exist ファイル名 (goto ABCDEF) else goto ABCD)
これの形に全力投球しても良いでしょうか?
ifのファイル名を何とかforの(セット)みたいに出来ないか検索中です。
方向性が合っていれば良いのですが…どうかよろしくお願いします。

100 名前:デフォルトの名無しさん mailto:sage [2011/10/07(金) 21:02:23.01 ]
すいません、書き方が間違っていました。
正確にはこうでした。
www.dotup.org/uploda/www.dotup.org2111896.jpg

101 名前:デフォルトの名無しさん mailto:sage [2011/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 名前:デフォルトの名無しさん mailto:sage [2011/10/07(金) 22:18:03.36 ]
>>101
こんなに沢山書いて頂いて本当にありがとうございます!
findと1>nulとif errorleve 1さらにcallまで使用して頂いて
とても勉強になります!よく意味を調べて
使えるようになった上で適応させてみます!
こんなコマンドがあったんですね!盲目になってました。
今日は寝るまで>>101のコマンドを解読しようと思います。
ご丁寧にどうもありがとうございました!

103 名前:デフォルトの名無しさん mailto:sage [2011/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 名前:デフォルトの名無しさん mailto:sage [2011/10/08(土) 02:40:16.51 ]
if not errorlevel 1 set DTITLE="%DTITLE:*]=%
()使わなければいいんじゃねーの?
callしといたほうが無難そうだけどな

105 名前:36 mailto:sage [2011/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 名前:デフォルトの名無しさん mailto:sage [2011/10/08(土) 05:10:28.71 ]
> batって最大でいくつくらい同時に起動しても大丈夫でしょうか?
OSの仕様や搭載メモリ容量によるかもしれんし俺にはよくわからん。すまんね

> 以前単なるD&Dでドライブをまたいてファイルなどを一気にコピーした際に(80GB程度)
> どうゆう訳かコピーが出来ていないファイルや使えなくなったファイルありまして…
firefilecopy使え
ベリファイ出来るしcuiからも使えるからbatに組み込むことも出来る

> 使っているソフトウェアからファイルをこのbatに送る際
> ソフトウェアの制約で複数ファイルを送る場合には
> その複数ファイル個分だけこのbatを多重起動させる必要があるのです。
パスひとつずつbatに送ってるならもしかして上のスクリプト意味無いんじゃないの?
その「使っているソフトウェア」とやらのサポートかスレで聞け

107 名前:36 mailto:sage [2011/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 名前:デフォルトの名無しさん mailto:sage [2011/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です!出来ました! mailto:sage [2011/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 名前:続き mailto:sage [2011/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 名前:デフォルトの名無しさん mailto:sage [2011/10/08(土) 12:29:40.60 ]
DEL_(S,B)FARSTなんて言葉ないですね、デリート(スモール、ビック)FIRSTの意味です。それと

>>103,>>104
ありがとうございます。さっそく使わせて頂きました。

何度も連投して申し訳ないのですが、もう少しの間だけお相手お願い致します。

112 名前:デフォルトの名無しさん mailto:sage [2011/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 名前:デフォルトの名無しさん mailto:sage [2011/10/08(土) 15:19:37.10 ]
>>112
骨身に沁み入ります。善処します。
上位のディレクトリに"タイトル(&入り)"を挟んだところ、正常に処理が出来ました。
ラベルを同一にすればよかったのですね。そこまで気が回りませんでした。
>if "%DTITLE:~1,1%"==" "これならかなり絞り込めますね。
先のfindやifの流れから、練習問題として捉えてました。
正規表現に浮かれて盲目になっていたのもありますが、とても参考になりました。
しばらくgotoとforのサンプルをechoを使いながら見てみます。

身の丈に合わない早歩きで不愉快な思いをさせてしまい申し訳ありませんでした。
そしてご丁寧にどうもありがとうございました。

114 名前:デフォルトの名無しさん mailto:sage [2011/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 名前:デフォルトの名無しさん mailto:sage [2011/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 名前:デフォルトの名無しさん mailto:sage [2011/10/08(土) 22:48:56.39 ]
sortはリダイレクトでファイルに出力した場合は
自分自身をソートするという使い方は出来ないけど
/o で出力した場合は自分自身もソートできる。

リダイレクトして元ファイルを削除するなんて事をしなくてもいい。

117 名前:デフォルトの名無しさん mailto:sage [2011/10/08(土) 23:09:11.12 ]
ソートはしらなんだ

118 名前:デフォルトの名無しさん mailto:sage [2011/10/08(土) 23:12:00.92 ]
type aaa | find "aaa" | sort /+1000000 /o aaa

119 名前:デフォルトの名無しさん [2011/10/10(月) 06:31:34.40 ]
カーナビのmp3の再生順序が、ファイル名や更新日時などではなく
FATテーブルに書き込まれている順序で再生されるのですが、
この並び順を変える良い方法はありませんか?

120 名前:デフォルトの名無しさん mailto:sage [2011/10/10(月) 08:15:04.51 ]
一昨日のあれから"タイトル"が重複するフォルダの移動に取り掛かっているのですが
全くうまくいかずに心が折れました。色々試したつもりではあるのですが…
もしよろしければ、次に何をすべきか、どう組み立てるべきかご教示願えないでしょうか?

>>90さんに紹介頂いた配列変数や、>>115さんに教えて頂いたcall :ラベル 複数→%1,%2%3
これを活用できないかと考えてはみたのですが、私の力では想像が足りませんでした。
せっかく紹介して頂いたのに申し訳ありません。

どうか智慧をお貸し下さい。お願いします。

121 名前:デフォルトの名無しさん mailto:sage [2011/10/10(月) 10:05:15.18 ]
>>120
結局どうしたいの?
重複がわかりやすくなって簡単な方法であれば
フォルダ名を "[レーベル] タイトル (ジャンル)"→"タイトル [レーベル] タイトル (ジャンル)"
とか元のフォルダ名の前にタイトル追加すれば綺麗に並ぶ
"タイトル"tab"ディレクトリパス" とテキストにリスト化することだって出来るし
ディレクトリを "\タイトル\[レーベル] タイトル (ジャンル)\" と
タイトルフォルダ作ってそこへコピーすることだって出来る
それに重複「だけ」にこれらの操作を適用するのか全てのディレクトリに適用するのかとか
(もちろん面倒なのは「重複だけ」の方) 全てに適用でタイトルフォルダへコピーなら
タイトルを比較する必要もなくなる
前にも書いたけど厳密に比較でなく乱暴でよければ
dirの結果を"タイトル"でfindしてその結果を"タイトル"フォルダへコピーとかなら
全ての対象フォルダからタイトル抜いて配列orリスト.txtにして"タイトル"を比較とかしなくて済む

方法なんていくらでもあるしやろうと思えば出来るから。
ただ、あなたがどうしたいかによってやり方や難易度は全然変わってくるので
どういう動作をさせる&させたいのかはっきりしてくれないとこの先はアドバイスしようがないよ

122 名前:デフォルトの名無しさん mailto:sage [2011/10/10(月) 10:14:30.08 ]
>>119
それがわかってるなら再生させたい順で転送しなおせば?
あとそれってバッチは関係あるの?

123 名前:デフォルトの名無しさん mailto:sage [2011/10/10(月) 10:33:58.09 ]
>>121
様々なプランを提示して頂いてありがとうございます。
具体的にやりたい事は、C:\test\juu fuku\ここでbatを実行し
この階層にある全てのフォルダ(フォルダネームは弄らない方向で)を対象に
タイトルが重複するものだけを、C:\test\juu fuku\該当\に移動できるようしたいと思ってます。

面倒になってしまい恐縮ですが、ひとつよろしくお願いします。

124 名前:デフォルトの名無しさん mailto:sage [2011/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
hibari.2ch.net/test/read.cgi/software/1315320625/
◆こんなソフトウェアつくってください〜Part16〜◆
hibari.2ch.net/test/read.cgi/software/1316551791/

125 名前:デフォルトの名無しさん mailto:sage [2011/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 名前:デフォルトの名無しさん mailto:sage [2011/10/11(火) 00:02:59.36 ]
質問者は >>80 を見るとバッチファイルにこだわっているわけではないようだし
テンプレにも「※何でも無理矢理バッチでやろうとせず、WSH等の使用も検討しましょう。」とあるように
他の言語を使ったほうがいいんじゃないか?
そもそもバッチファイルによる高度なプログラミングは初心者向きではなく、職人芸みたいな感じだし

127 名前:デフォルトの名無しさん mailto:sage [2011/10/11(火) 00:05:54.23 ]
>>124,>>125,>>126
ありがとうございます。挑戦させて頂いたのですが
またもや分からない点が溢れだしました。

しかし、これ以上私のレスでここを埋めてしまうのも忍びないので
一度、誘導して頂いたスレッドで依頼してみます。
ただ、並行して1つ目は理解できるよう挑戦していきたいと思います。

それとWSHについてもROMってみるとよく話題にのぼっているので
私も調べてみます。どうもありがとうございました。

128 名前:デフォルトの名無しさん mailto:sage [2011/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 名前:デフォルトの名無しさん mailto:sage [2011/10/11(火) 16:44:47.21 ]
find/?
where find

130 名前:デフォルトの名無しさん mailto:sage [2011/10/11(火) 17:24:09.98 ]
>>129
find /?さえ開けない・・・
コマンドプロント開いて%PATH%打ったらどう表示されますか?
多分ここが違うものに変更されて出来なくなったのかなぁ

131 名前:デフォルトの名無しさん mailto:sage [2011/10/11(火) 17:54:01.17 ]
for %I in (find.exe) do echo %~$PATH:I

132 名前:デフォルトの名無しさん mailto:sage [2011/10/11(火) 18:09:54.10 ]
>>131
実行したら
C:\Ruby192\bin\find.exe

になりました。Ruby192は今日インストールしたやつです。
これからどうすればよいのでしょうか?

133 名前:デフォルトの名無しさん mailto:sage [2011/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 名前:デフォルトの名無しさん mailto:sage [2011/10/11(火) 18:44:40.72 ]
そもそもなんでrubyの方が前に来てるんだよ

135 名前:デフォルトの名無しさん mailto:sage [2011/10/11(火) 18:53:36.18 ]
別にPATHに頼らんでも
C:\Ruby192\bin\find.exe
C:\Windows\System32\find.exe
で好きなほうが使えるだろw
そんなことも知らなかった?



136 名前:デフォルトの名無しさん mailto:sage [2011/10/11(火) 19:16:28.07 ]
>>134
なんかインスコする時PATHがどうこうチェックしたったら前になったったった

>>135
知らないボクに教えて下さい><どうやるんです?

137 名前:デフォルトの名無しさん mailto:sage [2011/10/11(火) 19:19:35.88 ]
> 自分も>>101を試してみようとそのままbatにしてみたのですが
おまえ>>127だろ?なんで別人のフリしてんの?
hibari.2ch.net/test/read.cgi/software/1316551791/88-98

138 名前:デフォルトの名無しさん mailto:sage [2011/10/11(火) 19:24:39.25 ]
>>137
そのスレで知って来たんですけど別人です

139 名前:デフォルトの名無しさん mailto:sage [2011/10/11(火) 19:31:12.09 ]
そもそもRuby入れてどうするのさ

140 名前:デフォルトの名無しさん mailto:sage [2011/10/11(火) 19:40:25.44 ]
>>139
なんか色々使いまわしできそうなフリーソフトの内容だったから自分も欲しくなって。
Rubyのソース貼ってあったしちょっとやってみようかなと入れて見ました。

141 名前:デフォルトの名無しさん mailto:sage [2011/10/11(火) 19:45:44.76 ]
>>136
>>135に書いてあるだろボケ

142 名前:デフォルトの名無しさん mailto:sage [2011/10/11(火) 19:56:13.96 ]
バッチも使えないのがRubyなら使える?

143 名前:デフォルトの名無しさん mailto:sage [2011/10/11(火) 20:49:01.35 ]
>>140
人のマネするなら真摯な受け答えと学習の姿勢も見習った方がいいぞ。

144 名前:デフォルトの名無しさん mailto:sage [2011/10/11(火) 21:22:07.29 ]
>>143
> 学習の姿勢も見習った方がいいぞ。
誰を見習うの?>>127のことを言ってるのならあいつ学習なんてしてなかったと思うが。
あいつが動かないって言って貼ったやつ見たらほとんど試してねーのまるわかりじゃん。
教えたがりのバカもほどほどにしろよと。
hibari.2ch.net/test/read.cgi/software/1316551791/88
> 途中までbatで皆様の助けを得ながら作りましたので
> "タイトル"の抜き出しまでですが
とか言ってるけど>>101>>103がまるまる書いたんじゃねーかよw

145 名前:デフォルトの名無しさん mailto:sage [2011/10/11(火) 22:03:54.50 ]
まあ、重複を調べるなら初めから他の言語で教えたほうが良かったんじゃとは思う



146 名前:デフォルトの名無しさん mailto:sage [2011/10/12(水) 00:01:52.28 ]
>>144
本当にその通りだと思います。言葉の綾にしても酷すぎました。

>>101さんと>>103さん、申し訳ありませんでした。
そしてもう一度、ありがとうございました。

また、お陰様で依頼の品を作って頂く事が出来ました。
紹介して頂いた>>124さんありがとうございました。

最後に、今までの長きに渡りご指導を頂きました皆様に感謝します。
無知な私に時には厳しく、時には易しく教示して頂いた事を忘れず
これらも精進していけたらと思います。本当にありがとうございました。

それでは失礼します。
スレをかき乱してしまい申し訳ありませんでした。

147 名前:デフォルトの名無しさん mailto:sage [2011/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さんに教えて頂いたものをそのまま書きたかったのですが
私の力では理解が足りず、再現することが出来ませんでした。しかし、大変為になるロジックばかりで
このコマンドを作成するにあたり大変お世話になりました。改めてありがとうございました。
それでは失礼しました。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<215KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef