【.cmd】 バッチファイルスクリプト %6 【.bat】
1 :
デフォルトの名無しさん :
2010/06/25(金) 20:29:16
お願いします。 for /f "usebackq tokens=*" %i in (`echo c:\`) do @set RESULT=%i echo %RESULT% c:\ とうまくいくのですがこれにパイプを入れて for /f "usebackq tokens=*" %i in (`echo c:\ | dir`) do @set RESULT=%i とすると、| の使い方が誤っています。とエラーになります。 echo c:\ | dirだけ打ち込むと、 dir c:\と同じ結果が得られます。 パイプ処理を用いたコマンド結果を変数に格納したいのですが、うまくいきません。 どのようにすればうまくいくか教えて下さい。 主として使うOSはvistaですが、xpでも動くようにしたいです。
>xpでも動くようにしたいです。 xpだとecho c:\ | dir自体うまくいかないぞ カレントディレクトリのリストが表示されるだけ 普通にdir c:\形式に書き換えればいいんじゃねーの
5 :
3 :2010/06/28(月) 07:40:33
>>4 レス恐縮です。
コマンドは、dirを説明上用いていますが、
for /f でパイプが動作しないのです。
コマンドの組み合わせが悪いのかと思い
いろいろコマンドを変えてはみたのですが。
そこをなんとかお教えいただければ。
ちなみに当方の環境では、echo c:\ | dirはうまく動きました。
xp proとメディアセンターエディションで確かめました。
| を ^ でエスケープして ^|
他の例は「バッチファイル エスケープ」あたりでググれば良いかと。
本筋じゃないけど、
>>4 の言うように「echo c:\ | dir」はうまくいかないと思うんだが。
「dir /b < echo c:\」?
単に説明に使ってるだけだからdirでもdriでもなんでもいいんじゃね
for /f "usebackq tokens=*" %i in (`"echo c:\ | dir"`) do @set RESULT=%i "〜"で逃げろ
9 :
デフォルトの名無しさん :2010/06/29(火) 07:20:47
。・ 。・゚。・゚。・゚。゚・.・。゚゜。゚・。.゚・。
。・゚ 。・゚ 。・゚。・ ・゚.
。・゚ 。・゚ 。・゚ 。・。
。・゚ 。・゚ 。・゚ 。・。・
。・゚ 。・゚ 。・゚ 。・。・゚
。・゚ 。・゚ 。・゚ 。・。・゚・
。・゚ 。・゚ 。・゚ 。・゚・゚・
。・゚ 。・゚ 。・゚ 。・゚・。・゚
。・゚ 。・゚ 。・゚ 。・゚・。・ ゚・
∧_,,∧ 。・゚ 。・゚ 。・゚ ・。・゚・ 。 ・゚。
( ;`・ω・ ) 。・゚ 。・゚ 。・゚。・゚・。 ・゚・。 ・゚・。・゚ ・。・゚・。・゚・ 。・゚ ・。・。・
/ o━ヽニニニニニニニニニニニニニニニニニニフ
しー-J
ID:にカーソルを合わせると不思議と
>>1 乙になる馬鹿にはできない魔法のコピペ
ファイルをD&Dすると拡張子を除去するバッチを作ったんですが、 全角スペースが含まれている場合にファイル名が分割されてしまって動きません。 半角スペースが含まれる場合はダブルクォーテーションが付加されるので問題なく処理できるのですが・・・ やはり対処法はファイル名を変更するかD&Dをしないことしかないでしょうか。 echo %1 >> log.txt を追加してやると、ファイル名が分割されてるのが確認できます。 cd /d "%~dp1" :loop if %1=="" goto end rename %1 "%~n1" shift goto loop :end とりあえず > rename "たいとる *.*" "たいとる *.*" でまとめて半角スペースにできたのでこれでいきます。
%*を自分でパーズすればできるよ
パーズ
普通のプログラミング言語ならやりやすいだろうけど %~dp1を記憶しといて一致するまでのやつを連結? ちょっと大変だなあ。
ぐぐればサンプルあるよ
set x=%* for %%i in (%x: =?%) do echo "%%~i"
18 :
デフォルトの名無しさん :2010/07/14(水) 11:13:01
&を含む引数を受け取る方法は無いでしょうか? 拡張子関連付けして、他のプログラムから受け取ってます
""で囲ってやると受け取れるみたいだ
20 :
デフォルトの名無しさん :2010/07/14(水) 14:50:18
>>19 ありがとうございます。
いろいろ試行錯誤してたのが馬鹿みたいに、スマートに解決しました。
exeファイルがコンソールアプリか否かバッチでどうやっったら判定できますか?
後は任せた set command=%1 goto %command% :explorer :notepad echo not CUI exit /b :cmd :sort echo CUI exit /b
バリバリ やめて!(ry @if(0)==(0) echo off cscript.exe //NoLogo //E:JScript "%~f0" %1 echo %errorlevel% goto :EOF @end var sc=new ActiveXObject("ScriptControl"); sc.Language="VBScript"; sc.AddCode("Function bin(t):bin=AscB(t)+AscB(MidB(t,2,1))*256:End Function"); function B(data){return sc.Run("bin", data);} var ado=new ActiveXObject("ADODB.Stream"); ado.Type=1; ado.Open(); ado.LoadFromFile(WScript.Arguments(0)); if(23117!=B(ado.Read(2))){ado.Close();WScript.Quit(-1);}//not MZ ado.Position=ado.Size>60?60:0; sigp=B(ado.Read(2)); ado.Position=ado.Size>sigp?sigp:0; sig=B(ado.Read(2)); if(17744==sig){//PE ado.Position=sigp+92; sys=B(ado.Read(2)); ado.Close(); WScript.Quit(sys); }else if(17742==sig){ado.Close();WScript.Quit(-2);//NE }else ado.Close();WScript.Quit(-3);//MZ
exehder.exe dumpbin.exe
SHGFI_EXETYPE
27 :
デフォルトの名無しさん :2010/07/21(水) 23:57:28
バッチを実行したタイミングで指定したテキストファイルに 現在の日時を追記し保存する処理を考えています できるだけ簡単にやりたいのですがcmd(コマンド)だけでできますでしょうか? cmdのショートカットだけでできれば1番いいのですが スレ違いでしたら、すいません。
echo %date% %time% >> "%~0.log" start "" yourcommand
cmd /c echo %date% %time% >> "%~0.log" & start "" yourcommand
30 :
27 :2010/07/22(木) 09:57:25
>>28-29 ありがたき幸せ
あとは余計な秒を削るのを調べてみます
yyyy/mm/dd hh:mm:ssにしたいので
31 :
27 :2010/07/22(木) 18:51:07
>>30 の目的が達成できました
バッチスクリプトは奥が深いですね
少し勉強してみます
32 :
27 :2010/07/22(木) 23:29:23
連投ですいません cmd /c echo %date% %time% >> "ログ.txt" これを実行して生成されたファイルを見ると yyyy/mm/dd hh:mm:ss△ と表記されます(△は半角ブランク) この半角ブランクをバッチスクリプト内で外す事が出来ずに悩んでます 何か良い方法がありますでしょうか? また、何故半角ブランクが付加されるのでしょうか?
>>32 cmd /c echo %date% %time%>> "ログ.txt"
リダイレクトの直前のスペースを書かない
すいません。誰か教えてください ドラッグ&ドロップするとファイル名の先頭に「決」をつけるように ren %~f1 決%~n1%~x1 としたんですが、ファイル名に空白があると「コマンドの構文が誤っています」と出ます。 対処法を教えてください。 また複数ファイルドロップに対応する方法はありますでしょうか? よろしくお願いします
for %%a in (%*) do ren "%%a" "決%~n1%~x1" 確認してない
>>35 ありがとうございます。
確認したら出来ませんwwwでしたが、元にして完成しました。
空白もなんとか解決できそうです。
37 :
32 :2010/07/23(金) 07:49:36
>>33 そんなオチだったとは…
○| ̄|_
ありがとうございました
>>34 をcmdのショートカットだけでできますか?
有効なIPが割り当てられているか否かで処理を分岐したいんですが ネットワークに接続できている場合変数に0、接続できていない場合変数に1を入れたい場合どうすればよいでしょうか?
>>39 自分自身が持つIPが有効で接続されているかどうかということ?
ipconfigでデフォルトゲートウェイのIPアドレスを取得して
そこにpingして帰ってきた文字列をfindして分岐かな?
ping後のerrorlevelでええがな
netsh interface <ipv4 or ipv6> show interfaces netsh interface <ipv4 or ipv6> show ipaddress name=<インデックス or 名前>
>>40 ありがとうございます。
できました
この方法で分岐しようと思います。
>>41 ありがとうございます。
その方法だと場合によって無効でもerrorlevelに0が入ってしまうんです・・・。
オプションでできるかもしれませんがわかりませんでした。
>>42 ありがとうございます。
一番スマートそうですが
僕のレベルだと理解できませんでした・・・。
すまんこ forのヘルプに書いてあったwww
>>44 解決しました。
CD TEST
FOR /F "DELIMS=" %%A IN ('DIR /B ^| FIND /C /V ""') DO SET COUNT=%%A
バッチファイルで、一年の第何週目であるかを求めることはできるでしょうか。 可能な場合、どのような方法があるでしょうか。 バッチファイル向きの作業でないのは十分承知しているのですが…。
yes 一年の第何週目であるかを求めるプログラムの戻り値を利用する
たとえば今年の1月1日は金曜日だけど 去年の12月28日〜31日は今年の第1週目には含まれない 1月1日と1月2日までが第1週目 1月3日から第2週目 ってことでいいの?
50 :
47 :2010/08/13(金) 22:19:25
みなさんありがとうございます。
>>48 そうですね。今回は OS 標準の機能でできればと思って質問しました。
>>49 1 月 1 日を含む週に 4 日以上ある場合、第 1 週になるそうです。
ですので今年は 1 月 3 日の週が第 1 週みたいです。
OS 標準の機能ということなら、WSHで作ってバッチファイルから呼び出すというのは?
>>51 そうですね、WSH に馴染みがないのですけど、まずは文法を調べてみます。
多分どこか間違ってる @echo off set y=%date:~0,4% set /a m=1%date:~5,2%-100 set /a d=1%date:~8,2%-100 call :z %y% %m% %d% set /a d-=zwd set /a d+=13 call :md %y% %m% %d% set /a c=md/7 call :z %y% 1 1 if %zwd% geq 4 set /a c-=1 echo %c% goto :eof :md set sd=000000 31 59 90120151181212243273304334 set /a md=%2*3 call echo %%sd:~%md%,3%%+%3 call set /a md=%%sd:~%md%,3%%+%3 if %1 geq 3 set /a md+=(!(%1%%4)^^!(%1%%100)^^!(%1%%400)) goto :eof :z set /a zy=%1,zm=%2,zd=%3 if %zm% leq 2 set /a zy-=1,zm+=12 set /a zwd=(zy+zy/4-zy/100+zy/400+(13*zm+8)/5+zd)%%7 goto :eof
:zはツェラーの公式
日付処理はバグがつきもので地雷だからな
>>53 有効なのは2000〜2099年までみたい?
何処いじればいいのか分からないけど
>>55 ややや、車輪の再開発かや…
アッチのスレで答えたのに無視か…
dateコマンドって地域と言語の設定でフォーマット変わるからなぁ 英語OSだと通常 mm-dd-yy とか
年は和暦かもしれん
デスクトップパソコンとノートパソコンをバッチ上で判定させたいんだけど、何か良い方法はないかしら?
バッテリがあるかないかとか
63 :
デフォルトの名無しさん :2010/08/16(月) 12:05:42
ありがとうございました
>>62 う〜ん、いろいろ調べてみたけど難しい・・・
難しく考えないでユーザーが手動で環境変数でセットすりゃいいんじゃね if "%notepc%"=="1"
それじゃ意味が無い
スクリプトの挙動変えるための環境変数設定なんて普通にやるだろ…
だから意味が無いといっておる
PROCESSOR_IDENTIFIER
Windows 7 で Gauche (Lisp の方言のひとつである Scheme をベースとしたスクリプト言語) の関連付けをしたんだわ。 assoc .scm=GaucheScript ftype GaucheScript=gosh "%1" %* で、 hoge.scm 1 2 3 てな感じでコマンド入力すると gosh hoge.scm "1 2 3" であるかのように展開されるみたい。 もしやと思って %* のかわりに %~* と書いてみたりもしたけど駄目だった。 どうにかして残りの引数をひとまとまりにしないような書き方ってある?
Windows7にGauche入れて試してみたけど %* で問題なかったよ C:\>type hoge.scm (define (main args) (for-each print args)) C:\>hoge.scm 1 2 3 C:\hoge.scm 1 2 3 C:\>hoge.scm "1 2 3" C:\hoge.scm 1 2 3
72 :
70 :2010/08/18(水) 21:44:44
なんでだろ。 どこか変な設定入ってんのかな。
73 :
70 :2010/08/31(火) 03:04:02
どうしても解決できない。 レジストリか何かで設定が変わるんでしょうか?
74 :
70 :2010/08/31(火) 03:14:35
ftype をやりなおしたら何故か解消した。
任意ファイルをd&dするとUNIXにftpで転送し、telnetして計算を実行、 計算終了後に計算結果をftpで転送するbatを作ろうとしてるのですが、 二つほどうまくいきません。 一つはtelnet終了の判断が付かないことです。センドキーを使用していますが exitでtelnetから抜けた後は次のコマンドに移らないので、pauseで次のコマンドに 移るようにしています。 もう一つは、計算結果をgetする際に、ファイルのあるフォルダ指定がうまく行きません。 パス名取得の%^p1を使用すると、”\任意のフォルダ\"の様に”\”で挟みますが ftpでは右側に"\"があると認識しないようで、”\任意のフォルダ"にする必要が あるため、一旦別の決め打ちしたフォルダにgetした後で、任意のフォルダへ ムーブする方法を取っていますが、何か方法はないでしょうか?
scp/ssh
xcopy test.txt C:\test2.log /h /c /y /r で拡張子、リネームしてコピーしようとしているのですが、 コマンドプロンプト画面で C:\test2.log は受け側のファイル名ですか、 またはディレクトリ名ですか (F= ファイル、D= ディレクトリ)? と聞かれるのですが、それをbatで自動化にできないでしょうか?
echo y|
/s /e /v /k /h /c /y /r
>>61 デスクトップとノートの能力的な違いって何があるかな。持ち運び以外の点で。
性能的にはデスクトップノートみたいな高性能のものもあるわけだし、
大容量UPSとか付けたらデスクトップでもバッテリーがあるのと一緒だし。
UPS代わりになるのは大きい
>>77 単一ファイルなのにcopyを使わない理由は?
83 :
デフォルトの名無しさん :2010/09/06(月) 20:39:40
>>61 デスクトップPCにUPSが噛まされてたらバッテリー可否じゃ判定ミスるから
スピーカー設定がラップトップかデスクトップで見るとかは?
流石にデスクトップPCでラップトップに設定してる奴はいないだろうし
サウンドドライバないPCは知らん
しかしノートPCとデスクトップPCの判定って考えてみると奥が深いな
PC機種名が取れれば予め作成した膨大なテーブルで検索すれば…
…自作PCで積むな…
ま、完璧に判定するのは無理っぽいね
>>82 レス遅れてすみません。
説明が欠けていました。
隠しファイルをコピーしたいんです。
86 :
デフォルトの名無しさん :2010/09/07(火) 23:00:45
こんなかんじでlist.txtから呼び出した文字をつかってコマンド実行したいのですが、 for /f "delims=" %%i in (list.txt) do ( for /F "tokens=*" %%s in ('dsquery group -name %%i') do ( 〜 ) 'dsquery group -name %%i'の箇所がコマンドとして認識されません。 コマンドに引数渡すのって無理でしょうか?
bashでctrl + uを押すとカーソルより前にある文字が削除されますが、 vimでctrl +uで同じキーバインドにすることができますか? vimの「dd」だと「ctrl + u」よりも面倒くさい気がするので
>>86 普通に出来るが?
list.txtの内容とコマンドがおかしいんじゃね?
そいつマルチ
>>86 for /f "delims=" %%i in ('type list.txt') do (
91 :
デフォルトの名無しさん :2010/09/19(日) 15:42:44
フォルダ内のある拡張子のファイル数を取得して変数にセットできますか? ファイル名はいいので、ファイル数だけ取得できればよいです。
可能
for /f "usebackq" %%q in (`dir *.%1 ^|find "個のファイル"`) do @echo %%q ---↑無理矢理版 ↓ありがち版 ::count.bat @echo off setlocal set counter=0 for %%q in ("*.%1") do set /A counter=counter+1 echo %counter%
94 :
デフォルトの名無しさん :2010/09/19(日) 22:17:40
>>93 ありがとうございます。ありがち版を使わせていただきます。
もうひとつ相談なのですが、
あるディレクトリにあるファイル名をテキストに書き込みたいと思っています。
ディレクトリ内には
abc_1.txt
abc_2.txt
・
・
・
といったファイルがあり、出力する1ファイルに3ファイル名ずつ書き込みたいです。
(1.txtにはabc_1.txt〜abc_3.txt、2.txtにはabc_4.txt〜abc_6.txt)
わかりにくい説明かもしれませんが、よろしくお願いします。
setlocal enableextensions enabledelayedexpansion set c=3 for /f %%i in ('dir /b') do ( set /a n=c/3 set /a c+=1 echo %%i>>!n!.txt )
96 :
デフォルトの名無しさん :2010/09/19(日) 23:09:29
>>95 ありがとうございます。
しかし、実行すると
「2010/09/19」
のように日付が書き込まれてしまいます。
ファイル名を取得する方法はないでしょうか?
よろしくおねがいします。
そりゃdir /b のところをdirだけにしてるんじゃね? ファイル名にスペースが含まれるものなら for /f "delims=" %%i in ('dir /b') do (
98 :
デフォルトの名無しさん :2010/09/19(日) 23:42:02
>>98 指摘ありがとうございます。
dirの後にパスを指定するときに/bを消してしまっていました。
ひとつ質問したいのですが、
setlocal enableextensions enabledelayedexpansion
の行はどんな意味があるのでしょうか?
丸投げ教えて君の相手は……
101 :
デフォルトの名無しさん :2010/09/20(月) 13:32:18
>>94 ,95で
abc_1.txt,abc_4.txt,abc_7.txt・・・の時は
「ファイル名 1ファイル目」
abc_2.txt,abc_5.txt,abc_8.txt・・・の時は
「ファイル名 2ファイル目」
abc_3.txt,abc_6.txt,abc_9.txt・・・の時は
「ファイル名 3ファイル目」
という風にファイル名の後に特定の文字を記述することはできないでしょうか?
if文を使えばいいと思ったのですが、考えてもできませんでした。
わかる方いたら教えてください。よろしくお願いします。
できません
103 :
95 :2010/09/20(月) 14:47:28
104 :
デフォルトの名無しさん :2010/09/20(月) 15:03:37
調べてもわからないのでわかる方に聞いているつもりなのですが・・・
95を見てちょっと考えればすぐわかる、小学生レベルの代物。 そんなもの調べてる段階でお前にゃ無理。
106 :
デフォルトの名無しさん :2010/09/20(月) 15:27:46
setlocal enableextensions enabledelayedexpansion set c=3 set x=0 for /f %%i in ('dir /b C:\RS3XDW\temp') do ( set /a n=c/3 set /a c+=1 echo %%i -X%x% >> C:\RS3XDW\merge\m!n!.txt set /a x+=2000 ) ファイル名の後に-X0、-X2000、-X4000をそれぞれつけたいのですが、上記のバッチではうまくいきません。 原因がわかる方いたら教えてください。
107 :
デフォルトの名無しさん :2010/09/20(月) 15:29:41
↑ 具体的には全て-X0になってしまいます。
…。
>>106 > setlocal enableextensions enabledelayedexpansion
> の行はどんな意味があるのでしょうか?
で
>>99 にググれと言われてググってないのがモロわかり。
上手くいかないのはお前が上記文の意味を理解していないから。
それがバッチによく現れてるわ。
110 :
デフォルトの名無しさん :2010/09/20(月) 15:34:19
>>109 調べてもわからなかったので、質問してみたのですが。。。
論外。
112 :
デフォルトの名無しさん :2010/09/20(月) 16:40:07
>>109 さんのヒントを元に以下のバッチで実行できました。
あまりスマートではないかもしれませんが、とりあえずやりたいことはできました。
アドバイスありがとうございました。
setlocal enableextensions enabledelayedexpansion
set c=3
set x=0
for /f %%i in ('dir /b C:\RS3XDW\temp') do (
set /a n=c/3
set /a c+=1
echo %%i -X!x! >> C:\RS3XDW\merge\m!n!.txt
set /a x+=2000
set /a k=c%%3
if "!k!" == "0" (set /a x=0)
)
バッチリ
東北の一部にはこんな風習がある。 結婚した女は夫の父・祖父らとも性交をするのである。 現代にもこの風習は残っていると言われている。 (実態を調査するのは非常に困難であるが。) さて、男が息子・孫の嫁と性交することを「ねぐる」という。 これがネグリジェの語源であることはあまり知られていない。 by 民明書房
バッチファイルで起動したプログラムを さらに好きなように操作するにはどうしたらいいですか? バッチファイルでGIMPを起動したんですが 画像が "C:\Program Files\gimp-painter-\gimp\bin\gimp-2.6.exe" %~n1\test\data\background.png で開けなかったので どうしたらいいんでしょうか?
>>115 UWSCとかのアプリケーション操縦ソフトを使う。かなりややこしくて不確かで不安定だけどね。
エラーを考慮しない記述でこれだけ必要。
ID = EXEC( "C:\Program Files\gimp-painter-\gimp\bin\gimp-2.6.exe" )
ClkItem( ID, "ファイル\開く", CLK_MENU )
DlgID = GetID( "ファイルを開く", "#32770", -1 )
SendSTR( DlgID, "c:\test\data\background.png" )
ClkItem( DlgID, "開く", CLK_BTN )
ていうか、開くファイルのパスは正しいの?
echo %~n1\test\data\background.png でチェックしてみたら?
>>115 %~n1ってことはそのバッチに何かファイルをドロップしたりしてるの?
バッチ単体で動かして動かないっていう間抜けな話のような気がするんだが…
ありがとうございます 一応詳細を書きますと フリーソフトのお絵かきソフトの保存ファイルの拡張子を変えて開いて GIMPで編集したいというものです。 copy %1 %~n1.zip %~n1.zip cd C:\Program Files\gimp-painter-\gimp\bin gimp-2.6.exe "%~dnp1\data\background.png" こんな感じでファイルが開けました。 アドヴァイスありがとうございます うwsc調べてみます。
ACW(GETID("GNU Image Manipulation Program","gdkWindowToplevel"),-8,-8,1456,884,0) BTN(LEFT,CLICK,1149,377,219) KBD(VK_ALT,DOWN,40) KBD(VK_F,CLICK,10) KBD(VK_ALT,UP,40) KBD(VK_E,CLICK,40) KBD(VK_test,CLICK,40) すいませんTest.pngをまとめて入力するにはどうしたらいいですか ・・・もうだめぽorz
>>119 UWSCはスレチなのであっちに書いておきました。
ttp://hibari.2ch.net/test/read.cgi/software/1260304053/803 > さらに好きなように操作するには
とあったのでUWSCをお勧めしたんですが、
ファイルを開くだけなら起動時の引数で渡せば済むし、その方が確実ですよ。
また、もしUWSCでコントロールするならgimpではなく、アクセサリのペイントなど
Windows標準コントロールを使ったソフトの方が操作が簡単で確実になります。
>>116 のようにメニューやボタンの名称を使って、より簡単確実にコントロールができるからです。
gimpは名称ではコントロールできませんでした。
あと、アプリケーションの自動操縦は
一つのことをするごとにいろいろなことを調べないといけないので、
先にどんなことをするのか、それにはどんなことが必要なのかを聞いた方がいいですよ。
手をつける前に。
>>116 はWindows標準アプリを想定したもので
gimpを操縦できるか確かめたわけではなかったんですが、
実際には全然使えないコードでした。
121 :
デフォルトの名無しさん :2010/09/26(日) 02:32:35
すいません。 なんかスキル不足で 文章データから必要な数値だけ 取り込むとか色々無理っぽかったんで… 質問取り消します なんかもうどうしかけを作るとかは考えつくんですけど 今から新しくプログラム覚えるのは無理っぽいです。 昔のCの基本ぐらいしかわかんないです お騒がせして申し訳ありません
122 :
デフォルトの名無しさん :2010/09/26(日) 02:42:20
まさかの展開… もうちょっと頑張ってみます。 アドバイス有り難うございます!
123 :
118 :2010/09/26(日) 11:19:53
>>118 を実行すると
コマンドプロンプトの画面が出っぱなしになって次の
>マークが表示されず次の命令に進みません。
これはどうすればいいですか?
124 :
118 :2010/09/26(日) 11:59:07
なんとなく原因が分かってきましたが これは何を検索すればいいですか cd C:\Windows\System32 notepad.exe "%~dnp1\stack.txt" 適当にメモ帳を起動したらやはりメモ帳を手動で終了させないと 次の命令に進まない事が分かりましたOTL こ、これは・・・?? コマンドプロンプト メモ帳で検索したんですがいいヒントが見つかりませんOTL
終了待ちしたくなかったら start notepad.exe "%~dnp1\stack.txt"
たびたびすいません。 %1に入っている情報をhozon.txtに書き込んで置く方法はないでしょうか? .txtの中身の検索や比較はできるんですけど 書き込むにはどうしたらよいのでしょうか? バッチファイルにD&Dしたファイルの名前と位置情報を得て UWSCに持って行きたいのです。
こんな感じでテキストファイルを自動で作るまでは出来たのですが そこに内容をいれられませんOTL dir>list.txtではテキストファイルに内容を保存できたのですが・・・ どうしたらよいのでしょうか? cd C:\Windows\System32 start notepad.exe "%~dnp1\stack.xml" cd %~dnp1 %~dnp1>list.txt
>>127 ヘルプのリダイレクト演算子を参照のこと
echo %1>>hozon.txt
>>128 %~dnp1という書き方は凄く違和感あるな…というのはさておき、
これはドロップされたファイルの部分を除いた部分という意味だが
そんなディレクトリが最初からあるの?
それに通常システムディレクトリにpathが通ってるから
> cd C:\Windows\System32
これは要らんし
> cd %~dnp1
これも何のためにカレントディレクトリを移動するのかわからん。
そもそも存在してるのかって疑問も前述の通り。
第一%~dpn1に入ってるのはコマンドじゃないから
notepad起動したあとエラー吐いて終わるだけじゃね?
エラーで終わっても一応0バイトのファイルは出来るけど… もしかして > こんな感じでテキストファイルを自動で作るまでは出来たのですが ファイルを自動で作れたってこの0バイトのファイルの事か?
うわあああありがとうございます!! そうですね。別々に作ってきたので ディレクトリ移動とか変ですよね。 紛らわしくてごめんなさい。 そーですねゼロバイトのファイルですね・・・OTL cd>hozon.txtとか無理やりやってました。 うぉぉおおおechoですかありがとうございます!!! HELP>help.txtしてきます!!
OSは何? XPなら C:\WINDOWS\hh.exe ntcmds.chm::/ntcmds.htm これでコマンドラインのヘルプがまとめて見られるぞ。
134 :
132 :2010/09/26(日) 21:35:26
vistaです。
手取り足取りやってもらわないとできない状態なら 本ぐらい買って勉強してから出直せ
すんません。でもおかげさまで重要な部分は出来ました。
137 :
デフォルトの名無しさん :2010/09/27(月) 02:19:48
ちょっと確認ですけど バッチで何かプログラムを開いた後、 起動完了した事を確認する方法って無いですよね。 パソコンによって起動時間は違うし ポーズコマンドでも入れておいて 見た目で起動しおわったか 判断してもらって なんかキーを押してもらって次のコマンドに行く ぐらいだよね?
Win32API使えるならShellExecuteEx&WaitForInputIdleすれば待てる
確実性は落ちるけどtasklistでwindowtitle絞って検索するのもありか
どうもありがとうございます。 色々手立てはあるのですね。
バッチファイルで別のバッチ内のサブルーチンを使うなんて事は出来ないですかね? 同じサブルーチンが複数のバッチにコピペされてて管理が面倒なんですが。 copy main.bat+sub.bat>cat.bat call cat.bat みたいにするしかないでしょうか?
copy "%~0" "backup.bat" type sub.bat>>"%~0" call :hoge del "%~0"&ren "backup.bat" "%~0" 自分自身にくっつけるのってなんだか不安なんですが 一応動く… なんかもっとスマートな方法ってないですかね
callのヘルプ30回くらい嫁
ん? 何回読んでもそんなことが出来るような事は書いていないですが… --- main.bat --- call :hoge -------------- --- sub.bat --- goto :eof :fuga echo fuga goto eof :hoge echo hoge goto :eof ------------- mainを実行したらsubのhogeが実行されるような事をしたいんですがね。 一つのサブルーチン毎に一つのファイルにしろって事かな?
あれ、コマンドプロンプトではPNGの画像サイズを調べる事が出来ない?
147 :
146 :2010/09/28(火) 14:54:16
DIRで見る事が出来るサイズじゃなくて プロパティの詳細で見れる50×70ピクセルとかいう大きさの事ね
さすがにそれは要求がファンタジーすぎる
wwwですよねー。 どうもすいません
そういうのはPowerShellでBitmapクラスでロードするのが手っ取り早いんじゃね
imagemagickとか使えば出来るが
超基本的な質問で申し訳ないんだけど クリップボードの内容をキー操作でコマンドプロンプトにペーストするには どうしたらいいですか? とりあえず画面上では右クリックするとメニューが出て来て張り付けをクリックするか pを押すと出来ますが マウスを使わずに張り付ける方法が分かりません。
>>152 Alt+スペース → 編集(E) → 貼り付け(P)
うぉぉおおおありがとう!!!!
バッチファイルにドロップしたファイルと同じディレクトリに abc.txtをコピーしたいんですが copy abc.txt %~dp1 を実行してみるとコマンドプロンプトでは最後に¥マークが付いて うまくコピーされません どうしたらコピーされますか?
copy abc.txt %~dp1.
ありがとうございます、出来ました!!
cabならcabarcが標準であるけど zipはzip拾ってくるしかない
うーん ZIP.VBSっていうのを使ってみたんだけど うまくいかない。 コマンドが間違ってますか? CScript.exe MakeExZIP.VBS assyuku.zip %~dp0assyuku というふうに入力後zipファイルは出来るんだけど その後の処理がうまくいかないので きちんとzipフィルが出来てないのかな・・・。
VBSならソース見るか作った本人に聞けよ
そうだね、ごめん。
そうだね、ごめん。
165 :
デフォルトの名無しさん :2010/10/10(日) 12:17:47
ウイルス
バッチで宣言した変数がバッチを終了したのに残ったまま環境変数になってしまいます。 ちゃんと最初にsetlocal、exitの直前にendlocalを記述しているのに・・・ でもプログラムの途中で無理やり終わらせるとちゃんと変数が消えるんです なぜでしょうか?どなたか教えてください 遅延展開onにしたらこんな症状になるってわけではないですよね
他のバッチを呼んでる?
endlocalの前にgotoでどっか飛んでるんじゃね?
endlocalなくても抜けたらendlocalされる
ありえん 最小再現ソースを出せ
まあそうなったとして、最後にSETして消したら?
>まあそうなったとして、最後にSETして消したら? setlocalの意味を知らないみたいね?
>>173 「消えないってのが想像付かないけど、残ってるなら上書きで消してしまえばいいじゃん」
ってことを言いたいだけなのでは?
setlocal&(set 〜)ってやると残るんだけどね
間違えた endlocal&(〜
拡張子のないファイルを全削除することってどうやったらできますか?
if "%~xi"=="" del %i とかやっとけば ディレクトリははねてもいいしエラーになるからそのままでもいい
先に >dir /a-d-h-s *. で絞り込むのが安全
>>174 setlocalの意味を知らないみたいね?
set a=aaa
setlocal
set a=bbb
endlocal
echo %a%
>>180 173は消えないというのが想像付かないって言ってるんだから
意味は知ってるだろ。
俺も想像は付かんがね。
意図的に残すなら
set a=aaa
setlocal
set a=bbb
endlocal&set a=%a%
echo %a%
みたいにやると残るんだが、仮にバグなり意図せずこんな書き方になってたりとして
事後策として消せばって言ってるんだろ。
途中でendlocalやってんだろ 先頭で余分にsetlocalしとけばよいよ
183 :
173 :2010/10/16(土) 03:15:54
解決しました。
ある条件でstartコマンドで自身を呼んでサブルーチンを実行させていたのですが、
皆さんの言うとおりそのサブルーチンを終わらせる所にendlocalを記述していませんでした。
startコマンドでサブルーチンを呼んだ時に変数を引き継いでいたのを忘れてました。
どうりでメインルーチンにendlocal記述しても変数が残るわけです。
途中でバッチを強制終了したら変数が残らなかった原因は、バッチを強制終了させた段階はサブルーチンを呼んでいなかった段階だからでした。
一応ソース丸あげしておきます。
念のため最初に全ての変数に空の値入れて消してます。
http://codepad.org/szulekk2
184 :
167 :2010/10/16(土) 03:17:55
すみません、私は173ではなく質問者の167でした。ご迷惑をおかけします。
185 :
167 :2010/10/16(土) 03:24:32
連投申し訳ございません codepadのソースのラベルのnexistの一行前にgoto existを入れるのを忘れていました。起動する場合はご注意ください
startコマンドだって
そんなもん使うからだろあほくさ
callでいいところでstart使う奴って何なの?
189 :
167 :2010/10/16(土) 14:32:52
>>188 コマンドが動いている時にキーを押させてコマンドを終了させる為には
start使ってバッチスクリプトを2つ起動させ、1つにコマンドを制御させるバッチを記述する必要があったのです。
callだと制御が戻ってくるまでコマンドを進めることができないと考えまして・・・
ふーん そりゃ大変だな どうせあほなことやってんだろけど
191 :
167 :2010/10/16(土) 16:32:34
>>190 どんなアホな事やってるかは
183のソース見ればわかりますw
これが俺の限界でしたorz
ではこの辺で名無しに戻ります
わかったよ ほんとにそうなんだ
exitしても環境変数が残るんだ 凄
やっぱendlocalで「消える」と思ってるんだ
そうだね、ごめん。
フォーカスを奪わずにプログラムを実行するよい方法はないでしょうか? cmd /c img_viewer.exe my_image.png cmd /c my_image.png # 関連付け実行? cmd /c start my_image.png # 関連付け実行? のように起動すると、起動したimg_viewer.exeが前面に来て、さらにフォーカスをうばってしまいます
cmd /c start /min my_image.png
>>197 試してみたのですが、最小化して起動されてしまいました
ウインドウは表示はするけど、フォーカスをうばわないということがしたいのですが、
cmd単体では無理そうですかね・・・
.urlをechoで作ってstart
VBSなりAHKなりで直後にAlt+TAB,TABを送るか アクティブウィンドウを記憶しておいてアクティブにするとかか cmdの標準的な機能じゃ無理な気がする
ありがとう
>>199 [InternetShortcut]
URL=c:\image\my_image.png
みたいに書いてstartで実行してみましたが、ビューアーは前面に出てしまいました
関連付けで立ち上がるアプリケーション側に依存するのかもしれませんね
>>200 やはり無理ですかね。
AHKなりなんなり併用してみます。
[InternetShortcut] URL=c:\image\my_image.png ShowCommand=4 か 8
203 :
196 :2010/10/17(日) 05:55:10
結論から書きますと上手くいきました!!
・関連付け実行するビューアー側の多重起動を防止しついでにアクティブにするオプションを無効化
その上で
・
>>202 のように ShowCommand=4 か 8で指定して起動
・もしくは、Cygwinのcygstart.exeで cygstart.exe --showna my_image.png
(--shownaの代わりに--shownoactivateでも可)
感謝感激!!ありがとうございました
■以下、チラシの裏
InternetShortcutのShowCommandはAPIのShellExecuteに対応しているんですね。
ネットで調べても一部しか数値が載っていないので何かと思っていましたが、
ふとcygstartを思い出して、-vオプションをつけて試すとShellExecuteを実行していることが表示できるので、
ようやくShowCommandの数値の意味がわかりました。
ShellExecute 関数
http://msdn.microsoft.com/ja-jp/library/cc422072.aspx その後、関連付けられた画像ビューアーではこれらのオプションが効かずフォーカスを奪うことに気づき、
他のビューアーで試した所、ちゃんと非アクティブになりフォーカスを奪わず問題なしでした。
ここで、ようやく画像ビュアー側の問題もあることに気づきました。
それとこのスレの範疇から外れますが、CygwinのcygstartはShellExecute相当ができてstartよりも便利ですね。
スラッシュ区切りのcygwinのパスも考慮してくれますし
204 :
196 :2010/10/17(日) 08:39:57
Cygwinない場合や.urlを一時ファイルに出力するのが面倒な場合は wshでもできますね WScript.CreateObject("WScript.Shell").Run("my_image.png", 4, true); ただし、既定の標準の関連付けではなく、"open"何故かopenの方で開かれてしまうみたいです あと、batファイルだけなら、 rundll32.exe shell32.dll,ShellExecute でいけるような気もしますが、その後の引数はどういう書式でかけばいいかわからんです。
スレ違い
CreateObject("Shell.Application").ShellExecute()
timeoutコマンドで満了したか、中断したか、区別できますか?
sleep -cはどう使うんですか?
sleepは外部コマンド
>>207 echo %errorlevel%
は常に0だから無理
>>208 commited-memory ratio
ってなんだろね 書き込みデータのあるメモリってことか
外部コマンドって言ったらregやfindstrも含まれると思うが… sleep.exeはMSのツールじゃない罠。 色々な所が色々なsleep.exe出してるからどのsleep.exeかわからん。
>>211 > sleep.exeはMSのツールじゃない罠。
由緒正しいのってなら、リソースキットの sleep.exe じゃね?
213 :
デフォルトの名無しさん :2010/10/18(月) 17:03:02
> wshでもできますね > >WScript.CreateObject("WScript.Shell").Run("my_image.png", 4, true); バッチファイルでもできる mshta.exe vbscript:close(CreateObject("WScript.Shell").Run("my_image.png",4,True)) > ただし、既定の標準の関連付けではなく、"open"何故かopenの方で開かれてしまうみたいです それがrunの仕様 > あと、batファイルだけなら、 > rundll32.exe shell32.dll,ShellExecute でいけるような気もしますが、その後の引数はどういう書式でかけばいいかわからんです。 できない。rundll32.exeできるのは、引数がそのように作られているか、引数がないもの、引数が1つでそれがゴミでも動くものに限る
>>167 別コンソールやtempファイル使わんでもできるだろ
start /b title + tasklist
>>205 ごめんね(´・ω・`)
>>206 キター!!JScriptなら
WScript.CreateObject("Shell.Application").ShellExecute("c:\\images\\mondainai.png", "", "", "", 4);
でいけますね
IShellDispatch2.ShellExecute Method (Windows)
http://msdn.microsoft.com/en-us/library/bb774148.aspx >>213 mshtaでワンライナーできるのかw
mshta.exe "javascript:new ActiveXObject('Shell.Application').ShellExecute('c:\\images\\mondainai.png','','','',4);close()"
いけたわぁぁああああああ
>>216 ごめんなさい。さっぱりです。
何をするためにそのコマンドを使うのでしょうか?
start/? title/? tasklist/?
>>214 ところでどこからtempファイルなんて出てきたの?
誤爆?安価ミス?
start "プロセス監視制御" %ownpass% を start /b "プロセス監視制御" %ownpass% で別コンソール開かない echo finish!>%Temp%\pknd.log if not exist %Temp%\pknd.log echo finish>%Temp%\pknd.log を title プロセス監視制御終了 if exist %Temp%\pknd.log del %Temp%\pknd.log&goto exit を for /f %%I in ('tasklist /nh /fi "windowtitle eq プロセス監視制御終了") do exit
for /f %%I in ('tasklist /nh /fi "windowtitle eq プロセス監視制御終了"') do exit
>>222 >>223 for /f %%I in ('tasklist /nh /fi "windowtitle eq プロセス監視制御終了"') do exit
これだと必ずexitするので
tasklist /nh /fi "windowtitle eq プロセス監視制御終了"|findstr プロセス監視制御終了&if not %errorlevel%==0 goto exit
こう書き換えました。恐らくxp等では正常に動作すると思うのですが、当方windows7で管理者で起動しているので
タイトルに 管理者: という文字が文頭についてしまい動作しませんのでtempを引き続き使用することにします。
for /f %%I in ('tasklist /nh /fi "windowtitle eq 管理者: プロセス監視制御終了"') do if %%I=cmd.exe exit 少しぐらい応用しろよな
226 :
デフォルトの名無しさん :2010/10/22(金) 22:08:58
screnameというソフトでファイル名を変更したあと そのファイルをフォルダ移動させたいのですが 何度か書き換えたりしてためしてるのですが うまくいかなくて、すいません。教えてください。 @echo off setlocal rem SCRename.vbs をインストールしたパスを設定 set SCRPATH=C:\TvRock\SCRename for /F "usebackq delims=" %%I in (`cscript //nologo "%SCRPATH%\SCRename.vbs" "%~1" "$SCtitle$ 第$SCnumber$話 「$SCsubtitle$」" 13`) do set SCRTARGET=%%~I move "%SCRTARGET%" "D:\REC FILE\hogehoge" endlocal
>>225 それだとxpなどで使えなくなり困るのです。
2000、XPProでも使いたいので
2行並べて書けばいいだけだろ? 応用の効かない奴だな まったく
>>228 そうでした
応用のきく奴になりたいです。
ありがとうございました
start /b cmd /c " ... & ... " にすれば再帰呼び出しもいらんよ
231 :
デフォルトの名無しさん :2010/10/25(月) 21:12:13
初心者すぎる質問で申し訳ありませんが、 ping -n 10 202.229.12.1 これを実行させるバッチファイルを作りたいです。 上記のスクリプトのみで保存したバッチファイルだと正常動作しません。 どうしたらよいのでしょうか?
232 :
デフォルトの名無しさん :2010/10/25(月) 21:33:24
ping -n 10 202.229.12.1 pause ↑でやったらできたよ。 結果は↓ Pinging 202.229.12.1 with 32 bytes of data: Reply from 202.229.12.1: bytes=32 time=10ms TTL=245 Reply from 202.229.12.1: bytes=32 time=9ms TTL=245 Reply from 202.229.12.1: bytes=32 time=10ms TTL=245 Reply from 202.229.12.1: bytes=32 time=11ms TTL=245 Reply from 202.229.12.1: bytes=32 time=9ms TTL=245 Reply from 202.229.12.1: bytes=32 time=11ms TTL=245 Reply from 202.229.12.1: bytes=32 time=9ms TTL=245 Reply from 202.229.12.1: bytes=32 time=10ms TTL=245 Reply from 202.229.12.1: bytes=32 time=10ms TTL=245 Reply from 202.229.12.1: bytes=32 time=10ms TTL=245 Ping statistics for 202.229.12.1: Packets: Sent = 10, Received = 10, Lost = 0 (0% l Approximate round trip times in milli-seconds: Minimum = 9ms, Maximum = 11ms, Average = 9ms
233 :
232 :2010/10/25(月) 21:34:09
ちなみに、ファイル名に.batって拡張子つけてますか?
>>231 ファイルの名前をping〜って付けてない?
バッチファイルの名前に外部コマンドと同じ名前を付けたら誤動作するっぽいよ
hogehoge.bat
start /b
ping -n 10 アドレス
みたいにやってみては
infos>skills
REM Windows Picture and Fax Viewer (WindowsXP) C:\WINDOWS\system32\rundll32.exe C:\WINDOWS\system32\shimgvw.dll,ImageView_Fullscreen %~f1 REM Windows Media Player (Version 7.0以降) "C:\Program Files\Windows Media Player\wmplayer.exe" REM Windows Media Player (Version 6.4) "C:\Program Files\Windows Media Player\mplayer2.exe" REM ワードパッド (WindowsNT4.0〜XP) "C:\Program Files\Windows NT\Accessories\wordpad.exe"
>>234 ビンゴでしたw
ファイル名を"ping.bat"にしていたのが原因だったようです。
勉強になりました。ありがとうございました。
わろぬ
バッチファイル上やコマンドプロンプトで、Unicodeのアラビア語やタイ語を表示できないでしょうか? 試しにcygwinとutf-8表示できるターミナルソフトckを使ってみたところ表示はできましたが、 ターミナルソフトを使わずCygwin以外でもあつかいたのです。 (ckではなくminttyは表示できない文字がアラビア文字ありました) HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont で、932.1に試しに*MeiryoKe_Consoleを設定し再起動してからフォントを変えてみましたが、 ”・・・・”というような表示になってしまいます。 PowerShellでも同様でした。(PowerShell ISEのようなソフト上では表示できました) notepadではそもそもMS ゴシックでもそれらの文字が表示できることから、何かソフト側で工夫しているのかもしれません。 コマンドプロンプトの話題になるので、適切なスレあれば誘導お願いしたいです。
chcp 65001 で文字コードを UTF-8 に変更してみたら? 色々と難のある方法らしいから、一度 chcp utf-8 辺りでググレ
FontLinkはした? unicode対応をうたってるエディタでも化けたりするけど なんでか知らないけどnotepadって混在文字を表示するのは優秀なので notepadで表示できてもあんまり意味ないw
>>241 おまえ chcp 65001 使ったこと無いくせに
chcpは要らんが、タイ語の文字セットのフォントが要るだろ
>>240 他の対話形式のコマンド使わないなら、PSISE(と、必要ならchcp 65001)のコマンドラインが現状最善だと思うよ
chcp が使えるのは XP までだろ Vista と 7 の cmd は糞
つかえるけど?
つかえることはつかえるねつかいものにならないけど
cmd は変わらんだろ
250 :
デフォルトの名無しさん :2010/10/29(金) 00:14:04
ありがとうございます!
環境かき忘れていました。Vista SP2とXP SP3です。
タイ語やアラビア語のフォントとFontLinkすればということでしょうか?
試してみます。
しかし、CygwinのUTF8対応と謳っているターミナルでもソフトによっては同じフォントでも表示できたりできなかったりするみたいですね。
>>241 chcp 65001は
>>240 のときや以前にも何回か試したのですが書き忘れていました。
ネットを検索するとchcp 65001の記述をよく見かけるのですが、
何故か残念ながらcmdでまともに使えた試しがなく・・・
UTF-8の文字のファイルは表示できましたが、
>>240 の問題の”・・・・”という文字表示ができない問題は代わりませんでした。
また何故かbatファイルが実行できない、IMでの入力ができない問題がありました。
後出しで申し訳なく
>>242 手持ちのエディタでも化けてました。
notepadすごいんですね
>>245 ISEはPowerShellも強力ですし便利ですよね。
出力テキストの折り返しがなかったり、ファンクションキーで入力履歴がたどれないなど問題があるので、
使い分けが要るかなと。
フォントがMS ゴシックなのにISEもnotepad並に何でも表示できて凄いですね。
むしろ"MeiryoKe_Console"にしたらアルファベット文字がかけたりしました。
for文の中では、cd /dやpushdは使えないことに今頃気が付いた for文入れ子の時とかどうしてる? @echo off cd /d "%~dp0" echo "%cd%" cd /d "%~1" echo "%cd%" pushd "%~1" echo "%cd%" echo ----- cd /d "%~dp0" echo "%cd%" for %%A in (%*) do ( cd /d "%%~A" echo "%cd%" pushd "%%~A" echo "%cd%" echo ----- ) pause exit
使えないのではなく、バカには使えていることがわからない、だろ 遅延展開を調べろ
forループの中の変数はfor実行時に代入 pushd c:\hoge for %%i in (fuga,hage) do ( pushd c:\%%i echo "%cd%") は pushd c:\hoge for %%i in (fuga,hage) do (pushd c:\%%i echo "c:\hoge") と全く同じ こういうのはechoをオンにしてるとすぐわかる。 おかしいと思うのにecho offにしてる奴は馬鹿としか言いようがない。
あんまりだわ
よしよし
そういうのは代入とは言わない 展開というんだよ
遅延理解しました
dir /a:d /b /s で出てくるディレクトリの一覧を一つづつ引数にして他の処理に渡したいんですけど そういう事ってできますか?
for
つづつ
>>254 ,255
レスありがとう
そこ盲点でした
ちゃんとした回答をくれる優しさに感謝してます
引数の判定処理書いたので張っときます batの最初のほうに色々な判定処理を置くと便利なようです ---------------------------------------------- rem 引数のディレクトリが存在しない場合はexit setlocal enabledelayedexpansion for %%A in (%*) do ( cd /d "%%~A" if !ERRORLEVEL!==1 ( echo "%%~A" ディレクトリが存在しません echo バッチを終了します echo. pause exit ) ) endlocal
そういう時は遅延展開必要ない if not errorlevel 0 で変数展開無く判定できる。 ちなみにディレクトリの有無は if not exist "%%~1\nul" とかやればわかる。
ちと間違えた
if not errorlevel 0 はerrorlevel 0 の時の判定
>>264 の場合は if errorlevel 1 だわな。
if ERRORLEVEL==1 ( でいいよ
cd /d "%%~A" || ( だろ
そもそもディレクトリ変更する必要はあるんかいな? ディレクトリ変更が必要ならいいが、単にディレクトリの有無を調べるだけで 元のディレクトリに戻すとかいうんなら無駄もいいとこだが。
270 :
261 :2010/11/02(火) 16:05:54
俺はちゃんとした回答にカウントされないのか…… と思ったがよく見ると使われてないや スルーされた事には違いないけど
>>270 260-261はそこで終わってるだろ。
質問者がレス返してないだけで。
272 :
261 :2010/11/02(火) 16:41:10
え、この流れで別人??? 半年ROMっとく
半年と言わずずっとでもいいよ forじゃわからんだろせめてfor /fと言ってやれよ
powershell_iseみたいなcmd_iseはないのか
バッチにドラッグアンドドロップしたファイルがダブルクオーテーションに 囲まれるかどうかは、ファイル名に半角スペースが入っていれば全て囲まれると 考えていたんですが、違うんでしょうか? 問題となっているファイルはD&Dで問題が出ないようにあらかじめファイル名に 半角スペースを入れる対策をしてあるものなんですが、なぜかどうやってもD&D時に ""で囲まれないという状態になっています。 不思議なのが同じファイル名で別の場所に作った別ファイルは問題なく""で囲まれるのに 該当ファイルはどんなファイル名にリネームしようが、別名のハードリンクを作ろうが、 複数選択でドロップしようが、ずっと""で囲まれないという事態になっています。 該当ファイル実体を別名でコピーしたり、別HDDにコピーしたりした場合はOKでした。 何かファイルシステム上の問題でもあるんでしょうか? 同様の経験をした方はおられないでしょうか? 当環境はWin7x64 ファイルシステムはNTFSです。
同様の経験をしました
VBSのドロップするとどうなんだ?
半角空白じゃねーんじゃねーの
>>275 半角空白が含まれていればダブルクォーテーションがつくけど、そうじゃない場合はつかない。
問題が起こるのは、半角空白がなくて全角空白がある場合。
一旦引数を一つの変数にまとめて切り出すといいらしい。具体的にどうなってるのか理解してないんだけど。
>>17 それより、abc01.flv を漢字01.flvにリネームするのが、ワイルドカードだとうまくいかないので、
for /L で自分で数値を与えてやるとうまく出来た。
"01"とかの"0"は文字で与えてやればいいだろう。
今までバッチファイル編集とかやってたよ。
>for /l %I in (1,1,9) do ren G_SEED_0%I.flv 種物語0%I.flv
ren abc* 漢字0*
>>277 VBSでもダメです。
>>278-279 問題のファイルはPT2の出力TSファイルで、ファイル名に
番組名が入るのですが、これが不定で全角空白を含むことも
あるので [番組名] [日付-時間].ts といったようなフォーマットにして
一律半角空白を含めるようにしています。
これが今年の5月から7月中の一つの番組だけに問題の現象発生。
同時期の別の番組や同じ番組の7月以降だと問題なし。
同じファイルやハードリンクならば「aaa aaa.txt」 みたいにリネームして
:loop
echo %1
shift
if not "%~1"=="" goto :loop
といった引数だけ表示するバッチに落とした状態でも""では囲まれてはいない状況です。
%*を使うのはNG。元々複数選択してドロップするものなので他のファイルとの区切りが
なくなってしまいます。
>>281 ああ、それは、半角スペースが前後の文字とくっついちゃったんだろうね。
文字コードによってはそういうこともある。
「日付-時間」じゃなくて「日付 時間」と言う風にしていればそういうことにはならなかっただろう。
> 元々複数選択してドロップするものなので
それをforループで分割処理するんだけど。
>>282 それが、問題のファイルは
aaa aaa.txt
のような単純なファイル名にしてもNGだから困っているのです。
当然、問題のファイル実体以外でこんなファイル名なら""で囲まれます。
> それをforループで分割処理するんだけど。
a b.txt
c d.txt (問題のあるファイル)
e f.txt (問題のあるファイル)
g h.txt
これを複数選択してドロップすると
%* は
"a b.txt" c d.txt e f.txt "g h.txt"
となるんですが。どう分割するんですか?
該当ファイルのファイル名とやらを晒してもらおうか
attrib 変なファイル icacls 変なファイル などで他のファイルを見比べて違いはないのか?
>>285 凄い。どうも当たりのようです。
問題の無いファイルは
hoge.ts BUILTIN\Administrators:(F)
NT AUTHORITY\SYSTEM:(F)
BUILTIN\Administrators:(F)
BUILTIN\Users:(RX)
という結果だったのですが
問題のあるファイルは軒並み
fuga.ts BUILTIN\Administrators:(F)
NT AUTHORITY\SYSTEM:(F)
(F)
BUILTIN\Users:(RX)
という結果になっていました。
これが何を意味するのかはよくわからないんですが…
そこは『 icacls アクセス権 』あたりでググろうよw
今気付きましたが
問題のファイルを作った時のOSはXPだったかもしれないです。
セキュリティタブを見たら不明なアカウントがユーザー名の中に…
そういえば7月前後にOS入れ替えたはず…
>>287 勿論調べてますけど、というか簡単な知識はありますけど
ACL関係深入りするとわけわかめなんでorz
下手にいじると後が怖い。
今アクセス許可の部分、他のファイルと見比べてますが
XPの時のアカウントらしきSIDがある以外は特に何も無く、そのユーザーが所有者になっていました。
XPのユーザーを削除して所有権を取得しても、問題は直っていない…と。
コピーして削除
>>288 特にacl を指定していなかったなら
takeown /f <file>
して
icacls <file> /reset
でいいとおもう
OS 入れなおす度 ドライブ全体にやってるorz
mandatory levelは/resetで取れんのかね
>>240 の問題だけど、同じような状況でConsole2というソフトで表示いけたよ
FontLinkはやってないはず
Console | Download Console software for free at SourceForge.net
http://sourceforge.net/projects/console/ もしできないならヘルプの"Language settings"に書いてある方法でいける。
ただし、肝心の日本語入力はできないw
IM起動すると操作できなくなる
表示やコピペや日本語の補完は問題ないのでIMが考慮されていないだけだとは思う
念のためPowerShellも試したけど同様だったよ
294 :
デフォルトの名無しさん :2010/11/09(火) 23:11:00
for /f "usebackq" %i in (`コマンド`) の逆引用符内でスペースを含むパスを使用する方法を教えて下さい。 変数化したりいろいろ試しているのですがうまくいきません。
for /f "usebackq" %i in (`"コ マ ン ド "`) for /f "usebackq" %i in (`コ^ マ^ ン^ ド`)
for /f "usebackq" %i in (`コ^^ マ^^ ン^^ ド`)
>>296 >'C:\Program' は、内部コマンドまたは外部コマンド、
>操作可能なプログラムまたはバッチ ファイルとして認識されていません。
どっちをやってもダメです
for /f "usebackq" %i in (`""コ マ ン ド ""`)
for /f "usebackq" %i in (`コ^^^ マ^^^ ン^^^ ド`)
>>298 それもダメでした。
後出しになりますが標準エラー出力をパイプしてるので→2^>^&1 1^>nul ^|
その辺の問題かfindコマンドの二重引用符の問題かも知れません。
後出しですがこのコマンドです。 for /f "usebackq tokens=2-4 delims=:. " %i in (`C:\Program^^ Files\MediaCoder\codecs\ffmpeg.exe -i hoge.avi 2^>^&1 1^>nul ^| find ^"Duration:^"`) do @echo %i:%j:%k
後出しすんな for /f "usebackq tokens=2-4 delims=:. " %i in (`""C:\Program Files\MediaCoder\codecs\ffmpeg.exe" -i hoge.avi 2>&1 1>nul | find "Duration:""`) do @echo %i:%j:%k
できました!ありがとうございます!
解説してやるとin()は、cmd /c ''の中身 で実行される そのとき最外側の""は cmd/? 2. 最初の文字が引用符であるにも関わらず上の条件に一致しない場合は、最初 の引用符とコマンド ラインの最後の引用符が削除され、最後の引用符の後 のテキストが有効になります。
/C または /K が指定されている場合、スイッチの後の残りのコマンド ラインがコマ ンド ラインとして処理されます。次のルールが引用符 (") の処理に使われます: 1. 次のすべての条件に一致する場合、コマンド ラインの引用符が有効になり ます: - /S スイッチがない - 引用符が 1 組ある - 引用符の中に特殊文字がない (特殊文字は &<>()@^| です) - 引用符の中に 1 つ以上のスペースがある - 引用符の中の文字列が、実行可能ファイルの名前である 2. 最初の文字が引用符であるにも関わらず上の条件に一致しない場合は、最初 の引用符とコマンド ラインの最後の引用符が削除され、最後の引用符のあ とのテキストが有効になります。 これっすね。 読んでみます。
>>302 コマンドプロンプトに貼り付ければ動くのですが、まっさらなバッチにこの一行だけ記入しても、
>\Program の使い方が誤っています。
と出ます。
何故なんでしょうか?
307 :
デフォルトの名無しさん :2010/11/10(水) 00:13:58
すいませんageます。
%%i
>>306 ちなみにhoge.aviのあるディレクトリで実行してます。
311 :
デフォルトの名無しさん :2010/11/10(水) 01:27:09
batの勉強中の者です。 繰り返し処理の件で聞きたいことがあります。 いまいち、for文の書き方がわかってないので、 お手数ですが、教えてください。 【やりたいこと】 (1)任意に数をインプットする。 (2)ディレクトリにあるtxtファイルを(1)で入力した数から連番になるようにリネームしたい。 →例えばディレクトリにtxtファイルがa.txt、b.txt、c.txtが3個あったとし、 (1)で入力したのが3ならば、a.txt=3.txt、b.txt=4.txt、c.txt=5.txtとなるようにしたい。 【困っていること】 (1)の任意の数を入力する処理は完了。 (2)のfor文を使って、ディレクトリにあるtxtの文だけリネームする構文が書けない。 →ワイルドカードのところが、変数Rでリネームされ、txtの数だけ、R+1ずつされて繰り返していきたいのだが… @echo off rem 変数の入力 rem 変数Rは繰り返し用の変数として用意 set /p UserInput=Enter a number: set /a R=UserInput rem ファイルをリネーム for %%R in (*) do *.txt R.txt goto :eof
for /f %%S in ('dir /b *.txt') do ( call ren %%S %%R%%.txt set / R+=1 )
313 :
デフォルトの名無しさん :2010/11/10(水) 02:38:43
>>312 >>311 でrenが抜けてました、すいません。
試しに、上記構文をfor文以下をコピペし動かしてみたんですが、
ファイルが一個しかリネームされません…
あと質問がいくつかあります。
教えてちゃんですいませんが、
回答してもらえたら幸いです。
@Sという変数が出てきていますが、これはforで繰り返す為の
「カウンタ」として機能させるための変数という認識でいいでしょうか?
違うとしたらSの変数って一体なんですか?
Ainの('dir /b *.txt')ですが、dirコマンドでディレクトリの中身一覧を
作成する必要はあるんでしょうか?
また、/bのオプションの意味がぐぐってみたんですが、よくわかりません。
(※検索ワードは"bat /b 意味")
Bcallがありますが、呼び出す為の構文がどれなのかよくわかりません。
"ren %%S %%R%%.txt"を呼び出している?
callは外部にあるbatやsub:を読みだすイメージがあるんですが…
>@ そうだよ だから繰り返しの変数とかわざわざ宣言する必要もないから set /p R=Enter a number: でいい >A 'dir /b *.txt' これでそのフォルダ内に別の拡張子のファイルが混ざってても対応できる フォルダ内が全てテキストファイルなら(*)でも問題ないはず /bはファイル名だけ取得する。これでフォルダ内のテキストファイルを全て取得できる >B callはあるコマンドを使って制御が戻らなくなるのを阻止する為に使う けど初心者で実際にコマンド走らせてない俺は312がどんな意図を持ってcallを使ったかわからん。 renって制御戻ってこないっけ? 誰か上級者の人答えておくれ
0 set /a R+=1 aが抜けてた 1 Sはfor変数 2 リカージョン防止 ren後のファイル名がin (*)の中に入らぬように先にdirですべて取り出す 3 %R% の遅延展開 CALL %%R%%
c:\bat にパスが通った状態で、呼び出し頻度のちょっと低いスクリプトを c:\bat\xxx に置いて xxx\yyy.bat みたいに呼び出したいんだけどそう言うのは無理なのかな。 指定されたパスが見つかりません。になってしまう。
ファイル名にパスが含まれていなかった場合、Windows は次の順序で実行可能ファイルを検索します。 1.アプリケーションのロードに使ったディレクトリ(アプリケーションの実行可能ファイルと同じディレクトリ) 2.親プロセスのカレントディレクトリ 3.Windows 95/98:Windows のシステムディレクトリ。このディレクトリのパスは、 関数で取得できます。 Windows NT/2000:32 ビットの Windows システムディレクトリ。このディレクトリのパスは、GetSystemDirectory 関数で取得できます。このディレクトリの既定の名前は、SYSTEM32 です。 4.Windows NT/2000:16 ビットの Windows システムディレクトリ。このディレクトリのパスを取得する Win32 関数はありませんが、SearchPath 関数の検索対象になります。このディレクトリの既定の名前は、SYSTEM です。 5.Windows ディレクトリ。このディレクトリのパスは、 関数で取得できます。 6.環境変数 PATH に記述されている各ディレクトリ 7.Windows 95/98:32 ビットの Windows システムディレクトリ。このディレクトリのパスは、GetSystemDirectory 関数で取得できます。このディレクトリの既定の名前は、SYSTEM32 です。
で?
何?
so what?
The string can specify the full path and file name of the module to execute or it can specify a partial name. In the case of a partial name, the function uses the current drive and current directory to complete the specification. The function will not use the search path.
322 :
デフォルトの名無しさん :2010/11/12(金) 17:40:24
I see, thanks a lot.
집이 어디예요?
あたまの悪そうなあなたへ c:\bat\xxx.cmd @echo off c:\bat\xxx\%* を作れば xxx\yyy.bat じゃなく xxx yyy.bat で実行できるよ
xxx yyy.bat とかじゃなく xxx\yyy.bat ではできないんですか?
>>324 質問者の意図を全然読み取れない良くない頭を持っていることはよくわかった
これまたずいぶんと頭の悪そうな文章だな
xxx¥yyy.bat ならできるな
xxx¥yyy.bat とかじゃなく xxx\yyy.bat ではできないんですか?
append.exe
run xxx\yyy.bat はできる。 run yyy.bat もできる。 xxx yyy.bat もできる。
>>331 質問者の意図を全然読み取れない良くない頭を持っていることはよくわかった
質問者の意図は、できることはやりたくない。できないことをやりたい。だろ?
c:\bat\xxxなんか作らずc:\batに入れとけボケ
xxx\yyy.bat ならできるぞ
現ディレクトリ配下にあればな
あれ? 64bit の append.exe が無い。
>>335 " .cmd"のつもりだろうができないよ
■バッチ文 1 @echo off 2 SET TERM1=PC1 3 SET TERM2=PC2 4 SET TERM3=PC3 5 for %%A in (^ 6 %TERM1% ^ 7 %TERM2% ^ 8 %TERM3%)^ 9 do ^ 10 echo %%A データ転送 ■実行結果 PC1 データ転送 PC2 データ転送 PC3 データ転送 よろしくお願いします。 上記のバッチ文をfor文を見やすくするために8行目を 8-1 %TERM3%^ 8-2 )^ に分離して実行したいですが、分離するとうまく実行されません。 キャレットは途中改行でのエスケープだと認識してますが 何か文字を付け足したりしないといけなかったりするのでしょうか。
>>339 > 8-1 %TERM3%^
> 8-2 )^
8-2 [space or tab])^
なら行く。理由は知らん。
5 for %%A in ( 6 %TERM1% 7 %TERM2% 8 %TERM3% ) ^ でいいんじゃないか?ためしてないけど ()内で^は不要 )^ do だと)doで) doにならん
>>341 > だと)doで) doにならん
そっちは元々くっついてても問題ない
>>340 ありがとうございます。
>>339 の)の前にスペース置いて以下のように変更して対応しようと思います。
■変更後
5-- for %%A in (^
6-- %TERM1%△^
7-- %TERM2%△^
8-1 %TERM3%△^
8-2 △)^
9-- do ^
10- echo %%A データ転送
※()内の△は半角スペース
原因ははっきりとはわからないのですが、
前の行末の^ が次の行始の) にエスケープでもかけているのですかね
yes
超初心者スレから誘導されてきました…お手柔らかにお願いします バッチファイルを作っているのですが あるディレクトリ内(サブディレクトリ含む)の再生時間○秒以下の動画ファイルを削除する といったものを作るには、どう書いたらいいでしょうか? というか動画ファイルなどの再生時間を取得することってできるんでしょうか? ○バイト以下、とかだったら出来ると思うんですが… よろしくお願いします
できません
>>345 バッチ単独では無理。
mediainfoとか使えば取れる
>>346 -+347
ありがとうございます!
先は長い…
俺は無視か…
もし
>>350 が>348だったらそっとハンカチを差し出してあげたい
mediainfo --Inform='General;%Duration%' とかすれば
ミリ秒単位で取れるみたいだね
引数にURLを受け取りたいのですが、「=」などの記号もそのまま受け取るにはどうすればいいでしょうか?
%2E
" = "
chr(61)
"%~1"
みなさんありがとう
%1にc:\test.lnkが入っているとして そのリンク先を展開するのってどうやればいいですか。
batだけではムリ wshならできる
wshのtargetpath取得するしかないな
for /f "usebackq delims=" %%i in(%1) do echo %%i
for /f "delims=" %%i in('more %1') do echo %%i
for /f "delims=" %%i in('find "\" %1') do echo %%i
あほは放置で
for /f "eol=\ delims=" %%i in('find "\" %1') do echo %%i
for /f "skip=1 eol=\ delims=" %%i in ('find "\" "%~1"') do echo %%i
動かんスクリプト書いて恥を晒すのって楽しいのかな
for /f "delims=" %%i in ('shortcut.exe -u d "%~1"') do echo %%i
.bat を右クリ編集した時のエディタって変更できないの? メモ帳トラッパーみたいなのじゃなくて。
HKEY_CLASSES_ROOT\batfile\shell\edit\command
おーサンクス。 Explorerからできないというだけで設定自体は普通にあるのか。
関連付けで最小化やカレントディレクトリが指定できないのか。
WindowStyle CurrentDirectory
echo %date%>>a.txt とした時に書き込まれた時に改行をしない もしくは、前の行の改行を削除してから書き込むことは出来ないでしょうか? イメージとして 12/01 12/02 12/03 のように横一列に吐いてくようなかんじに
単純な方法では無理。 やろうと思えば出来なくもないが・・・ 最後の行以外を別ファイルに書き込んで 最後の行に目的文を追加してから書き込んだ後リネームとかw
echo -n
echo.exe を作ればいいんでね?
おお凄い。
なんと複雑な
ロケールの日付形式によっては必要だけど 空白入れるなら要らない set /p x=%date% <nul >>a.txt
set /p x=2010 Dec 1<nul
おー、すげー nulってやると改行されないってこと?
nulはnl(new line)の否定
>>386 いや形式に寄らず要らんと思うけど。
dateどころかプロンプトに表示する文字列が何であっても要らないんじゃない?
その空白はファイルに出るだけじゃん。
文字列の最後が空白になるだけの話で、コマンドそのものは空白不要。
あれ、拡張子だけ変更するのってどうするんだっけ? test.txt %1に
ren test.txt test.boke
サンキュー、できました。
ren test.txt test.%1
%*で渡された文字列を全部""で囲いたいのですが、 "%*"とすると、引数が"fuga hoge"のようにすでにダブルクオーテーションで囲まれている場合に、 ""fuga hoge""と二重になりアプリによってはエラーを起こしてしまいます。 上手く引数をまとめて渡す方法はないものでしょうか? 例えばこんな感じで書いた場合です。 (%*) && growlnotify.com "%*"
"%~*"
(%*) && growlnotify.com "%~1" "%~2" "%~3" "%~4" "%~5" "%~6" "%~7" "%~8" "%~9"
ありがとうございます!
>>399 %~*だと
> バッチ パラメータの置き換えで、パス演算子の次の使用法は無効です:
といわれました(´・ω・`)
CALL /?したら
> 上の例の %1 と PATH は、他の有効な値で置き換えることができ
> ます。%~ 構文は有効な引数の数によって区切られます。%~ 修飾子
> は %* と同時には使用できません。
・・・(´・ω・`)
>>400 上手く行かず調べていたのですが、ソフト側が複数の引数を受け付けないみたいでした。
"%~1 %~2 %~3 %~4 %~5 %~6 %~7 %~8 %~9" みたいにもしたのですが、そうすると余白が余分についてしまいます。
あとは、上記のものをsedでもかけて空白取り除くとか、
>>398 の手もあるのですが、そこまでやるならbatファイルでないほうが楽なので、他のスクリプトを試してみます。
set x=%* growlnotify.com "%x:"=%"
set all=%* if defined all if not ^%all:~0,1%==^" set all="%all% if defined all if not ^%all:~-1,1%==^" set all=%all%"
set x= :for shift /0 set y=%0 if defined y goto :next set x=%x% "%~0" goto :for :next echo %x%
405 :
デフォルトの名無しさん :2010/12/09(木) 00:30:42
複数のテキストファイルがあって、それぞれのテキストファイルの最終行のみ、 別途、1ファイルにコピーするのってどうすればいいでしょうか?
406 :
405 :2010/12/09(木) 00:32:46
別途1ファイルというのは、1ファイルにつき、1ファイルということです 1.txt 2.txt 3.txt ↑があったとして、最終行のみを ↓のようなファイルで保存したいです 1.txt.after 2.txt.after 3.txt.after
標準コマンドのみって縛りがないならtailコマンドを どっかから拾ってくるのが手っ取り早いんじゃないかな
@echo off SETLOCAL ENABLEDELAYEDEXPANSION for %%I in (*.txt) do for /F %%J in ('type "%%~I"^|find /c /v ""') do ( set /a a=%%J-1 more "%%~I" +!a!>"%%~I".after )
for %%I in (*.txt) do for "usebackq delims=" /F %%J in ("%%~I") do echo,%%J>"%%~I.after"
一々ファイルアクセスしてると凄く遅くなりそうなイメージあるけど 実際どうなんだろ。
ちゃんとしたプログラムが必要な時はバッチなんか使わないからどうでもいい。
for %%I in (*.txt) do ( set x= for "usebackq delims=" /F %%J in ("%%~I") do set x=%%J call echo,%%x%%>"%%~I.after" )
追
x264は
[email protected] High4.0 Veryslow crf18 SAR4:3 --qcomp 0.7 --ref 3
できれば、音声をNeroAACで品質固定(最高)設定でエンコして、mp4boxで自動MUX
できるといい。
誘導した奴じゃないが… aviから音声をneroaacencってどうやるんだっけ? avi2wavとかそんなツールあったっけ? 最近TSからMP4作るのしかやってないからわかんねえ。 バッチでやるって言っても、結局一々手作業で入力してたコマンド群を ファイルリスト使ってループで回すってだけだから 手動実行してるコマンドがどんなものかってのが無ければわからんぜ。 動画エンコに詳しい、かつバッチにも詳しいって奴ばかりじゃねーから。
>>414 とりあえず現状、手動でどうやってるか晒しておくれ。
957 :名無しさん@編集中:2010/12/09(木) 13:43:33 ID:zTGKAWby(2) 携帯動画変換君でAVI→1440x1080p@29.97f(High/4.0/crf18 --qcomp 0.7 --ref 3) のエンコってできそうですか?
aviって何でも入るから 逆に言えば何が入ってるか分からないよな ツールなら判別できるけど バッチにどうやってその情報を渡すのか…
>>417 現状、コマンドをタイプしてエンコードしていないってこと?
それはちょっとアドバイスできないなぁ・・・
むしろ各種コマンドの使い方が分かっていれば、
>>413 のバッチに書き加えていくことで連続エンコードできるはずだよ。
ところで携帯動画変換君って、ffmpeg一本じゃなかったかな?
独立のx264は使っていなかった気がするんだけど。
>>416 手動(コマンドプロンプト)はNeroAACしか使ったことないんです。
以前はTXP4で可逆のHuffyuv2.1.1+無圧縮音声のAVIで出して
MediaCoder0.7.3.4616でx264+NeroAACエンコできてました。
ただ、そのVerは何故かVerySlowだと失敗する。
最近のMediaCoderは何故かフレーム数が減る。
現状はTXP4+x264vfw&TXP内蔵MainConceptAAC512k→mp4boxでMUX。
HandbrakeはFAACの160kまでなのでNG(x264はコマンド追加できるっぽい)
XMediaRecodeはHuffyuvだとハングするし音声はFAACの品質500は設定できる
けどNeroの品質固定最高で実質320k以上で出したい。
1つ設定しといて、D&Dで放り込んで、ボタン押すだけみたいな使い方のできる
ソフトが完成形になってればいいんだけど。
aviの中身判別させてx264に渡して且つx264自体はHUFFYUVはデコードできない?
bat無理っぽいなぁ。
手動と同じことを自動可するだけだから、手動で無理なことはバッチにも無理
>>420 aviの中身を判別って、どこまでやりたいか知らないけど、
とりあえずHuffyuv自体は、デコードにAvisynthを噛ませばできそうかな。
バッチファイルでAvisynthスクリプトを出力して、それをx264で読ませればいいと思う。
音声は、avs2wavまたはffmpeg→neroAacEncで。
(avs2wavは日本語ファイル名だとか、ちょっとしたことで落ちるからffmpegがいいかも)
@echo off
for %%i in (*.avi) do call :encode "%%i"
pause
exit /b
:encode
set MP4=%~dpn1.mp4
set AVS=%~dpn1.avs
set WAV=%~dpn1.wav
set AAC=%~dpn1.aac
echo AVISource(%1)>"%AVS%"
echo ConvertToYV12()>>"%AVS%"
x264 --thread-input --progress --crf 18 -o "%MP4%" "%AVS%"
ffmpeg -y -i "%AVS%" -vn "%WAV%"
neroAacEnc -if "%WAV%" -of "%AAC%"
mp4box "%MP4%" -add "%AAC%"
exit /b
エンコパラメータは最低限なので、自分で考えてね。
ちなみに120fpsのことは考えてないので、あしからず。
いや、携帯動画変換君のスレにも質問してるただのマルチだから
>>422 多分そのバッチ使うと音ズレると思うんだわ。
こういうのはコマンド上で書くのは簡単なんだけどな。
自分で試行錯誤できないマルチ君にバッチ例まで書いてやることは無いよ。
大抵無駄になるし、レスしても多分見てないぜ。
425 :
422 :2010/12/10(金) 14:15:05
了解。
tsMuxeRのGUIとかBonTsDemuxとかって どうやって音ズレの秒数拾ってんのかなあ MediaInfoのディレイとも微妙に違ってるし それが分かれば 自分用の自動化バッチが組めるんだが…
427 :
デフォルトの名無しさん :2010/12/12(日) 22:49:06
初心者に分かりやすいサイトありませんか
自演乙
>>429 428だけど、ちげーよwww
こういう時はぐぐれとだけ言えばいいのか?
>>431 ありがとう
なるほど……
今度からそれやってみるわ
少しぐぐれば分かることきいてる人には回答しないのが一番かな
一番でないといけないんですか?
>>431 その上のサイトの機能を下のサイトでやってほしいところだw
3スレ目くらいからオマイラにお世話になってるんだが、 ちょっと愚痴らせてくれ… 以前、バッチだけで年月日の取得を組んだんだ… 月またがりと、うるう年判定、年末年始は取得しない、など。 そして、前日と翌日も取得するように作ったら、 100行くらいになってしまったのさ… そしたら、今度は平日のみを算出するように言われてね… XP以降、バッチに曜日がでないだろ? 途方に暮れて、しかたなくググってみたのさ。 そしたら、VBSでカンタンにできるじゃないか。 そしたら、たった5行で終わってしまった。 がんばってきたことが無駄だったのか、それともナニカの糧になったのか、 正直わからない。 こういうとき、おまいらはどう考える? ちなみに、今は平日にプラスして、祝日判定も入れた上での 前日の平日を取得するものをVBSと組み合わせて作成中。 ちょっとつまり掛けてるが、ドウシヨウもなくなったらまた質問させて欲しい。
VBSって昔、セキュリティ系のソフトに目の敵にされた覚えあるから正直微妙。
そこまでbatにこだわる理由が知りたい CやVBSで組んだほうがラクなのに、コンパイラなどを使ってはいけないという正当な理由があるの?
>100行くらいになってしまったのさ… 間抜けだな
愚痴りたい気持ちは分かるが 「新しい知識が身に付いた!」と喜ぶ方が 色々と幸せになれる気がする
>>439 Windowsでしか使えないバッドノウハウが増えてもちっとも嬉しくないんだが
>>441 俺もそうだな。
Windowsでしか動かさなさそうで、batやwshの方が楽ならそっちでさっくり書く
ちょっと面倒だなというときは、LLスクリプトで書いたり
臨機応変に対応してる。
batだけにこだわるとAPIやスクリプトのライブラリ使ったら一瞬で終わることも、
下手するとえらく長くなることがあるからね
ちょっとした構文のど忘れが合った時もググるのが面倒なので、その場でスクリプトのワンライナー書いたりとか
ま、できさえすればいいのよ
batスクリプトだけにこだわるほど人生長くないぞw
バッチでがんばって文字列処理とかやってると泣けてくる
バッチはコンソールが開くからやだ cscript wscriptみたいにcmd wmdつくれよ
進行度を知りたいがためにバッチ使ってる
おまいらの優しさに元気が出てきたよ。 たしかにそんなに容量を食うことは間抜けではある。 しかし、考えてるときは正直楽しかったのも事実。 うし、元気でた。 バッチにこだわる理由としては それ以外を禁止されたから。 先人がそれで新聞沙汰になるほどのミスをしたので、 バッチをなにも知らなかった自分にバッチだけで作れといわれてね。 まぁ、できたとたんクビになったが。 今は新天地で培ったものを駆使してる。 バッチ作製は自分が楽したいからが本音だが それで作業時間かすごく減ったので、もっとがんばりたいと思う。 ちなみに、平日、祝日判定を取り込んだモノが40行くらいで今日できあがった。 祝日テーブル参照とかバッチ内でVBS書きだしとかしてるけど、無事動いた。 朝にレス読んで元気でて、ちょっとクールダウンしたらすらっと書けたのにビックリだ。 おまいらのおかげだ。ありがとう。
新聞沙汰になるほどって興味あるw バグのあるスクリプトを盛大に走らせちゃったとかかな?
間違った請求書を印字して送っちゃった程度。100万人くらいに。
×間違った請求書 ○架空請求書
テストしてなかったんかな?
通り魔事件でナイフを規制する みたいな
交通事故が起きるからで車廃止 とか
通り魔wpどうにかしたいならナイフを規制してもそれ以外の手段でやるだけだから無意味 どう考えても道路を規制して誰も通れなくするのが正しい
batだったらミスが起こらないという根拠や理屈や理論があるの?
xpでlogin.bat set myenv=1 と記述してログイン時に呼び出して全ユーザープロセスに反映させる方法ないですか。 システムの環境変数と同じ扱いにしたいです。 c:\autoexec.batに記述すればできたけどもうちょっと穏当にやりたいです。
setx
ImageMagickでpng画像からpsdファイルを作ろうとしましたが できたpsdファイルを見るとレイヤーの透明部分がロックされてしまいます。 ロックされないで合成する方法かあるいは出来たpsdファイルのロックを プロンプトの命令で外す方法がありますか? ↓自分がやった透明部分がロックされてしまうコマンド convert henkan_mae.png henkan_go.psd
スレ違い
質問です。 if %hoge%=""( call .\hoge2.bat ) とやるとhoge2.batを読みに行かず、 「コマンドの構文が誤っています」 と出てくるのですが、 どのようにして外部ファイルをロードさせればいいのでしょうか
"%hoge%"==""
>>462 申し訳ありません。
if "%hoge%"=""(
の状態です。
>>463 = と == は同じじゃないよ
ちなみに使えるなら
if not defined hoge
こっちもいい。
""と(の間にスペースが必要 てかデバッグするときに@echo offするな
>>461 です。
申し訳ありません。
if "%hoge%"=="" (
でうまく行きました。
また、 @echo off コマンドはなし。
各所にpauseで処理の流れを見ていました。
話変わりますが、私はデバッグに
@echo off(問題ない部分) @echo on pause echo %変数名%
を組み合わせて利用しています。
>>413 ,414
ニコ動画作成wikiでコマンドラインで簡単にエンコードできる
つんでれんこ というの見ましたが・・・
変な質問してしまって申し訳ありません。
お詫びにご存知の方もいらっしゃると思いますがとりあえずこれを。
http://otnx.jp/CMD/FrontPage/
なにこれ怖くて開けない。 直リンだし。 腹いせで罠サイトでも貼った?
>>468 知らんのか?
それでよくここに来てるなw
しまった 自分で言っておいて、h抜くの忘れてた
今どきh抜くとか抜かないとか… 専ブラならhなど無くてもクリックできるし、 その時Refererを切ってくれるかどうかなんて信用できん。
>専ブラなら の文字が読めないバカ。 つーか、汎用ブラウザで2chにアクセスする方が ずーっと迷惑だっての。
あー、間違えた。 2chにアクセス、じゃなくて read.cgiを呼び出す、だな。 そもそも、ime.nuの書き換えはread.cgiが行ってるんだから。 それすら知らないみたいだけど。
ユーザー側がいちいち気にする問題じゃないし 2chの仕様が気に入らんなら運営に文句いっとけ
>>447-448 新聞沙汰になる用途ならちゃんとテストもかけよとww
かくいう俺もですね
set out = "temp" echo %out% これで表示されなくて小一時間悩んだわクソが
echo %out %
set out
なんで = の前後に空白いれちゃいけねえんだ
そういう仕様だから
>なんで = の前後に空白いれちゃいけねえんだ いれていいよ いれたらはいるわな それを入れないで展開する方がおかしいわな
一応確認だけど バッチ処理で起動したソフトのウィンドウに ショートカットキーを送る事は出来ませんよね?
やればいいのに
vbsでやれ
nircmdでやれ
OS内蔵のexeだけ使ってバッチファイルの中に記述出来るかという話だとすると出来る
>>489 だめ
>>490 だめ
コマンドラインのソフトで標準入力を受け付けるなら、リダイレクトで渡すとか。いやショートカットだからだめか。 ウインドウを持ったアプリにショートカット渡す話ならば、もはやbat関係ないな 部分的にAutoHotKeyとかAutoIt使うとか sendkeyみたいなコマンドあればいんだろうが、タイミングはかって自動化するくらいになるとAHKが楽だな
ショートカットってショートカットの仕方が変だろw
494 :
487 :2010/12/30(木) 02:31:03
>>491 のは理解が追いつかないですが一応方法はあるんですね。
とりあえずautohotkey使ってみました。
ありがとうございました
>>493 ショートカットキーの意味でショートカットって言ってるんだろう
実験したら嫌なことが判明した 嫌な仕様だなあ どうすりゃいいんだか &を含むファイル名は引数の取得に失敗する &を含んでも半角スペースを同時に含む場合は期待通りに動く(全角スペースは駄目) 実験bat ----------- @echo off echo "%~1" echo "%~2" echo "%~3" echo "%~4" echo "%~5" echo "%~6" echo "%~7" echo "%~8" echo "%~9" pause exit 実験ファイル名 ----------- D&D新規テキストドキュメント(2).txt D&D新規テキストドキュメント (2).txt D&D新規テキストドキュメント (2).txt 新規&テキストドキュメント(2).txt 新規& テキストドキュメント(2).txt 新規 &テキストドキュメント(2).txt
実験bat "D&D新規テキストドキュメント(2).txt"
499 :
デフォルトの名無しさん :2011/01/05(水) 12:25:21
moveってディレクトリ移動できないんだっけ? アクセスが拒否されましたと怒られる
馬鹿には無理
robocopyつかえ
>>497 のレスの意味がわからんのだが解説してくれ
ドロップハンドラ変えろってことじゃないの
>>497 にするようなドロップハンドラがあるのか?
ないよ
OS: Xp SP3 バッチファイル中(コマンドライン)からごみ箱に捨てるのはどうすればできますか?
508 :
507 :2011/01/11(火) 16:45:41
後出しですみません。 標準コマンドのみで実現したい。
VBSでShell.Application呼ぶしか無いんじゃないのかと
>>509 ありがとうございます。
バッチやめてcscriptに日和れというお告げかな。
うっ、レス番抜け。
>>509-510 ありがとうございます。
バッチやめてcscriptに日和れというお告げかな。
VBSもPowershellも標準コマンドじゃないからNG …てなことを言う腐れ管理部門もあるから厄介だ。
>513-514 一応Windows95でも使えるVBSは標準コマンドとして認めてもOKだろうが、 PowerShellは依然として時期尚早だと思う。
set errorlevel=2 if errorlevel NEQ 0 ( echo [ ERROR ] なんで>> Log.txt ) else ( echo [SUCCESS] 両方出るんだよ>> Log.txt ) すまん、助けてくださいまし
517 :
507 :2011/01/11(火) 18:38:05
518 :
516 :2011/01/11(火) 19:16:53
あー、分かりました。 errorlevelと%errorlevel%ってかなり別物ってことですよね? 少なくともerrorlevelは変数じゃないと。
構文エラーでifの行が無かったものとされているので 括弧で分けたのが無意味。全部実行される。 set errorlevel=2 rem if errorlevel NEQ 0 ( echo [ ERROR ] なんで>> Log.txt ) else ( echo [SUCCESS] 両方出るんだよ>> Log.txt ) こんなのと実質的に同じ。 if [not] errorlevel 〜 の構文と if 文字列 比較 文字列 の構文ごっちゃにしたらダメ
520 :
516 :2011/01/11(火) 19:56:21
ありがとう。実行結果よく見れば良かったです。 慣れないと危険ですね。
>>517 mshta使えばワンライナでできるワン
523 :
507 :2011/01/12(水) 10:27:50
>>521 jscriptは文字列定数に\を含むパス名を埋め込めなかったので、
vbscriptのワンライナーに落ち着きました。
mshtaはWScript.Sleep 100が問題だニャン
tmp.txtとか一旦出力するのを使わずに バッチにドロップした引数(%*)を文字順ソートして変数にセットしたい いろいろ試してみたのですが もうどう書けばいいのかわかりません。。 @echo on setlocal enableextensions disabledelayedexpansion set ARG=%* set ARG=%ARG:!=?% echo=%ARG% pause (for %%I in (%ARG%) do echo "%%~I")|sort pause exit /b とりあえずこれでソートは出来てるようなのですが これをARGにセットしなおそうと for %%A in ('for %%I in (%ARG) do echo "%%~I")|sort') do call :SUB %%A :SUB set ARG=%ARG% "%~1" goto :EOF とかにするとin()部が展開出来ないようなのです in ('(コマンド)')とか /f usebackqオプションと``を使ってみたり in ('call :SUB1')とか 思いつく限りでいろいろ試してみたのですがダメでした 教えて君で申し訳ないのですが、もう自分では限界です わかる方教えてくださいお願いします
526 :
525 :2011/01/12(水) 21:18:52
訂正 for %%A in ('(for %%I in (%ARG%) do echo "%%~I")|sort') do call :SUB %%A (と%が抜けていました あと、もうひとつ質問です 後からやサブルーチンで setlocal enabledelayedexpansion を使えるように set ARG=%* set ARG=%ARG:!=?% と!を?に置換したのですが for %%I in ()で展開されると?が本来のパスやファイル名の!に戻っているようなのです set ARG=%ARG:!=?% で!を?に置き換えるのは無意味なのでしょうか?
setlocal enabledelayedexpansion を頭に書かねばならぬとでも思ってんじゃねーの?
528 :
507 :2011/01/13(木) 01:25:40
>>524 setTimeoutで逃げたけど、ウィンドウが一瞬開くのがダサいから
結局、
>>517 に戻りました。
少し待たせるだけなら、よくこんなことやってるが全然ズレてるか。 ping localhost -n 10 > nul
完全
wscript.exe //e:vbs - を復活してほしいな
最近64ビット環境に移ったんだが、 環境変数PATHの中にProgram Files (x86)みたいな 括弧つきのパスがあると今まで使ってたバッチが動かない…… 思いつく回避方法は環境変数PATHを弄って Program Files (x86)をPROGRA~2に変えるみたいに DOSの8.3形式との互換性ある名前に変えちゃうぐらいしかないんだが、 他に良い回避方法ってないのかな?
そもそもProgram Filesにパスが通ってる必要あるの?
括弧つきのパスがあると動作しなくなる原因は?
そもそもProgram Filesのパスを指定する必要あるの?
ふつう""で囲むから問題ない
「みたいな」って書いてあるけど、
>>536 には見えないのかな?
そもそもProgram Filesみたいなパスを指定する必要あるの?
>>535 for %%V in (%PATH%) do (echo %%V)
みたいのが、そのままじゃ動かなくなる。
>>538 別にx64環境の前からパスに括弧を入れる事は可能だったね。
つまるところx64環境になったのが問題なのではなく以前から使っていた
バッチにバグがあったのが表面化しただけとも言えるな。
x64環境になった事とpathに括弧が入ることの関連性は(x86)だけだな。
「みたいな」と言いつつ、その実「という」辺りが適当なんではないかな。
そもそもアプリを後からインストールするのに Program Files下に入れる時点でアホ
本質はProgram FilesやPATHじゃない、という事がわからない奴はROMってろ。
実質サポート終了してるツールだからな 動くだけでも幸せと思っとけ
試行錯誤してみたが、例えばこんな感じか set TEMP_PATH=%PATH:;=^";^"% for %%V in ("%TEMP_PATH%") do (echo %%~V) set TEMP_PATH= 括弧つくとダメな条件が良くわからん。
546 :
デフォルトの名無しさん :2011/01/17(月) 23:03:35
splitと同じ処理ってバッチで実装できますか? たとえば引数が、123¥456¥789だったら、 \をセパレータにして123 456 789 に分けて変数に格納する感じで。
列挙だけなら setlocal enabledelayedexpansion set TEMP=123\456\789 :loop for /f "delims=\ tokens=1*" %%i in ("!TEMP!") do ( echo %%i set TEMP=%%j goto loop ) みたいな感じでできるけど。
549 :
デフォルトの名無しさん :2011/01/18(火) 00:07:25
550 :
デフォルトの名無しさん :2011/01/18(火) 00:27:17
PATHに""付で入れればえーやん
>>551 うちだと、それやると古いツールが""ついたままの名前で扱っちゃうんだな。
その手の古いツールがなければそれでもいいけど。
>>548 TEMP破壊すんなよ……
>>552 それなら、その古いツールはカッコだけじゃなくて、空白も問題になるだろ。
>>553 古いツールはバッチから呼び出されるだけでバッチじゃないので、
空白や括弧だけなら問題にならないんだわ。
つまり、古いツールには↓このように""なしで渡す必要があり、 かつ、バッチ中では""でくくらないと駄目という事か? > 古いツール.exe c:\Program files (x64)\hoge それなら、古いツールの呼び出しはパス演算子で変換してやればいい。 for %%n in ("c:\Program Files (x86)") do 古いツール.exe %%~n for %%n in ("c:\Program Files (x86)") do 古いツール.exe %%~sn
>>532 の問題の回避策として、
set PATH="C:\Program Files (x86)\hoge";C:\windows;C:\windows\system
みたいな回避法とると、バッチは手直しせずに通るが
古いツールの中には動かないのが出てくるって話。
>TEMP破壊すんなよ……
「setlocal」って書いてあるけど、
>>552 には見えないのかな?
>古いツールの中には動かないのが出てくるって話。 いい加減なことを言って、んなもんあるものか あったとすればお前が作った糞ツールだろ
x86はわかるがx64てなに? 65bitに32bitアプリを入れるときはフォルダ名に(x86)をつけなきゃーなんてね
>>561 こまけぇこたあいいんだよ。
ところで、64bitならわかるが65bitってなに?
65bitは64bitのtypoだろ x64はx86のtypoだろ
フォルダ名に(x86)みたいなのをつけるほうが悪いんじゃないか? &()[]{}^=;!'+,`~はつけるな―ってーの
566 :
デフォルトの名無しさん :2011/01/18(火) 20:35:03
>548 引数が123¥4 6¥789だと4で処理が終わってしまうのですが、 引数で渡す段階で、ダブルクォートで囲む以外に対処は無理でしょうか?
>>540 > for %%V in (%PATH%) do (echo %%V)
> みたいのが、そのままじゃ動かなくなる。
もともとまともに動かんだろ
set TEMP=%*
569 :
デフォルトの名無しさん :2011/01/18(火) 22:01:24
>>568 おぉ、うまくいきました。
ありがとうございます。
もう1点お聞きしたいのですが、このやり方だと、
引数が複数あると他の引数も渡ってしまいます。
1個目の引数だけをこの形で入れることは可能でしょうか?
>>569 ダブルクオートで囲わないという前提に立つ限り
スペースの後が1個目の引数の続きなのか2個目の
引数なのかはあなた以外にはわからないのでは?
571 :
デフォルトの名無しさん :2011/01/18(火) 22:43:47
>>570 引数はカンマ区切りで判断すると思ってましたが、スペースで区切るんですか。
無知で申し訳ない…
勘印まちがったのかのう
糞バッチを作る都会の紳士は%~$PATH:Iを知らんらしい
%~$PATH:Iはしゃれとんしゃ
VisualStudioで開発中のソースを自動ビルドするバッチファイルを作成したのですが、 このとき画面に表示されるログをファイルに保存したいと思います。 どのように記述を行えばよいでしょうか? バッチファイル初心者です。
バッチファイル > ログファイル 2>&1
バッチ中に書きたいんです!
578 :
デフォルトの名無しさん :2011/01/26(水) 19:02:01
@echo off 本物バッチファイル > ログファイル 2>&1 というバッチファイルを作ればいい。
本物のバッチファイル中には書けないんですか?
だったら引数の有無で分岐すりゃいい
環境変数の置換で=を?に置換したいんだけどどう書けばいい? set 変数名=%変数名:==?% と書くと通らなくて set 変数名=%変数名:^==?% や set 変数名=%変数名:^^==?% set 変数名=%変数名:^^^^==?% とかも試したんだけど置換されなかった 書き方間違えてるなら教えてください
=はどうやっても置換できません
>>582 ありがと
すでに何十時間も無駄にしたけど
さらに何日か無駄にするとこだったよ
そのシンタクスじゃ無理だけど %変数名:~2,1% みたいに1文字ずつ取り出して、比較して、結合してやればいいよ
forで=で分割して結合すりゃいいんじゃね?って思って書いてみたら… forの括弧の中で=がスペースに置換されて出力できない…こんな仕様だったっけ? set str=abc=def for /f "delims=" %%i in ('echo %str%') do echo %%i 結果 abc def ??
=だけじゃない ; , 全角空白も
仮令そうでなくても、=と==と===、、、が区別できないからダメだろ
for %%a in (*.jpg) do call :sub "%%a" goto EXIT :sub echo %1 goto :EOF これで処理をしていったら0001.jpg 0002.jpg 0003.jpgのあたりがどうしてもばらばらの順番で読み込まれてしまう時がある。 dir /onで調べると問題なく表示されるんだけど、何回やっても同じ結果になってしまう (圧縮しておいてまた解答してやり直しても同じ結果となってしまった。ひどいものだと一度読み終えたものまで読み込んでいる。) なんでだろう
一人がxからyに物を移している最中にもう一人がyからxに物を移すとどうなる?
自己改造.cmd echo >>%0 みたいなもんだな
>>580 再帰?
call使えばバッチ内に書けるよ
>>588 for /f "delims=" %%a in ('dir /b /on *.jpg') do call :sub "%%a"
ENCERRORは0か1のみ FLAG_QUIETLEVELは2以上なら正常終了時に確認しない 3以上ならエラー時にも確認しない ■A if "%ENCERROR%" == "1" ( if not %FLAG_QUIETLEVEL% geq 3 ( pause ) exit /b 1 ) if not %FLAG_QUIETLEVEL% geq 2 ( pause ) exit /b 0 ■B if "%ENCERROR%" == "1" ( if not %FLAG_QUIETLEVEL% geq 3 ( pause ) ) else ( if not %FLAG_QUIETLEVEL% geq 2 ( pause ) ) exit /b %ENCERROR% ■C if "%ENCERROR%" == "1" ( if not %FLAG_QUIETLEVEL% geq 3 ( pause ) exit /b 1 ) if "%ENCERROR%" == "0" ( if not %FLAG_QUIETLEVEL% geq 2 ( pause ) exit /b 0 ) A,B,C,でどれが一番美しいかな?もしくはわかりやすいのはどれ? また他に俺ならこう書くってのがあれば教えて
594 :
593 :2011/01/30(日) 14:28:23
タブインデントが無くなってる>< ()の中はインデントされてると思って読んで。
A,B,C,すべて美しくない。見たくもない。考えたくもない。
>>593 FLAG_QUIETLEVELが自然数であることを仮定して
goto f%FLAG_QUIETLEVEL%
goto f3
:f1
pause
goto f3
:f2
if "%ENCERROR%"=="1" pause
:f3
exit /b %ENCERROR%
うーんなんだか無理やり感があるなあw
さっきの全角文字が含まれてたorz if %FLAG_QUIETLEVEL% gtr 2 (goto 3) else (goto %FLAG_QUIETLEVEL%) :2 if "%ENCERROR%"=="0" goto 3 :1 pause :3 exit /b %ENCERROR% こんなんでもいけるな
ちなみに俺もバッチでエンコするんで似たようなことしてるけど フラグで分岐じゃなくてエラー出たときに set encerror=%encerror% ファイルが無いよ みたいな感じで追加していって最後で if defined encerror call errorfunc %encerror% みたいなことやってる。
>>596 を手直ししてみた。
これだと何してるか分かりやすいけど
FLAG_QUIETLEVELの値の範囲次第ではラベルの量がw
goto :FQL_%FLAG_QUIETLEVEL%
:FQL_2
if "%ENCERROR%" == "0" ( goto :FQL_3 )
:FQL_1
:FQL_0
rem (マイナス値があればここにラベル)
pause
rem (6以上があるならここにラベル)
:FQL_5
:FQL_4
:FQL_3
exit /b %ENCERROR%
for /f %%I in ('set /a encerror-flag_quietlevel') do cmd /c exit %%I & if errorlevel -1 pause
面白いけど要求どおりの動作しなくね?
>>601 よくそんなの思いつきますねーすごいですね。
>>602 ちゃんと動く
FLAG_QUIETLEVEL 0 1 2 3 4
ENCERROR 1 0 1 0 1 0
差 0 1 1 2 2 3
pauseの範囲 あり ←|→ なし
if errorlevel文は "以上" で真だから
ENCERROR - FLAG_QUIETLEVEL で符号を反転
cmd /c exit はif errorlevelでpauseかけるかどうかの判定に使ってるだけだから
この下にexit /b %ENCERROR%が要るけどちゃんと動作するよ
set /a encerror-flag_quietlevel
こんなの通らないと思ってたけど
for in ('')の中ではいいみたい
set /a %%I=encerror-flag_quietlevel
って意味になるみたいだよ
でもスクリプトみてわかりやすいかどうかと言えば問題あるけど
ただただ感心というか感動というか感嘆、ほんとによく思いつくなぁーと。
その発想力がうらやましいです。
何でわざわざerrorlevelに入れるためcmd /c exitってやってるのかわからん。 単純に do if %%I geq -1 pause でいいんじゃね?
>>603 > set /a encerror-flag_quietlevel
> こんなの通らないと思ってたけど
> for in ('')の中ではいいみたい
> set /a %%I=encerror-flag_quietlevel
> って意味になるみたいだよ
違う。
コマンドプロンプト上でset /a 1-2ってやってエンター押してみ。
C言語でもなんでもいいから プログラミングの基礎ぐらいやっておかないと恥かくよ
set /a I=encerror-flag_quietlevel if %I% geq -1 pause
>>592 動いた!ありがとう!!
こんな方法があるのか・・・
>>605 set /a 1-2
と同じになるのは
set /a %ENCERROR% - %FLAG_QUIETLEVEL%
と書かなきゃならないと思ってたけど
試してみたら set /a では%で展開しなくても
環境変数名で計算してくれるみたいですね
知らなかったです
差が2以上なら確認しない
if not ( set /a FLAG_QUIETLEVEL-ENCERROR ) geq 2 ( pause )
とか思ったけどこんな()の使い方は出来ないみたいですね
>>607 の例だと
■環境変数をもうひとつ用意して2行の場合
差が2以上なら確認しない
set /a FLQ_EE= FLAG_QUIETLEVEL - ENCERROR
if not %FLQ_EE% geq 2 ( pause )
差が2未満なら確認する
if %FLQ_EE% lss 2 ( pause )
>>604 のを
>>601 に取り入れると
■1行でなるべく環境変数を作りたくない場合
for /f %%I in ('set /a FLAG_QUIETLEVEL - ENCERROR') do if not %%I geq 2 ( pause )
if errorlevel文を使わないならわざわざ符号を反転させなくてもいいですね
>>600 の例だと FLAG_QUIETLEVEL が実数の場合、実質無理だけど
これなら問題なくなる
>>593 の質問は if "%ENCERROR%" == で else でなく
0と1を明示したほうがわかりやすいか?ってことと
exit はなるべく一箇所にしたほうがいいかな?ってことだったんだけど
思わぬ流れになりました
にしても差で pause の範囲を区切れると気付いた
>>601 は
やっぱりすごいですね
他の言語だとエラーで中断したり、プロンプト出して継続したりできるけど、 バッチファイルでは1行ごとにチェックして分岐するしかないかね?
>>611 > 他の言語だとエラーで中断したり、プロンプト出して継続したりできるけど、
「言語」そのものにそういう機能があるわけじゃないから。
あたま悪そう
ちょっとwait
そう思ったけどあえてwaitにした
バッチファイルを実行するcmd.ps1を作ればよい
for /f "backq delims=" %%I in ("%~0") do call %%I || goto eof echo 1 echo 2 echo 3
>>615 いや、むしろ ping 0 > nul を何行か続けるほうが良いのでは?
いや、むしろ :loop goto loop のほうが良いのでは?
findstrがわからない コンソールの桁数を日本語モードでも英語モードでも取得したくて 結論から言うと for /f "tokens=1,* delims=: " %I in ('mode con ^| findstr /r "Columns 桁数"') do echo=%J で目的の動作になるんだけど findstrに /r をつけなければ何も表示されない プロンプトで mode con | findstr "Columns" mode con | findstr "桁数" はそれぞれちゃんと表示されるんだが mode con | findstr "Columns 桁数" とすると何も表示されない ググったりしてみてもなんでダメなのかわからなかった ヘルプには たとえば、FINDSTR "hello there" x.y と指定した場合は、ファイル x.y で "hello" または "there" が検索されます。 とあるから findstr "Columns 桁数" で動くはずだと思うんだけど なんで /r つけて正規表現としなきゃならないか わかる人が居るなら説明してほしい
chcp 437
>>625 仮にコードページの問題で
USモードの時に "桁数" が通らない
ってならわかる
けれどそれだとJPモードで
mode con | findstr "Columns 桁数"
が表示されないのは説明つかないんじゃないかな?
mode con | findstr "桁数 コード" mode con | findstr /r "桁数 コード" この2つの結果が違うってのもよくわからんな
>コンソールの桁数を日本語モードでも英語モードでも取得したくて ヨーロッパでは? そもそもchcp 437でやればどこでもおkだろwと脊髄反射で書いただけ findstr "Columns 桁数" で非英数字は空白扱いで無視される /rは非英数字を扱う
631 :
624 :2011/02/02(水) 17:15:21
いわゆる Shift_JIS のダメ文字 (2バイト目が0x5cや0x7c)
でもないのにどうしてなんだと思ったけど
桁 8C 85
数 90 94
あ 82 A0
行 8D 73
○ findstr "桁"
○ "数"
× "CON 桁" "桁 CON"
× "CON 数" "数 CON"
○ "CON 行" "行 CON"
検索文字列がひとつの場合の時は大丈夫だけど
検索文字列が複数個になるとASCIIの範囲(0x7f)までしか
検索文字として認識しなくなってるのかもね
文字が1バイト目2バイト目共に7F以上のものばかりになるとダメってことかな
/rで正規表現としてみてる場合はそうではなくなると。
やっと納得いったよ
>>629 ヒントありがとう
>>630 >非英数字は空白扱いで無視される /rは非英数字を扱う
全てが無視されるわけではありません。ちゃんと確認してから発言しなさい。
>全てが無視されるわけではありません。ちゃんと確認してから発言しなさい。 だから >findstr "Columns 桁数" でと言ってるだろw 空白区切りのときってこと ちゃんと確認してから発言しなさい。
>文字が1バイト目2バイト目共に7F以上のものばかりになるとダメってことかな × 幵 9B F2 ちゃんと確認してから発言しなさい。
キリッ
それより正規表現で空白含むパターンが書けねーよ! findstr /r "Columns 桁数"
:HINT echo 速度|findstr "速 hoge" echo 試験|findstr "試 hoge" echo 試験|findstr "試験 hoge" echo 試験|findstr "止*血*ア hoge"
なるほど
正しくは、 mode con | findstr /c:Columns /c:桁数
cmd及びその周辺ツールを真面目に使いこなそうとすると精神に異常をきたすから サクっと他のまともなスクリプトに投げてしまったほうがいい
指定ディレクトリ以下の不規則な階層に存在する不規則なファイルを 指定ディレクトリにまとめたいです setlocal enabledelayedexpansion set N=0 for /f "delims=" %%R in ('dir /s /ad /b ^| sort /r') do ( set /a N=!N!+1 ren "%%R" !N! ) for /f "delims=" %%M in ('dir /b /a-d /s') do move %%M . endlocal 上記コマンドで、大体はうまくいくんですが ディレクトリ名に ! を持つディレクトリでエラーが出てしまいます renコマンドの対象ディレクトリ名の特殊文字を無効化する方法を教えてください
641 :
デフォルトの名無しさん :2011/02/03(木) 00:06:32
set N=0 for /f "delims=" %%R in ('dir /s /ad /b ^| sort /r') do ( set /a N=N+1 CALL ren "%%R" %%N%% ) for /f "delims=" %%M in ('dir /b /a-d /s') do move %%M .
set /a N+=1 でもよい
>>641 正常動作しました、callは使ったこと無かったので盲点だった…
勉強になりました、、ありがとうございます
>>645 全然参考にならないものをしたり顔で出されても…
そんなもん皆先刻承知。そんなのが参考になると思ってるのはお前だけ。
意味不明 >そんなのが参考になると思ってるのはお前だけ。 だったら >そんなもん皆先刻承知。 でない おまえ論理的思考ができない所謂おばか?
(お前以外は)そんなもん皆先刻承知。そんなのが参考になると思ってるのはお前だけ。 俺は論理的思考でこう読んだ
つまり論理的記述ができないおばか?
よく分からないからスクリプトで書いてください
>>647 645含めて皆先刻承知だが、それが参考になると思ってるのは645だけ
どっちでもよいが、もし八百長をした力士が3人いたら、3人だけでほかは皆してないと考えるほうがおばかだろ?
バッチファイルで経過を表示したいのですが、 文字列を引数にして画面にOSD表示するようなソフトってないですかね。
まあ自作すりゃいいんですが、 文字列の形をしたリージョンのウィンドウで作るのが普通なんですかね。 Win7とかで使えるのかな。
>>659 気の利いたツッコミもできないのなら黙ってろ禿脂
colorもtitleも現在値がとれないんだよな>MS
空気読めない645が墓穴を掘りまくってるようです
墓穴を掘ってるのは646なのでは?
墓穴に入らずんば疣痔を得ずと云うではないか
>>661-662 >645からの流れのどこに面白い要素があったの?どこに気の利いたボケがあったの?
ボケは知らんが粘着はあったな
>>660 は、自分は面白くて100万払っても友達にする価値がある人間とでも思ってるわけ?
お前らいいかげん論理的思考で参考URLを論理的記述しろよ
>>669 これが面白い要素たっぷりの気の利いたボケか
春休み+週末ともなると大変ですなw
大雪で外に出れないだけ
>>666 findstr /r "面白い要素 気の利いたボケ" 645からの流れ
流れを無視して質問。 taskkillで複数立ち上がってるうちの特定のjavaw.exeのプロセスを殺したいんだけど 起動元のコマンドを特定する方法はある?
>>669 なんで10年すれば理解できるん?
あ、答えなくていいです。諦めてますから
>>676 その頃には大人になってるだろうから。
大人=成人?とか言うなよ。お前なら言いかねんが。
そんじゃお休み。
>>678 ちょっとなに言ってるかわからないんですけど
>>677 それでは出来ないですね。
親プロセスIDが知りたいんじゃないので…
例えば、javaw.exe -jar hoge.jar とかで起動してるプロセスを
外部から特定して殺したいって事です。
ウィンドウタイトルで区別できるかと思ったら軒並み
TrayMessageWindow
になってて判別不能。全部常駐アプリだからか。
>>675 tasklist.exeはだめだけどtlist.exeなら親pidが分かるから
トリー表示もできたと思う
おまえが >起動元のコマンドを特定する方法はある? と言ったんだろ
すごいですね
>>647 さんって。
>>647 さん、もう一度
>>646 と
>>647 の文章を読んで
よく考えてみたほうがいいですよ。
もしかして
>>647 さんって日本に来てまだ日が浅い外人さんなのでしょうか?
半島の人?それとも学会の人間なのかな?
もし日本の方なのだとしたら、あなたの国語力は小学生低学年にも満たないと思われます。
小学生低学年では文章を解体し説明するなんてことは出来ませんが
そんな間違った解釈をしたりはしていませんよ。
使っている文章や漢字などから推測すると小学生というわけでは無さそうですので
活字がメインの本などを読んでもっと国語力を養ったほうがいいです。
そんな程度の文章で間違った解釈をし、恥ずかしげも無くその間違った解釈を堂々と発表し
論理的な解釈が出来ていないのはあなたのほうなのに相手が間違っているなどと罵るようでは
あなたは、あなたの周囲の人間にかなりの迷惑をかけているはずです。
あなたがこの先社会に出て、無用な誤解などから周囲に迷惑をかけないためにも
そしてあなた自身の為にも、日本語をもっと勉強してください。
とりあえず
>>647 さんに
>>646 を論理的に読み解く為のヒントを与えてあげましょう。
「人称」を調べて、この場合の「皆」が何を指すのかをよく考えることです。
>>654 誰かしりませんかね
SetWindowRgnの使い方覚えるか
>>682 言葉がちょっとすれ違ったようですね。
(自分自身の)起動元、と思われたようですけど
起動(した)元、と書いたつもりでした。
やっぱいいです。 自分でできそうです。
687 :
675 :2011/02/05(土) 20:30:27
誤解を招いたようなので再質問。 プロセスからそのプロセスを起動したコマンド全てを取得したい。 javaw.exe から javaw.exe -jar hoge.jar という元コマンド全体が欲しいということです。
>起動(した)元、と書いたつもりでした。 同じだろ 元を使うな コマンドラインと言え
wmic.exeでできる。具体的には調べないと分からんのでパス
基点が違うんですがね… 自分自身の起動元とは書いてないんですけど。 自分ではない目的プロセスの親コマンドライン(親自体は終了してる)でも 問題は解決します。
>>685 ドキュメントも読めないのか...
javaw.exe プロセス ID 与えたらその親プロセス ID 得られるだろ。
そもそもソース見れば、どうやって取得してるかもわかるだろうに...。
と書いてたら、コマンドラインがほしいのか...。
Win32_Process の CommandLine でできるんじゃね?
態度が気に入らんから、詳しくは教えないけど。
>>691 あっけなく解決したので自分が情けないですが、
あなたの助けは要らなかったようです。
>自分ではない目的プロセスの親コマンドライン(親自体は終了してる)でも 元を親に変えるな 親も使うな ただのコマンドラインでええ
茶々を入れるだけの能無しも不要です。
こういう場合、派遣元に人員交代を要求して、切っちゃいます。
能無し・・・だと…?
バッチで累乗計算ってどうすればいいのでしょうか? "^"は残念ながらバッチではxorの演算子みたいですね 一応検索したりヘルプを読んだりしてみたのですがわかりませんでした 今は for /l 文を使って代用しています。 簡単に一発ポンでできる方法があるなら教えて欲しいです。 それともうひとつ。 Aという数の右からN番目のビット値Bを取得する で、今はAとNを入力して関数電卓で結果が正しいかどうかを 確認しているのですが、0か1が出力されるはずなのに 32桁目が-1になってしまいます こうすればもっと簡単にN番目のビット値を取得できるっていうのがありましたら 教えてください。
699 :
698 :2011/02/05(土) 22:00:40
test.bat @echo off setlocal :seta set /p A="A=? " rem set /a A=%A% if not defined A goto :seta :setn set /p N="N=[1-32]? " if not defined N goto :setn if "%N%" == "end" exit /b if %N% lss 1 goto :setn if %N% gtr 32 goto :setn rem ここから if %N%==1 set /a B= "A&1" &goto :next set X=1 for /l %%i in (2,1,%N%) do set /a X*=2 for /f %%i in ('set /a "(A&X)>>N-1"') do set B=%%i rem ここまで :next echo A=%A% echo N=%N%番目 echo B=%B% goto :seta
そこまで
702 :
698 :2011/02/06(日) 06:39:25
先にシフトして1で&すれば累乗計算は不要でした Aという数の右からN桁目のビット値Bが欲しい場合は set /a B= "A>>N-1&1" これだけでよかったみたいですね なんでこんな単純なこと気付かなかったんだろうか。。 おはずかしい限りです 今はこんな感じでビット値全て表示して確認しています test.bat @echo off setlocal enabledelayedexpansion :loop set /p A="A=[32bitINT|end]? " if not defined A goto :loop if "%A%" == "end" exit /b set B= for /l %%N in (0,1,31) do for /f %%C in ('set /a "A>>%%N&1"') do set B=%%C!B! echo=%A% echo=%B:~0,8% %B:~8,8% %B:~16,8% %B:~24,8% goto :loop rem -- ここまで -- 32桁目って正なら0で負なら1ってことなのでしょうか? それと今回は必要なかったのですがバッチでは累乗計算は for /l で乗算を繰り返すしかないですか?
ゴミ箱空にするだけなのにアクセス拒否られる
runas
バッチの中からDVDドライブをイジェクトするコマンドラインは?
powershell使え
GUI使え
Shell.Application
nircmd.exe cdrom open x:
'Shell.Application' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 'nircmd.exe' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。
wavファイルを鳴らす起動元の親コマンドを教えてください。
start tada.wav
それだとウィンドウが閉じません。
条件後出しすな
rundll32.exe c:\windows\system32\Msdxm.ocx,RunDll /play /close c:\windows\Media\tada.wav
>>717 横からだけどWin7だからか、試してみたけど動かんなぁ…
RunDllってエントリが無いって言われる。
powershell使え
なんもできねー バッチフェイルだ
【.cmd】 バッチフェイルスクリプト %6 【.bat】
WMPlayer.OCX使え
>>718 ↓こっちの方法はどうかな?ウチのWinXP(SP3)では
>>717 の代わりに使う事が多いんだが…
"C:\Program Files\Windows Media Player\mplayer2.exe" /play /close c:\windows\Media\tada.wav
うちじゃ閉じません
んじゃamovie.ocx
>717,723ともWMPが連続再生設定だと閉じないんだよね。
>>723 Win7にはmplayer2自体無いからな…
どっかからsndrec32.exeを引っこ抜いて来ればよい
OS付属にこだわらないなら別のスクリプトでも普通に音は鳴らせるしね。
文字列の置換について質問です。 [あいうえお-Category-かきくけこ]"のうち、Category部分をバッチに読み込んだ値に置換したいと思います。 ○○.bat "あいうえお-Category-かきくけこ" "テスト2" == @echo off set FileName=%~1 set Categ=%~2 set FileName=%FileName:Category=%Categ%% echo ファイル名 %FileName% %Categ%ではなく直接テスト2だと動くのですが、 置換先を読み込んだ値にしたい場合はどのようにすればよいのでしょうか?
call set FileName=%%FileName:Category=%Categ%%%
call様々やね なんでドキュメントに書いてないんだぼけ>ms
>>731 >>732 ありがとう。できました。
Callについていくつかググったところ、どこもバッチファイルを呼び出すと書いてありました。
バッチファイル内ではバッチファイルのみならず、バッチ的な動作である文字置換も
Callで呼び出さなければならないってことなんでしょうか?
call 遅延展開でぐぐれ
wmicでcpu負荷何%以下のイベント監視ってできないのかな? 自分で監視ループ作るの?
質問です。 「英語圏以外の人たちのために、コマンドラインを英語モードで立ち上げるバッチファイル」というのを実行し、そのゲームをプレイしてから(おそらく) バッチファイルが英語で実行されるようになってしまいました。 (なお、そのバッチ内容は↓) @echo off CHCP 437 mode con lines=25 cmd 検索してみて、CHCPというのが問題なのかと思い、 CHCP 932 というバッチファイルを実行しても、新しく作ったバッチファイルが英語で実行されます。 バッチファイルの実行画面の右クリックから「規定値」を見ると、コードページは日本語になっているのですが、 バッチファイルのプロパティは英語で実行されてしまいます。 スタートメニューからのコマンドラインは日本語になっています。 管理者として実行しても同じでした。 どうすれば以前のようにデフォルトが日本語でバッチを実行できるようになるでしょうか? OS はwin7 です。
mode con cp select=932
>>741 それって
jp
とやるのと何か違いはあるの?
HKEY_CURRENT_USER\Console
jp.batが無い
>>743 HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe
のCodePageの値を437から932変更することで、
rem あいうえお
pause
というようなバッチファイルを作成・実行しても問題なく日本語で表示されるようになりました。
どうもありがとうございます。
jpはchcp chcpはその場限り modeは設定(レジストリ)変更
バッチで環境変数abc123から環境変数aに切り出した文字が数字かそれ以外かの判定って set abc123=abc123 set a=%abc123:~0,1% if "%a%" == "0" (goto :数字でした) if "%a%" == "1" (goto :数字でした) ・ ・ ・ if "%a%" == "9" (goto :数字でした) else (goto :数字じゃなかった) こんな風に、if文を羅列しなきゃ出来ませんか? こうすりゃもっとスマートに書けるってのがあるなら教えてください。 正規表現使えたら楽なのに。
findstr
>>748 ああなるほど。
findstrって見つからなかったらerrorlevel返すのかな?
試してみます。ありがとう。
>>747 set /a n=%a%
if "%n%" = "%a%" (echo 数値) else (echo 数値でない)
rem 複数桁でも動作するけど、0123 のように先行 0 があると数値でないと
rem 判定されるので、注意。
複数のyyyymmdd のディレクトリにあるファイル(例として*.xls)を、 まとめて二階層上に移動させるのってどうすればいい? (重複ファイルはなしの前提で可) dir *.xls /s | move ...\ とかじゃ駄目なの? オブジェクト指向とかじゃないから、moveの引数にパスとかまで渡せない? まぁWindowsの検索使ったり、vbsで再帰処理するスクリプト書いてもいいんだけど…
>>750 set /a だと%要らんよ。
set /a n=a
でいい
set n1=1234567890 call set n2=%%n1:%a%=%% if %n1%==%n2% echo 数字でない
>>753 それだと *.xlsm *.xlsb *.xlsx も移動されるんだけど
マジかよ・・・ DOSの8+3形式のトラップ?
MSもすっかり忘れててxlsmとか作っちゃたのよぉらららんらん
>>755 > それだと *.xlsm *.xlsb *.xlsx も移動されるんだけど
だったら、dir *.xls /s | move ...\ なんて書かないでほしいなぁ。
とりあえず、ぱっと思いつくのは、
for /f %f in ('dir /b ^| findstr "\.xls$"') do move %f ..\..
あたりかな。
for %%I in (*.xls) do if /i %%~xI==.xls move %%I ..\..\
762 :
751 :2011/02/12(土) 21:55:47
やっぱループ回すしかないですか
バッチでなくコマンドでサクッとやりたかったんですが
dirの/sオプションは表示専用みたいなものか…
あと
>>755 は自分じゃないです
別にバッチでなくコマンドでやってるだろ?
>>756 8+3形式の名前が無い状態だといけるな。
>>758 >for /f %f in ('dir /b ^| findstr "\.xls$"') do move %f ..\..
の
^←これってどういう意味?
エスケープ
コマンドで for /f "delims=" %I in ('dir /s /b *.xls') do if /i %~xI==.xls move "%~I" "%~I\..\..\..\"
なんのこれしき
お前が言うな
もめるな
LFNはめんどうだにゃ
なんのそれしき
お前が言うな
たまにはforfiles使えよ せっかくあるんだから
ねーよ
MSがサポート中のOSにはあるだろ?
C:\Windows\System32\forfiles.exe
XP Sp3には無いな。
Windows2003 や WindowsXP x64 にはある。 2003以降は何気に choice.exe,、timeout.exe とかがあるから地味に便利。
Editionによっても違ってくるし、Windows Embeddedだと 意図的に入れてかないと入らないから、マイナーなツールが 標準で入ってるかどうかはあんま意味がない MSサイトなり他から持ってくるなりでターゲットで動けばOK
後から追加インストール有りなら、バッチなんて不自由なもん使わねーよ。 適当なLL入れれば、それだけで作業の大部分は完了。
785 :
デフォルトの名無しさん :2011/02/14(月) 23:51:27
同じ環境変数に書き込むバッチを複数立ち上げたときに、 環境変数に対する排他制御ってバッチだけで実装できますか?
環境変数はプロセス内だろ?
>>786 それなら、vcvars32.batが親シェルの環境変数を設定できることを説明してくれ。
788 :
デフォルトの名無しさん :2011/02/15(火) 00:24:55
>>786 >>787 setlocalつかって、立ち上げたプロセスにしか反映しないようにしてみました。
この場合、同じ変数名つかってても影響ないんでしょうか?
SET TEMP=%TEMP% "abc"
みたいな感じで、複数のバッチでTEMPを書き換えても、別プロセスだと問題なしですか?
setlocalは関係ねーだろ
各バッチファイルで好き勝手に書き換えてもそれぞれ独立して保持するだけだから問題なし。 例外はa.batでcall b.batした時、b.batの変更がa.batにも影響するくらいかな。 逆に根っこから恒久的に全部変えたかったらレジストリのEnvironmentを書き換える。
791 :
デフォルトの名無しさん :2011/02/15(火) 06:50:24
>>789 具体的にどう関係ないんでしょうか?
バッチファイル内の環境変数のローカライズを開始ってなってるので、
やらないと全体に反映されませんか?
>>790 独立して保持ですか。メモリ上に展開されてるだけなイメージでOKでしょうか?
レジストリにさえ書き込まなければOKってことですね。
>>787 > それなら、vcvars32.batが親シェルの環境変数を設定できることを説明してくれ。
16bit osの話でもしてんのか?ぼけ
>>788 > setlocalつかって、立ち上げたプロセスにしか反映しないようにしてみました。
あほか?
>>792 ぼけとかあほとか…
底辺IT土方には他に語彙がないんか?
例えば?
かすとか?
ふたつコマンドプロンプトをたちあげて、一方で set boke=aho とやって、他方で、 echo %boke% とやっても展開されないのですが?
cmd.exe /c start 〜すると一瞬だけウィンドウが見えちゃうんだけど cmd以外で関連付けを使って開く方法ってないですか?
shellexec_rundll urlprotocolhandler
.lnk最小化
800 :
デフォルトの名無しさん :2011/02/15(火) 18:03:36
>>792 vcvars32.batの「32」が読めないか? カス。
それがどうした?ボケ
>>796 アホとボケは相容れないため展開されません
起動元の親コマンドの類だろ
現シェルの
基点が違うんですがね…
なになにバッチファイル名に32って付けると親シェルの環境変数が設定できるって?すごっ
ファイル名に32が付くとwinsetが使えると聞いてやってきました
名前忘れたが、16bitOSの頃、親プロセスの環境に設定するコマンドがあったな
cmd /c set boke=aho echo %boke% とやっても展開されないのですが?
cmd /c set32.bat boke=aho echo %boke% だろ
reg add HKCU\Environment /v boke /t REG_SZ /d aho
set STR="1番目, 2, abc, いろいろ..., 最後" と、","で区切られた区切りの数は不定の文字列があって、 1番目と最後のトークンだけを取り出したいんだけどどう書けばいいですか? for /f "tokens=1,* delims=," %T (%STR%) do echo "%T" &echo "%U" で "1番目" と残りは取り出せるんだけど。。 最後を取り出すのに何かいい方法があれば教えてください
それをループさせればよい
for %T in (%STR:~1,-1%) do if not defined first set first=%T& set last=%T echo %first% echo %last%
>>815 >>816 レスありがとうございます。
>>816 do () &とすることで、いい感じなのですが区切り文字は ","カンマのみとしたいんです。
スペースとかの他の区切り文字と判断される文字があると分割されてしまいます。
>>815 の言うようにやっぱりループさせるしかないのかなー?
for %T in (%STR:,=","%) do set last=%T&if not defined first set first=%T echo %first% echo %last%
>>818 いやもうなんだか、、、ほんと頭が下がります。。
>>816 みてそのやり方に気付けなかった自分が情けないのと
要件満たしてあっさり書けてしまう
>>818 さんに感心とで複雑な気分です。。
もう私の頭なんて固くなっちゃってるんでしょうねー。^^;
>>818 さん、ほんとにありがとうございました。
なんのそれしき
821 :
デフォルトの名無しさん :2011/02/16(水) 18:13:47
822 :
デフォルトの名無しさん :2011/02/16(水) 18:46:38
おまいさんは >新たにウインドウを開くことなく,「test.bat」というバッチ・ファイルを起動する のに start /b test.bat てやるかい?
出来ることを、やっちゃいけないのか?
好きなだけやれば?
826 :
デフォルトの名無しさん :2011/02/16(水) 21:48:15
>>822 >>824 は
>新たにウインドウを開くことなく,「test.bat」というバッチ・ファイルを起動する
のに
start /b test.bat
てやるそうです
何が問題なの?
どうでもいいことにこだわる馬鹿が一匹いるだけ
start notepad と start /b notepad はどう違う?
違いはあるがnotepadじゃ違いは見えんよ
832 :
デフォルトの名無しさん :2011/02/19(土) 01:18:15
^(キャレット)でエスケープした文字列をテキストファイルからtypeで 読み出した時に、abc^&だとabc&になって読み出されます。 ^でエスケープしたままの状態の状態で読み出すことってできますでしょうか?
はぁ?
>>832 コマンドプロンプトからでもバッチからでもtest.txtの中身がabc^&でtype test.txtとしてもXPSP3ではabc^&と表示されたよ
typeの結果を構文解析されるような使い方してるんじゃないの?
>>834 エックス、プレイステーションポータブル3…orz
for /f %%I in (a.txt) do set x=%%I echo %x% みたいな話だろ
遅延展開つかえばええんでね?
838 :
834 :2011/02/19(土) 02:57:09
どういう使い方してるのかわかんないから外してるかもしれんけど 文字列を""で囲んで取り出すとかは? ""を外したくなったら環境変数にセットして%VER:~1,-1%で外せるし 構文解析される前に%VER:^=~~%と^を^^と置換しておくことも出来るよ
>>838 txtの中身がcsvとかで各フィールド毎に「"」があったり無かったりして回避できない罠
遅延展開つかえばええんでね?
バッチファイルで変数をecho表示(a!b!c)したいのですが なぜ ! の頭に ^ を14個も付ける必要があるのか誰か教えてください setlocal enabledelayedexpansion set b= set x=a^^^^^^^^^^^^^^!b^^^^^^^^^^^^^^!c echo %x%
そんなに必要ないけど?
843 :
デフォルトの名無しさん :2011/02/19(土) 16:11:25
>>841 setlocal enableextensions disabledelayedexpansion
10個で十分ですよ
ほんとだ。ごめん。
>>844 拡張ONがデフォの環境じゃenableextensionsは要らないけどね。
! --> ^^! ^ --> ^^^^ ^^! --> ^^^^^^^^^^!
850 :
844 :2011/02/19(土) 20:07:24.63
set x=a^^^^^^^^^^!b^^^^^^^^^^!c 構文解析時に%と^が評価されて ^2個がひとつになり x=a^^^^^!b^^^^^!c ^が半分の5個となり 遅延展開が有効だと遅延展開の評価時に ^2個がひとつに ^!が !となって x=a^^!b^^!c xに代入されるのは a^^!b^^!c echo %x% %と^評価時に%x%に a^^!b^^!cが展開され ^^が^となり echo a^!b^!c 遅延展開の評価時に ^!が !となって echo a!b!c a!b!c echo on にして、コンソールでは遅延展開の展開は見れないことを考慮しながら setlocal enabledelayedexpansion set b= set x=a^^^^^^^^^^!b^^^^^^^^^^!c setlocal disabledelayedexpansion echo %x% としたり最初から遅延展開を無効にしてみたりすると動作が理解しやすくなると思います。 といった意味で844書いたんだけど、言葉足らずすぎだったかなと。^^;
見苦しいのお
852 :
832 :2011/02/19(土) 21:24:38.57
typeの結果をforで取り出して環境変数にセットして、 コマンドに引き渡す使い方してます。 838さん教えてくださったやりかたで、今回は回避できました。 みなさん色々ありがとうございました。
> ^2個がひとつになり という表現はまぎらわしいか。 構文解析時や遅延展開時に ^が直後の文字をエスケープして消える に訂正します。
854 :
デフォルトの名無しさん :2011/02/19(土) 23:39:29.45
環境変数つきでコマンドを実行させたいのですが、 (a) set HOGE=HOGE && (環境変数HOGEを使うコマンド) と実行させたところ、コマンドが環境変数HOGEを読み取ってくれません。 以下のよう二行に分けて実行したところ、環境変数を読み取ってくれます (b) set HOGE=HOGE (環境変数HOGEを使うコマンド) 外部コマンドとしてRubyから(a)のように `set HOGE=HOGE && (環境変数HOGEを使うコマンド)` というように実行したいのですが、なんで(a)では処理できないんでしょうか? やりかたを教えてください。よろしくお願いします。
またかい set HOGE=HOGE && call (環境変数HOGEを使うコマンド)
ねんのため set HOGE=HOGE && call (環境変数%%HOGE%%を使うコマンド)
857 :
854 :2011/02/20(日) 00:12:12.66
ありがとうございます。
>>855-856 試したのですが、(a)だと失敗して(b)だとうまく行きます
identify.exeプログラムに、一時的に環境変数を渡したいのですが。。
(a)set MAGICK_CODER_MODULE_PATH=c:\imagemagick\modules\coders && call identify.exe -list format
(b)set MAGICK_CODER_MODULE_PATH=c:\imagemagick\modules\coders
call identify.exe -list format
渡ってるよ 渡らないという根拠はなんだ? ところで(a)と(b)で渡しているものに微妙な違いがあるが、わかっているのか? echo "%MAGICK_CODER_MODULE_PATH%" してみ
859 :
デフォルトの名無しさん :2011/02/20(日) 00:44:36.52
>渡らないという根拠はなんだ? identifyの挙動の違いでしか判断してませんでした。すみません。 echoさせると、callをつけたときに、 MAGICK_CODER_MODULE_PATHが表示されるのを確認しました。 >ところで(a)と(b)で渡しているものに微妙な違いがあるが、わかっているのか? call identifyの代わりに、call echo "%MAGICK_CODER_MODULE_PATH%" としても、(a)と(b)の表示結果が同じに見えるのですが。 なんでidentifyの挙動が違うか分かってないないです。。 教えてください。お願いします。
"c:\imagemagick\modules\coders" "c:\imagemagick\modules\coders " の違い
861 :
854 :2011/02/20(日) 00:53:53.08
>>860 うわあああ としか言いようが。。これで何時間悩んだのだろう
とても助かりました。ありがとうございます
バッチファイルもいつのまにか進化してんのな 遅延展開とかsh並にきもいw
なんちゃって言語だからな VBとあんま変わらんような気もする
バッチでlispとか組めるんかな?
>>864 動的な配列と文字列処理がもう少し充実すればなんとか
デフォルト以外の関連付けで起動ってどうやる?
start /v:print a.txt
質問です。
会社のPCなのですが、お昼休みから戻ると起動していたソフトの動作が
ものすごく重いのです。
ウインドウをアクティブにし、ソフトを使うと徐々に軽くなり、元の軽さに戻ります。
業務上常にソフトは起動していなければならないのですが、お昼休み後は
この症状のために10分ほどまともに業務ができません。
そこでスクリプト?で常にWindows?かソフト?を動かして、アイドル状態にならないように
したいのですが、どのようにすれば良いか教えていただけないでしょうか。
※まだ試していませんが、
ttp://kenknown.blog42.fc2.com/blog-entry-62.html を実行すれば良いのだと思うのですが、エコではないので違う方法を教えてください...
>>868 昼休み中にウイルススキャンが走ってるパターンだと思われるので、
アイドルを回避しても、あまり状況は変わらないと思われる
後出しで申し訳ないです。 たしかに昼休みにウイルスバスターが走っていましたが、 管理者に確認し部署ごと深夜に変更していただきました。 アイドル?により重いのは以前からの認識があるようなのですが Windowsの仕様らしいとのことで2年間放置されているとのことです。
ケチってセロリン&メモリ極小仕様&低速安物HDDなんじゃね → 会社PC
XPは長時間放置するとちびちびとpagefile.sysにスワップアウトしていくから そのあとマシン触るとガリガリ言って重くなるって話かも。
>>870 十分にメモリが大きければ、仮想メモリのサイズを最小にする
メモリが少ない場合は、アプリ側の修正が必要だから無理
HDDのアクセスの早い部分に仮想メモリが来るようにデフラグするくらいしかない。
>>873 設定変更が必要ですか・・・。ほかに方法はないのであれば、
こっそり
>>868 のスクリプトのお世話になります。
ありがとうございました
何か物凄く勘違いしてそうだけど、CPU稼働率が上がってても 多分状況は変わらんぞ。
>>875 俺も、それを突っ込もうかと思ったが
スワップのスレッド優先度がどの程度になってるのか知らんので
CPU使用率が100%になれば、意外とスワップすら出来なくなり
>>874 の思惑通りになる可能性も否定できないので止めた
アフターランチ症候群 なんか懐かしい
878 :
874 :2011/02/22(火) 22:06:22.60
本日試してきました。 一つだけだと100%にならなかったので2つ実行しました。 お昼休み後、プロセスを停止すると即サクサク動作でした。
バッチファイルスクリプト と関係ないだろ いね
ドラッグ&ドロップでファイルを受け取って そのファイル名を現在時刻に直して スクリプトの場所に0223のような日付の名前のフォルダを作って そこにファイルを移動するやつ 誰か作ってください。お願いします。
断る。
@echo off set t=%time::=% set d=%date:/=% md "%~dp0%d:~-4%" 2>nul copy /y "%~1" "%~dp0%d:~-4%\%t:~0,4%%~x1" >nul 2>&1 del /f /q "%~1" >nul 2>&1
なんと危険な!
エロ画像の整理にいいね!
エロ画像整理.cmd
for /f "delims=" %%A in ('dir /b /a-d /s') do move %%A . for /f "delims=" %%B in ('dir /b /ad /s ^| sort /r') do rmdir %%B 2> nul
エロ画像整理.bat
しつこいんだよ おまえも面白くないってわかってんだろ?
890 :
デフォルトの名無しさん :2011/02/24(木) 23:03:58.25
特定の文字が一番最初にでたのが何文字目かって、 簡単に調べる方法ありますか? abc-deだったら4文字目とか
InStr("abc-de","-")
892 :
デフォルトの名無しさん :2011/02/24(木) 23:27:10.59
すみません。前提条件抜けてました。 WSH使わないでお願いします。
InStr.cmd "abc-de" "-"
set /p x=%1>x set /p y=%x:*%1=%>y for %%x in (x) do set x=%%~zx for %%y in (y) do set y=%%~zy set /a x-y
set /p y=%x:*%2=%>y
@echo off call :match abc-de - echo %errorlevel% exit /b :match setlocal enableextensions disabledelayedexpansion set src=%1> nul 2>&1 set char=%2> nul 2>&1 set /a cnt=0 date /t>nul 2>&1 setlocal enableextensions enabledelayedexpansion if defined src if defined char call :match_loop endlocal endlocal exit /b %errorlevel% :match_loop set idx=!src:~%cnt%,1!> nul 2>&1 if not defined idx exit /b 0 set /a cnt=cnt+1 if "%char:~0,1%%char:~0,1%" neq "%idx%%idx%" goto match_loop exit /b %cnt%
897 :
デフォルトの名無しさん :2011/02/25(金) 01:07:47.07
そんなの出されてもわけがわからないので、コメント付きでお願いします。 1行づつの説明やフローチャートでも結構です。
アホかwww @echo off 外して実行して、理解できない動作だけ聞け
すみません。前提条件抜けてました。 簡単に調べる方法ありますか?
ありません
十分簡単だと思うけど? 昔、日付の計算(現在日時+n日後とか、次の金曜日は何月何日とか…)させた時は、 何の修行かと思うほど大変だった…orz
902 :
デフォルトの名無しさん :2011/02/25(金) 01:30:24.61
簡単だと言うのなら簡単でいいですから解説をお願いします。
echoをoffにする :matchをcallする %errorlevel%をechoする exitする ... ...
外注に保守できるようソースコードにコメント付けさせるとこんな役立たずなコメントになったな
>>902 (abc-de) - (-de) = abc
abc = 3
3 + 1 = 4
4文字目
ping localhost -n 60 > nul これで約1分のウェイトを入れてみた(はずな)のですが ウェイトの処理中にキー入力があったときにこのウェイトを飛ばそうと思っています 入力待ちにすると入力待ちの状態から処理が進まずpingが呼び出せず困っています・・・
sleep.exeでも探した方が早いんじゃ
Vista以降ならtimeout /t 60
>>910 それを言うなら、Vistaじゃなくて 2003 以降。
>>896 set の度にnulにリダイレクトしてたり、無意味なdateや
文字比較で2連続にしてる意味がわからんのだが…
>>912 setは%1と%2に何が渡されるか分からんから
dateはerrorlevelを0にするため
>>912 文字の比較で2回重ねるのは、その文字自体が「"」だった場合の対策
なるほど
底までしてバッチ使うかね
>>917 Windows標準機能以外のツールを使うことは罷り成らん
とほざく底辺管理部門がいる限りは、仕方ないわな。
919 :
デフォルトの名無しさん :2011/02/25(金) 23:09:07.77
そんな奴はいねえ
920 :
デフォルトの名無しさん :2011/02/25(金) 23:43:52.72
自分が使えない、あるいは、他の人が理解出来ないって理由は良くある バッチはDOS時代から使われてて理解しやすいからOKって コマンド類とか昔と結構変わってるし、絶対バッチの方が 複雑になって大変だと思うんだけど、それを指摘すると 使用されるコマンドも制限される恐れがあるので、大人しくバッチを使う
いや、他人に非標準のツールをインストールさせるのが面倒なんだよ。
batだろうとcomだろうとexeだろうと使う側は理解できないよ
・自分が使えない物=>使えないとツールのせいにする ・仕様書は読まない ・他の人がで切れば身内ができないはずがない→やれ インストールさせてそのツールが進めた人にあわなかった時 俺の運命は・・・
>>920 >
>>891 はWindows標準機能だけど?
どこの Windows ?
うちの WindowsXP SP3 には入ってない。
>>922 > いや、他人に非標準のツールをインストールさせるのが面倒なんだよ。
だね、だけどだったらバッチから vbscript とか呼べばいいじゃんと思うが。
926 :
デフォルトの名無しさん :2011/02/26(土) 11:07:44.60
e.bat explorer.exe
e.bat EXIT
コマンドプロンプトのDELって怖いよね・・・
ダイドコロのKNIFEって怖いよね・・・
>>930 vbsのpopupの呼び出しじゃだめか?
batファイル初心者なのですが プロセスにa.exeが起動されたらb.exeを終了してc.exeを起動するにはどうしたらいいですか?
>プロセスに の部分が分からない
OSバージョンによって違うが
プロセスの監視にbatを使うのは嫌だな
こんなか? 俺なら、絶対に動かしたくないな… @echo off set task1=a.exe set task2=b.exe set task3=c.exe set flag=1 :taskkill for /f "usebackq tokens=*" %%A in ( `tasklist /fi "imagename eq %task1%" 2^>nul ^| find /i "%task1%"` ) do (set flag=2) & taskkill /fi "imagename eq %task2%" >nul 2>&1 if %flag%. neq 2. ping 127.0.0.1 > nul 2>&1 & goto taskkill start "%task3%"
start "%task3%" ぷっ
アチャー
俺も、そんなどんくさいの絶対に動かしたくないな…
>>937 何か?
プロセスの管理だから、task3がコマンドの場合も考慮して
必ず別プロセスで立ち上げようと思うのが悪いことなのか?
そんな初歩中の初歩も知らないなんて
startの仕様を知らんとは
別プロセスじゃね 別ウインドウだった
start/?
flagなんかいらんだろ?
すみません最後のc.exeを起動するのはいりませんでした それと1度だけじゃなく常時にしたいです
心配せんでも起動されんよ
>>945 2回gotoするよりは、フラグの方が好きなだけ
すみません最後のstart消してgotoいれたらできました ありがとうございました
>>949 フラグもいらない
set task1=a.exe
set task2=b.exe
set task3=c.exe
:taskkill
for /f "usebackq tokens=*" %%A in ( `tasklist /fi "imagename eq %task1%" 2^>nul ^| find /i "%task1%"` ) do taskkill /fi "imagename eq %task2%" >nul 2>&1
ping 127.0.0.1 > nul 2>&1
goto taskkill
ということはtask3の定義もいりませんね
:tasklist for /f "usebackq tokens=*" %%A in ( `tasklist /fi "imagename eq %task1%" 2^>nul` ) do goto taskkill ping 127.0.0.1 > nul 2>&1 goto tasklist :taskkill taskkill /fi "imagename eq %task2%" >nul 2>&1 start "boke" "%task3%"
あータイトルになるのね
あれ さっきまでできてたのにできなくなった excelとwordで試してみました @echo off set task1=EXCEL.EXE set task2=WINWORD.EXE set flag=1 :taskkill for /f "usebackq tokens=*" %%A in ( `tasklist /fi "imagename eq %task1%" 2^>nul ^| find /i "%task1%"` ) do (set flag=2) & taskkill /fi "imagename eq %task2%" >nul 2>&1 if %flag%. neq 2. ping 127.0.0.1 > nul 2>&1 & goto taskkill goto taskkill
OSはXPproです
バッチファイル名がtaskkillでした
あるある
ねえよ
ちょっと便乗して質問してスレチな気がするのですが .vbs Set WSHShell = CreateObject("WScript.Shell") WSHShell.Run cmd.exe /c C:\Documents and Settings\*\デスクトップ\test.bat デスクトップにあるバッチファイルを実行したいのですがうまくいきません どうしたらいいでしょうか
文字として囲んだり適切な場所を指してやったりいろいろありそうだね
>>959 WSHShell.Run "cmd.exe /c ""C:\Documents and Settings\*\デスクトップ\test.bat"""
ありがとうございます 呼び出しの時のパスの囲み方あまりわからないんです
>>962 runへはオプションまで含めて全て一つの文字列として渡してやる必要がある
で、文字列の中に「"」を入れる場合は「""」のように二つ重ねる
その結果、
>>961 がrunへ渡る文字列は下記の通り
cmd.exe /c "C:\Documents and Settings\*\デスクトップ\test.bat"
なるほど二つ重ねるのですね ありがとうございました もっと勉強してきます
SpecialFoldersというのがあってだな
cmd.exe /c はいらねーよ
洗練された書き方を教えてくれと言ってる訳じゃないんだから良いじゃん
精神的に向上心の無いやつは馬鹿だ
馬鹿はお前
複数ファイルをD&Dした時の挙動なんですけど、各ファイルは""で囲まれると 思っていたんですが違うのでしょうか。 今まで特に気にすることなく使えていたバッチが最近はパスに入っているスペースで バラバラにされて複数D&Dが全く使い物にならなくなるという事態になり困っています。 OSはwin7の64bitです。
@echo off echo %* set /a c=0 :loop if "%~1"=="" goto :end set /a c+=1 echo %c% %~1 shift goto :loop :end pause こんなバッチにa b.txtとc d.txtを複数選択でD&Dした結果 E:\test\c d.txt E:\test\a b.txt 1 E:\test\c 2 d.txt 3 E:\test\a 4 b.txt
すみません
>>970-971 は忘れて下さい。
どうも使ってるファイラーが悪さをしているみたいですorz
エクスプローラでは問題無しでした
>>970 パスに空白を含むと "" で囲む、そうでないと "" は付加されない。
call /? で引数についての説明を読むことを推奨する。
# ちょっとテストしてて気づいたが、パスに & を含むと & を
# 含んでそれ以降がバッチに渡されないな。
# 回避方法あるのかな?
>>973 パスに半角スペースを含んでいるのに""で囲まれないからおかしいって事だったんですが…
ファイラが影響しているというのは思いも寄りませんでした
ドロップハンドラを変更してんじゃね?
以下のバッチで 11 12 13 ・・・100 の文字列がlog.txtに出力されるのですが 011 012 013 ・・・ 100 というように3桁ゼロフィル出力にする方法ってありませんか? set ns=11 set ne=101 :LOOP echo %ns%>>log.txt set /a ns=ns+1 if %ns%==%ne% goto finish goto LOOP :finish
>>977 定番
3桁より大きな数をインクリメントして
下3桁ちょんぱして出力
>>977 ns=1011
ne=1101
echo %ns:~1%
>978 定石
次スレよろ
立ててくる
んで set /a ns=1000 + 011 とかしちゃって悩むんですね。
べつになやまんが?
>>984 スベったな…
まあアンタにとっては新鮮な驚きだったんだろうけどね。
>>984 挽回のチャンスをやろうか?
011みたいなケースを含め数字文字列を十進数にするバッチを書け
set ver=%1 call :DEL_LEFTZERO ver echo=%ver% pause exit /b :DEL_LEFTZERO setlocal call set str=%%%1%% :DLZ if "%str:~0,1%" == "0" ( set str=%str:~1% goto :DLZ ) endlocal &set %1=%str% exit /b
>>990 :DLZ
if "%str%" == "0" (endlocal &set %1=%str%&exit /b)
if "%str:~0,1%" == "0" (
将来的にはどうなるか分からんが現状はこれで十分 call :DEL_LEFTZERO 010 echo %errorlevel% exit /b :DEL_LEFTZERO exit /b %1
サブルーチンの終わりは goto :eof のほうが好きだな。
1行でできるものに何行かけてんだろw
うめ
さくら
たけ
おまん
こ
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。