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/
610 名前:デフォルトの名無しさん mailto:sage [2012/02/24(金) 10:19:43.13 ] >>601 @echo off set i="a" /? "b c" :: jは比較用 set j="b" /? "c" :: \"a\" /\? \"b c\" を作る set "t=%i%" call set "t=%%t:"=\"%%" call set "t=%%t:?=\?%%" :: YES1だけ出たらおk echo %i% | findstr /r /c:"%t%" >nul 2>nul && echo YES1 echo %j% | findstr /r /c:"%t%" >nul 2>nul && echo YES2 pause
611 名前:607 mailto:sage [2012/02/24(金) 16:13:35.83 ] 自己解決。 :: --------------------------------- set path set src=c:\copy\src set dst=c:\copy\dst :: --------------------------------- main script echo ------ Search and Copy Start ------ for /f %%z in (list.txt) do call :copy1 %%z :exit pause exit /b :copy1 set search1=%1 echo %search1% cd /d %src% for /R %%i in (%search1%*) do ( copy %%i %dst% ) exit /b pause :: --------------------------------- end
612 名前:デフォルトの名無しさん mailto:sage [2012/02/24(金) 16:23:09.36 ] exit /b pause <==== これは何のお呪いですか? :: --------------------------------- end
613 名前:デフォルトの名無しさん mailto:sage [2012/02/24(金) 17:16:06.15 ] お祝いです
614 名前:デフォルトの名無しさん mailto:sage [2012/02/24(金) 18:18:43.22 ] 確かにexitの直後のpauseは何の意味がって感じではあるな
615 名前:デフォルトの名無しさん mailto:sage [2012/02/24(金) 19:41:10.39 ] cd /d "%~2" とかで引数で受けるならサブルーチンでcdする意味あるだろうけど cd /d %src% だとcallする度にcdするのは効率悪いから mainのforの前でcdしてしまったほうがいいね
616 名前:607 mailto:sage [2012/02/25(土) 00:47:22.76 ] >>612-615 指摘さんくす いちおう修正版投下しとくね ※list.txtがバッチファイルと同じディレクトリにあるから、ちょっと面倒だった… :: --------------------------------- set path set src=C:\Users\xxxxx\Desktop\copy\src set dst=C:\Users\xxxxx\Desktop\copy\dst set list=list.txt :: --------------------------------- main script echo ------ Search and Copy Start ------ set listpath=%~dp0list.txt cd /d %src% for /f %%z in (%listpath%) do call :copy1 %%z :exit pause exit /b :copy1 set search1=%1 echo %search1% for /R %%i in (%search1%*) do ( copy %%i %dst% ) exit /b :: --------------------------------- end
617 名前:607 mailto:sage [2012/02/25(土) 00:48:07.87 ] set listいみねぇな…まぁいいや… いろいろありがとノ
618 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 10:10:40.37 ] おお、\" で、echo findstr を使うのかー!成る程。ありがとう。 恥を忍んで聞きますが、set "a=b" や、call set が不要に思えます。想定したものがあれば教えて下さい。 対策したのも、あげておきます。spaceだけを置き換えました。他のtabとかも置き換えると、行数が増えます。 set i="a" /? "b c" set Jyouken="a" /? "b c" set Jyouken=%i%==%Jyouken% set Jyouken=%Jyouken: =_SPACE_% if %Jyouken% echo YES!
619 名前:601 mailto:sage [2012/02/25(土) 11:39:22.21 ] 618 に 名前:601 とか >>610 つけるの忘れました。 618 がちょっと、舌足らずなので追加します。 >>610 これだけでも動くので、不要に思えました。 set i="a" /? "b c" set Jyouken="a" /? "b c" set Jyouken=%Jyouken:"=\"% echo %i% | findstr /r /c:"%Jyouken%" >nul 2>nul && echo YES1
620 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 13:37:13.64 ] 拡張子によって処理を分岐させるにはどう書けばいいですか?
621 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 13:47:11.60 ] 質問者が手を抜いてるのに それに答えるアホが現れるかどうか
622 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 13:52:48.57 ] 拡張子を判定してgotoすればいいです。
623 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 13:55:31.07 ] >>620 どこにその文字列が格納されているかによるけどサンプルをいくつか if "%~x1"==".bat" ... goto label%~x1 ... :label.bat for %%i in (foo.bat) do call :label%%~x1
624 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 16:32:51.65 ] すみませんお騒がせしました 昨日調べて作ってみたのが動かなかったんですが なぜかさっきもう一回試したら動きました if "%~x1"==".rar" goto RAR if "%~x1"==".7z" goto 7Z shift :RAR rar x -y -ep1 "%~1" "%~dp1" goto END shift :7Z 7z x -y "%~1" -o"%~dpn1" goto END
625 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 16:38:37.73 ] linuxのwgetみたいなのってbatだけでは無理ですか?
626 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 16:47:10.24 ] ってよく考えたら2つの比較なら if "%~x1"==".rar" (rar" x -y -ep1 "%~1" "%~dp1") else (7z x -y "%~1" -o"%~dpn1") でよかったですね
627 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 17:10:54.72 ] >>625 1.Powershellでごり押し 2.bat|cmdとwshでハイブリットごり押し スクリプトのみはちょっときついかもね
628 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 17:27:47.53 ] Powershellというのでやってみます
629 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 20:34:30.84 ] >>609 > copy /b %1 + nul %1 > これは更新されない 更新されるが?
630 名前:デフォルトの名無しさん mailto:sage [2012/02/25(土) 21:31:05.12 ] >>625 opensourcepack.blogspot.com/2010/05/wget-112-for-windows.html こういうWindowsバイナリを使わずにってこと?
631 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 08:06:00.39 ] それ使っていいなら、こんなスレで質問しないと思うが… バッチ / スクリプトのみではちょっと無理でしょ。 MSXML2.ServerXMLHTTP + スクリプトあたりが無難だと思うが。
632 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 14:33:59.21 ] あー聞き方が曖昧だった。 Windowsバイナリ使わずに技術的に可能ならやってみる、ってこと? を聞いてみたかっただけ。どこまでやってみるのか分からないけど 再帰、階層、ミラー、etc,...、とか考えるだけでしんどそうなのに挑むのかと。
633 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 14:55:11.72 ] 本当に本人かどうかはわからんけど、>>628 で Powershell でやってみると言ってるよ。 > 再帰、階層 むしろここら辺はスクリプトでも扱いやすいと思うけど。
634 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 06:27:04.19 ] バッチに送った複数のファイルやフォルダのパスをソートしたいのですが @(for %%a in (%*) do @echo "%%~fa")|sort ですと "C:\TMP\abc\1ファイル.txt" "C:\TMP\abc\2ファイル.txt" "C:\TMP\abc\3ファイル.txt" "C:\TMP\abc\4フォルダ" "C:\TMP\abc\5フォルダ" のようになってしまいます。これをエクスプローラーの並び順のように "C:\TMP\abc\4フォルダ" "C:\TMP\abc\5フォルダ" "C:\TMP\abc\1ファイル.txt" "C:\TMP\abc\2ファイル.txt" "C:\TMP\abc\3ファイル.txt" としたいのですがどう書けばいいですか
635 名前:デフォルトの名無しさん [2012/02/29(水) 10:40:52.94 ] >>629 俺のは更新されない なんでだろうな
636 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 10:46:38.26 ] vbs呼び出して頑張って自分でソートする
637 名前:デフォルトの名無しさん [2012/02/29(水) 11:56:21.97 ] フォルダに他の属性が無いなら @(@for %%a in (%*) do @if "%%~aa" == "d--------" @echo "%%~fa") | sort @(@for %%a in (%*) do @if not "%%~aa" == "d--------" @echo "%%~fa") | sort
638 名前:デフォルトの名無しさん [2012/02/29(水) 12:02:28.55 ] forとechoの前の@は不要だな
639 名前:ホイミン mailto:sage [2012/02/29(水) 14:54:02.18 ] R:\Ue\Shita>dir /b /s .. ファイルが次の様にあります。 R:\Ue\Shita 上フォルダの中に下フォルダが有り、 R:\Ue\Ue1.txt それぞれ、ファイルが有ります。 R:\Ue\Shita\Shita1.txt このうそつきを実行します。\じゃないところに注意。 R:\Ue\Shita>for %i in (../*) do @echo "%~fi" "R:\Ue\Shita\Ue1.txt" 適当にパスを付けた、有りもしないファイルが表示されます。 >>634 僕も考えてみたよ。637も同じだけど、複数のディレクトリーにまたがる場合は、分ける必要が有るよ。 for /f "delims=" %%a in ('(dir /ad /b /on %* ^& dir /a-d /b /on %* ^) 2^>nul') do echo;"%%~fa"
640 名前:ホイミン mailto:sage [2012/02/29(水) 15:06:06.53 ] でも dir /b /og の方が便利そうだね。 ごめんよ、ややこしくして。
641 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 15:59:08.48 ] ちょっと質問なんですが wget (url) -O ffd.txt type ffd.txt|findstr xhmikosr.exe 1> ffd1.txt for /f "tokens=3-4 delims=_" %%a in ('findstr "xhmikosr.exe" ffd1.txt') do set ver=%%a_%%b wget -N -c (url) innounp.exe -x "ffdshow_%ver%_xhmikosr.exe" move {app}\*.dll C:\Program Files\ffdshow で最後のmoveのとこでコマンド構文が間違ってますといわれるんですが 何が間違ってるんでしょう
642 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 16:00:18.81 ] こうだろうな。 move {app}\*.dll "C:\Program Files\ffdshow"
643 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 16:47:28.73 ] >>642 またやってしまった・・・ ダブルクォーテーションですね ありがとうございました
644 名前:デフォルトの名無しさん [2012/02/29(水) 20:21:18.27 ] >>640 おまえ、全然試してないだろ そのバッチ作ってD&Dしてみろボケ
645 名前:ホイミン mailto:sage [2012/03/01(木) 08:22:30.49 ] >>644 コマンドプロンプトで test.bat .\* 等と、色々やって試したんだけどね、足りなかったね。 dir がフォルダーを展開してしまうのには、書き込んでから気付いたんだけど、くどいので訂正しなかたんだよ。 使えない書き込みだから、みんな無視するだろうと思っていたよ。 一々反応してくれるのはありがたいけど、君は社会性が無いようだね。
646 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 08:25:30.43 ] @echo 便所の落書きに(ry&pause
647 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 11:51:26.33 ] 便所の落書きだか知らんが どう試したんだよw 全然ダメだろw
648 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 13:03:21.98 ] @echo 便所の落書きに^(ry&pause
649 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 15:15:45.41 ] dirの/oは引数をソートしないよ
650 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 15:54:15.80 ] 複数のファイルをバッチにD&Dしたら 引数の順番って、どう決まるの? echo %* マウスカーソルの位置のファイルが一番目?
651 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 22:29:17.92 ] そうよ 2番目以降は並び順、ラップラウンド
652 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 22:30:26.30 ] ついでに言うと、1番目ファイルでカレントディレクトリ
653 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 23:10:40.16 ] バッチにD&Dしたら、カレントディレクトリは %HOMEDRIVE%%HOMEPATH%が既定値なのでは?
654 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 23:25:46.89 ] なのではって?そうなるのか?OSは?
655 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 23:30:35.02 ] すまん。俺のPCは古い化石なんで、Win2000 他のは違うんかも
656 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 00:04:32.12 ] カレントディレクトリはバッチに落とした場合とバッチのショートカットに 落とした場合で異なる。
657 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 00:38:45.35 ] ショートカットの場合はプロパティで確認できる。 D&Dしたファイルとは無関係なようです
658 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 00:40:18.10 ] ショートカットで設定してなければバッチと同じ 当たり前だろ
659 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 00:56:50.35 ] だから何? おれはショートカットの話は別にどうでもいいんだが
660 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 01:15:31.22 ] カレントディレクトリはバッチに落とした場合とVBSに 落とした場合で異なる。
661 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 01:16:24.16 ] だから何? おれはVBSの話は別にどうでもいいんだが
662 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 01:20:45.18 ] 他人のレスの真似するなよ。
663 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 02:36:25.83 ] なんでvbsは違うんだ?
664 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 02:39:43.76 ] だから何? おれはVBSの話は別にどうでもいいんだが
665 名前:デフォルトの名無しさん mailto:saga [2012/03/02(金) 02:53:26.53 ] >>659 お前バカだろ。起動時のカレントディレクトリはあてにしてはいけないという事だ。 つまり、>>652 の情報は何の意味もない。
666 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 02:54:30.97 ] なんでスレタイ読めないの? おれはVBSの話は別にどうでもいいんだが
667 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 03:39:03.93 ] VBSのドロップハンドラがへぼいんだろ
668 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 08:52:29.56 ] >>665 お前バカだろ。当たり前だろ
669 名前:ホイミン1 mailto:sage [2012/03/02(金) 11:52:24.56 ] >>649 おお、そうなんだ勉強になったなあ。確認したんだけどなあ。 でもそんなにも僕はうっかり者だったのかと、もう一度確認したけど、ソートされているみたいだよ。 なにか勘違いしているかな? dir が使えなかったのは、変わらないけど。 R:\Ue\Shita>dir /b /on fortest.bat "Shit a2.txt" dirfile.bat dirfile.bat fortest.bat Shit a2.txt Drug and Drop は absolute で渡されるからいいんだけど、relative path を使った short cut の上に D'nD する際に問題になって、調べた事があるよ。 Drug and Drop は vista 以降で変更されているようだよ。 current directory は、XP 以前では %HOMEDRIVE%%HOMEPATH%、vista 以降では %~dp1 らしいね。 参考 www.hirax.net/diaryweb/2009/06/04.html
670 名前:ホイミン2 mailto:sage [2012/03/02(金) 12:05:26.19 ] まとめてみたよ。XP では確認した(けど、でもばっちり確認したわけじゃあないから、低レベルな事を言わないで訂正してくれ)よ。 Current Directory in the various cases of launching ______________________ , 2000, _ XP,VISTA,SEVEN DrugAndDrop___________ , HOME, HOME, _ %1, _ %1 DoubleClick___________ ,Lnchd,Lnchd,Lnchd,Lnchd DrugAndDrop On ShortCut, HOME, HOME, _ %1, _ %1 DoubleClick Of ShortCut,Lnchd,Lnchd,Lnchd,Lnchd -Anotation -ShortCut is in case of the blank of "Start In". If not blanked, current directry follows it. - HOME: %HOMEDRIVE%%HOMEPATH% - _ %1: Directory of the 1st argument -Lnchd: Launched directory (in case of short cut, directory of short cut) drug and drop の際の問題といえば、全角スペース(他にも有)を含む "file name.txt" などのファイルを Drug and Drop するとクオートされないよね。他にも知ってる問題があったら、教えて。
671 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 14:15:09.54 ] コマンドとか以前に × Drug ○ Drag
672 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 19:16:55.25 ] >current directory は、XP 以前では %HOMEDRIVE%%HOMEPATH%、 explorer processのcurrent directoryでは?
673 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 19:33:17.13 ] moveでフォルダ移動のときフォルダ名指定に*使えないのは嫌がらせでしょうか
674 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 20:06:48.04 ] 仕様です
675 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 00:56:48.46 ] >>669 俺は >>649 じゃないが、dir の /og は引数をソートしないようだ。 他は知らない。 というか間違いを書き込んで放置している奴が、 他人に社会性云々などと言える立場かよ。 レベルが低くて悪かったね。 便所の書き込みでした。
676 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 01:24:11.63 ] ドラッグ&ドロップ 前提のバッチファイルならバッチの冒頭とかに cd /d %~dp0 や cd /d %~dp1 とかを状況次第で必要に応じて書き加えていそうなもんだが。 OS による挙動の違いで問題、とかいってる前にしないのかね。
677 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 01:49:25.89 ] >>669 dir /b /on test\2\2.txt test\1\1.txt 2.txt 1.txt
678 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 03:30:18.27 ] どうでもいいっす
679 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 05:21:31.12 ] バージョンの違いだろwあほども
680 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 09:01:15.54 ] 低レベルな事を言わないでくれってさ
681 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 10:50:21.10 ] >>676 バッチファイルでcd前提の処理は UNCパスで実行された場合、想定外の動作になる バッチファイルは相対ダメ ゼッタイ絶対パス指定すべし
682 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 11:08:26.87 ] どうでもいいっす
683 名前:634 mailto:sage [2012/03/03(土) 12:11:55.59 ] >>637 ありがとうございます 教えて頂いた方法でやりたいことが出来ました 好奇心から、異なるディレクトリのものをまとめて送れるランチャーやファイルのリストなどから 同様のことが出来ないものかと機能拡張を試みて試行錯誤していてお礼が遅くなりました 申し訳ございません 改めまして再度質問です。よいお知恵があればご助言お願いします arg.tmpの内容 list.txt 表示したい結果 "C:\TMP\aaa.txt" "C:\TMP\abc" "C:\TMP\abc" "C:\TMP\abc" "C:\TMP\aaa.txt" "C:\TMP\aaa.txt" "C:\TMP\abc.txt" "C:\TMP\abc.txt" "C:\TMP\abc.txt" "C:\TMP\abc\1ファイル.txt" "C:\TMP\abc\4フォルダ" "C:\TMP\abd.txt" "C:\TMP\abc\2ファイル.txt" "C:\TMP\abc\5フォルダ" "C:\TMP\bbb.txt" "C:\TMP\abc\3ファイル.txt" "C:\TMP\abc\1ファイル.txt" "C:\TMP\abc\4フォルダ" "C:\TMP\abc\4フォルダ" "C:\TMP\abc\2ファイル.txt" "C:\TMP\abc\5フォルダ" "C:\TMP\abc\5フォルダ" "C:\TMP\abc\3ファイル.txt" "C:\TMP\abc\1ファイル.txt" "C:\TMP\abd.txt" "C:\TMP\abd.txt" "C:\TMP\abc\2ファイル.txt" "C:\TMP\abd\123.txt" "C:\TMP\abd\efg" "C:\TMP\abc\3ファイル.txt" "C:\TMP\abd\456.txt" "C:\TMP\abd\123.txt" "C:\TMP\abd\efg" "C:\TMP\abd\efg" "C:\TMP\abd\456.txt" "C:\TMP\abd\123.txt" "C:\TMP\bbb.txt" "C:\TMP\bbb.txt" "C:\TMP\abd\456.txt" arg.tmpのソートの方法がまずいということはわかるのですがどうすればいいのやら。。 以下に書いたバッチを貼ります。少し長いですがご容赦願います
684 名前:634 mailto:sage [2012/03/03(土) 12:12:59.66 ] @echo off set argpath= set arglist= call >"%~dp0list.txt" @(for %%a in (%*) do @echo "%%~fa")|sort /o "%~dp0arg.tmp" for /f "usebackq" %%b in ("%~dp0arg.tmp") do call :sub1 %%b call :sub2 rem del "%~dp0arg.tmp" pause&exit /b :sub1 if not defined argpath ( set argpath="%~dp1" set arglist=%1 exit /b ) if %argpath%=="%~dp1" ( set arglist=%arglist% %1 exit /b ) call :sub2 set argpath="%~dp1" set arglist=%1 exit /b
685 名前:634 mailto:sage [2012/03/03(土) 12:13:15.16 ] :sub2 set arglistfile= for %%c in (%arglist%) do call :sub3 "%%~ac" "%%~fc" if not defined arglistfile exit /b for %%d in (%arglistfile%) do >>"%~dp0list.txt" echo "%%~fd" set arglist= exit /b :sub3 set attr=%1 set attr=%attr:~1,1% if "%attr%"=="d" ( >>"%~dp0list.txt" echo "%~2" ) else ( set arglistfile=%arglistfile% "%~2" ) set attr= exit /b
686 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 12:38:57.51 ] 絡んだおれがバカだった 絶対パスで好きにしてくれ
687 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 13:57:54.46 ] てかいまどきバッチファイルなんか書いてる奴らが総じて底辺。
688 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 14:00:13.55 ] >>679 テキトーなことぬかすなボケ
689 名前:634 mailto:sage [2012/03/03(土) 15:20:00.58 ] arg.tmpの内容を "%%~dpa" "%%~fa" としてソートし :sub1 の%1を%2とすることで解決出来ました こっちのほうが効率がいいとかありましたら指摘お願いします。以下、修正したバッチです @echo off set argpath= set arglist= set tmpfile="%~dp0arg.tmp" set output="%~dp0list.txt" call >%output% @(for %%a in (%*) do @echo "%%~dpa" "%%~fa")|sort /o %tmpfile% for /f "usebackq delims=" %%b in (%tmpfile%) do call :sub1 %%b call :sub2 del %tmpfile% exit /b :sub1 if not defined argpath ( goto :jump ) if %argpath%=="%~dp2" ( set arglist=%arglist% %2 exit /b ) call :sub2 :jump set argpath="%~dp2" set arglist=%2 exit /b
690 名前:634 mailto:sage [2012/03/03(土) 15:20:35.76 ] :sub2 set arglistfile= for %%c in (%arglist%) do call :sub3 "%%~ac" "%%~fc" if not defined arglistfile exit /b for %%d in (%arglistfile%) do >>%output% echo "%%~fd" set arglist= exit /b :sub3 set attr=%1 set attr=%attr:~1,1% if "%attr%"=="d" ( >>%output% echo "%~2" ) else ( set arglistfile=%arglistfile% "%~2" ) set attr= exit /b
691 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 18:01:42.04 ] うざ
692 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 19:48:23.70 ] %~dpは早退なのかよ
693 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 20:02:34.08 ] 遅刻なのかよ
694 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 20:06:23.02 ] dir /b /on test\2\2.txt test\1\1.txt 1.txt 2.txt
695 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 21:11:40.93 ] dir /b /on z:\z.txt y:\y.txt z.txt y.txt
696 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 21:39:04.11 ] dir /b /on z:\* y:\* z.txt y.txt
697 名前:デフォルトの名無しさん mailto:sage [2012/03/03(土) 22:59:19.02 ] dir /b /on test\2\2.txt test\1\1.txt |sort 1.txt 2.txt
698 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 01:33:17.02 ] >dir /b /on a.txt b.txt a.txt b.txt >dir /b /o-n a.txt b.txt b.txt a.txt
699 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 01:34:32.16 ] >>698 確かに引数をソートしてるな
700 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 01:37:41.92 ] >dir /b /on a b a.txt b.txt a.txt b.txt >dir /b /o-n a b b.txt a.txt b.txt a.txt
701 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 01:38:36.31 ] ディレクトリ単位にソートってことだろ?
702 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 10:23:07.77 ] >>689 俺もバッチ作ってみた @echo off & cd /d "%~dp0" del tmp1 tmp2 list.txt > nul 2>&1 (for %%i in (%*) do @echo "%%~dpi","%%~fi")| sort /o tmp1 set /a a=10000 & set b="" for /f "delims=, tokens=1,2" %%i in (tmp1) do ( set c=%%i& set d=%%~aj& set e=%%j& call :x) for /f "delims=, tokens=2" %%i in ('sort tmp2') do echo %%i>> list.txt del tmp1 tmp2 & goto :eof :x if not %b% == %c% set b=%c%& set /a a+=1 if %d:~0,1% == d (set /a f=0) else set /a f=1 echo %a%%f%,%e:~0,-1%>> tmp2
703 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 15:41:04.60 ] うざ
704 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 16:17:47.60 ] >>689-690 はファイル名に%文字があると誤動作する
705 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 18:03:47.92 ] どの行?
706 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 18:07:01.85 ] あの行
707 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 18:09:41.44 ] たぶんcallの引数の%が化ける
708 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 19:27:26.60 ] 引数渡しやめて環境変数渡しにすればよい
709 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 23:36:02.16 ] >>704 ファイル名の%ってどうやって環境変数記号でないと判断させればいいの? ファイル名内の%の位置を調べて存在したら ^でエスケープするしかない?
710 名前:デフォルトの名無しさん mailto:sage [2012/03/04(日) 23:38:42.64 ] %のエスケープは%%だよ