[表示 : 全て 最新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/

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

148 名前:デフォルトの名無しさん [2011/10/12(水) 23:50:38.95 ]
192.168.0.1という文字列を引き渡して、最後の1だけを254に
置き換えたいのですが、どうやったらできますでしょうか?
forを使ってやってみたのですが、うまく置き換えられません。
よろしくお願いします。

149 名前:デフォルトの名無しさん mailto:sage [2011/10/12(水) 23:51:22.22 ]
>>147
動かないです><

150 名前:デフォルトの名無しさん mailto:sage [2011/10/12(水) 23:56:17.44 ]
>>148
set a=192.168.0.1
echo %a:~0,-1%254

151 名前:デフォルトの名無しさん mailto:sage [2011/10/13(木) 00:03:12.90 ]
>>149
すいません、忘れてました。>>109のpauseに下記を代入してください。
echo "%DTITLE:~1,-1%","%DNAME:~1,-1%">>aaa.txt
これで多分大丈夫だと思います。



152 名前:デフォルトの名無しさん mailto:sage [2011/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 名前:デフォルトの名無しさん [2011/10/13(木) 22:35:06.20 ]
>>148
これだと一桁しかダメでした。説明不足ですみません。

>>152
うまくいきました!ありがとうございました。

154 名前:デフォルトの名無しさん mailto:sage [2011/10/14(金) 19:58:12.44 ]
set a=!?-,.、。!?〜ー☆#♪
for %%x in (! ? - , . 、 。 ! ? 〜 ー ☆ # ♪)do call set a=%%a:%%x=%%
echo %a%

このようにすると「,」と「?」が残ってしまうのですが
その2つも消すにはどうすればよいのでしょうか?
また、これは一体何が原因なのでしょうか?

155 名前:デフォルトの名無しさん mailto:sage [2011/10/14(金) 20:12:15.64 ]
エスケープされてないので
,は空白に置換
?は1文字ファイル名に置換

156 名前:デフォルトの名無しさん mailto:sage [2011/10/14(金) 23:12:48.73 ]
>>155
最初のsetを""で囲んでforのセットに^?^,でいけるかなと思ったんですが駄目でした。
他も色々と試してみたのですが、うまいことエスケープ出来ませんでした。
forの外ならset a=%a:?=%とset a=%a:,=%でエスケープもいらないのですが
仕組みを理解したいのでもうちょっと調べてみます。よく分かりませんが。
ありがとうございました。

157 名前:デフォルトの名無しさん mailto:sage [2011/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 名前:デフォルトの名無しさん mailto:sage [2011/10/15(土) 01:40:23.71 ]
?はエスケープでけん

159 名前:デフォルトの名無しさん mailto:sage [2011/10/15(土) 07:59:56.29 ]
>>147
for /d /r c:\test %a in ("*タイトル*") do @echo %a

160 名前:デフォルトの名無しさん mailto:sage [2011/10/15(土) 09:06:03.07 ]
>>157>>158
ファイル名に使えない=\|/:*<>は試してませんが
(! ^ ! ? ☆ ★ ♪ # # $ $ 〜 − ― < > ー - "," " " " " . ・ 「 」 → 、 ” ’ 。 _ & + / \ ・ + "&" % @ @) do なんかは普通に通りました。後は遅延を考慮した""%%""位が特殊な形でした。
危険そうな所は避けているので他にもあるとは思いますが…これらは成功しました。

それでようやく理解しかけているのですが、例えば?と同じく出来なかった%の置換。
doの遅延で2つで1つ状態なので、セットの段階から%%にして、これに他と同じく
""を付けるのですが、他は%%~xで""を外しても大丈夫だったのですが
これは""を外して置くと特殊文字化するので、再びここで囲み直し
結果的に""%%""と二重で囲んで成功しました。

これは?にも当てはまって、""?""これで無効化された普通文字というのでしょうか
おそらく他もこの仕組みなんだろうと思いました。^自体は^^でした。
アドバイスのおかげで成功出来ました。どうもありがとうございました。

161 名前:デフォルトの名無しさん mailto:sage [2011/10/15(土) 09:18:12.11 ]
>>159
forはある程度理解できるようになったと思っていたのですが、全然浅かったです。
ありがとうございます。解読して挑戦してみます。まだgoto文が苦手なんですよね。
おそらくgoto文も使うのでちょっと腰を据えて学んでみます。ご紹介ありがとうございました。



162 名前:デフォルトの名無しさん mailto:sage [2011/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 名前:デフォルトの名無しさん mailto:sage [2011/10/15(土) 14:34:34.66 ]
hibari.2ch.net/test/read.cgi/tech/1298873550/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 名前:デフォルトの名無しさん mailto:sage [2011/10/15(土) 14:44:44.95 ]
>>162
どこが?当たり前だのクラッカだが?

165 名前:デフォルトの名無しさん mailto:sage [2011/10/15(土) 14:48:55.47 ]
hibari.2ch.net/test/read.cgi/tech/1298873550/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 名前:デフォルトの名無しさん mailto:sage [2011/10/15(土) 14:54:44.85 ]
つまらん もちっと珍しいことはないのか?

167 名前:デフォルトの名無しさん mailto:sage [2011/10/15(土) 15:28:12.86 ]
ここを見てると、「(PerlやRubyのような)フリーソフトは危ないから導入禁止」
とかほざいてる馬鹿会社が、いかに罪深いかがよく分かるな。
まあ趣味でバッチを追究するのは、また別の話だが…

168 名前:デフォルトの名無しさん mailto:sage [2011/10/15(土) 15:41:20.39 ]
>>164
いや、ファイル名に%が付いてるのはどうなるかなと思ってね
たいした意味はないよ

169 名前:デフォルトの名無しさん mailto:sage [2011/10/15(土) 15:44:12.87 ]
べつにちっともこまらんが?
あるものを使いこなせない馬鹿社員が、いかに罪深いかがよく分かるな。

170 名前:デフォルトの名無しさん mailto:sage [2011/10/15(土) 15:47:22.16 ]
>>169
暇な窓際社員は呼んでない

171 名前:デフォルトの名無しさん mailto:sage [2011/10/15(土) 17:46:30.61 ]
forのfile setでは?はエスケープできないね
でもfor/fなら?が渡せるよ
scripting.cocolog-nifty.com/blog/2008/11/lf-7446.html
の要領でfor /f in (複数行)にすればよい



172 名前:デフォルトの名無しさん mailto:sage [2011/10/16(日) 15:19:28.43 ]
亀レスだけど>>36
これ凄いな・・・職人芸を感じる。
他の言語知らないから普通の事かもしれんが

173 名前:デフォルトの名無しさん mailto:sage [2011/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 名前:デフォルトの名無しさん mailto:sage [2011/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 名前:デフォルトの名無しさん mailto:sage [2011/10/16(日) 17:34:19.64 ]
何か云えよw

176 名前:デフォルトの名無しさん mailto:sage [2011/10/16(日) 17:35:27.55 ]
何か

177 名前:デフォルトの名無しさん mailto:sage [2011/10/16(日) 17:37:14.47 ]
これ凄いな・・・職人芸を感じる。

178 名前:デフォルトの名無しさん mailto:sage [2011/10/16(日) 22:56:12.18 ]
>>167
windows鯖いじる仕事だったら普通だけど、、
まあ、本番で使ってるのはもっとシンプルなバッチばっかりだけどな。

179 名前:デフォルトの名無しさん mailto:sage [2011/10/17(月) 05:53:06.23 ]
2>nul "%cd:\="&set "HIRAGANA=%"

これなにをやってるの?さっぱりわからない…

180 名前:デフォルトの名無しさん mailto:sage [2011/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 名前:デフォルトの名無しさん mailto:sage [2011/10/17(月) 15:36:37.01 ]
%~nxIを使えば済むところを物好きな



182 名前:デフォルトの名無しさん mailto:sage [2011/10/17(月) 16:13:38.98 ]
>>181
%~nxIだとカレントディレクトリ名でなく、そこにあるフォルダ名になると思うんだが

183 名前:デフォルトの名無しさん mailto:sage [2011/10/17(月) 16:22:55.35 ]
置換の方がfor使って書くより単純だけどな。

ちなみに最後の文字が\だと%~nxiもNGだからね…






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

前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