1 名前:デフォルトの名無しさん mailto:sage [2013/07/19(金) NY:AN:NY.AN ] 拡張子が .cmd または .bat のバッチファイルのスクリプティング(プログラミング)に関わる 質問,テクニック(JScript,Perl等の埋め込みなど含む),関連情報のためのスレです。 ※何でも無理矢理バッチでやろうとせず、WSH等の使用も検討しましょう。 前スレ 【.cmd】 バッチファイルスクリプト %9 【.bat】 toro.2ch.net/test/read.cgi/tech/1335015478/ それ以前の過去スレ %8 toro.2ch.net/test/read.cgi/tech/1315844420/ %7 hibari.2ch.net/test/read.cgi/tech/1298873550/ %6 hibari.2ch.net/test/read.cgi/tech/1277465356/ %5 pc12.2ch.net/test/read.cgi/tech/1242268171/ %4 pc12.2ch.net/test/read.cgi/tech/1229955189/ %3 pc11.2ch.net/test/read.cgi/tech/1217860043/ %2 pc12.2ch.net/test/read.cgi/tech/1197881068/ %1 pc11.2ch.net/test/read.cgi/tech/1178281991/
2 名前:デフォルトの名無しさん mailto:sage [2013/07/19(金) NY:AN:NY.AN ] うんちっち
3 名前:デフォルトの名無しさん mailto:sage [2013/07/19(金) NY:AN:NY.AN ] @echo ^>^>1乙
4 名前:デフォルトの名無しさん mailto:sage [2013/07/20(土) NY:AN:NY.AN ] wshもここでええのんか?
5 名前:デフォルトの名無しさん mailto:sage [2013/07/20(土) NY:AN:NY.AN ] お前ら、wsh使ってますか? Part8
6 名前:デフォルトの名無しさん mailto:sage [2013/07/21(日) NY:AN:NY.AN ] C:\Users\user\desktop の時にdesktopだけを表示したいのですがよい方法はありませんか
7 名前:デフォルトの名無しさん mailto:sage [2013/07/22(月) NY:AN:NY.AN ] 「set /p hizuke=日付を入力して下さい:」 とやると 「日付を入力して下さい:」 と出ますが、この時に 「日付を入力して下さい:2013/07/22」 のように今日の日付をデフォルト値として表示出来ないでしょうか? 思いつきで 「set /p hizuke=日付を入力して下さい:<echo %date%」 とかやってみましたがもちろんダメでした…
8 名前:デフォルトの名無しさん mailto:sage [2013/07/23(火) NY:AN:NY.AN ] set /p hizuke="日付を入力して下さい:%date%"
9 名前:デフォルトの名無しさん mailto:sage [2013/07/23(火) NY:AN:NY.AN ] 空入力でデフォルト値 set hizuke=%date% set /p hizuke=日付を入力して下さい:%hizuke%
10 名前:7 mailto:sage [2013/07/23(火) NY:AN:NY.AN ] ありがとうございます。 ただ言い忘れていましたが、表示したデフォルト値をキーボードで変更できるようにしたいのです。 例えば2013/07/22と表示されたら最後の2を消して5にしたりといった具合にです。
11 名前:デフォルトの名無しさん mailto:sage [2013/07/23(火) NY:AN:NY.AN ] schtasksで長いタスク名を確認する方法はありますでしょうか? 例えば schtasks /create /tn "メモ帳を起動してやるぞ!こんちくしょう!" /tr c:\windows\system32\notepad.exe /sc daily /st 23:00:00 と入力して「メモ帳を起動してやるぞ!こんちくしょう!」というタスク名のタスクを作成します。 すると、 schtasks /query と入力して先ほど作ったタスクを表示させるとタスク名が途切れて表示されてしまいます。 これでは途切れていない正しいタスク名がわからず、タスクを削除する時などにタスク名を指定できません。 タスクスケジューラでもPowerShellでもいいので途切れていない正しいタスク名を確認する方法を 知っている方がいましたら教えて下さい。
12 名前:デフォルトの名無しさん mailto:sage [2013/07/24(水) NY:AN:NY.AN ] ありません
13 名前:デフォルトの名無しさん mailto:sage [2013/07/24(水) NY:AN:NY.AN ] >>11 へー最近はそんなことになってるんだねえ XPだとタスク名は欠けることなく全部出る 何かオプションスイッチがあるんでないのかなあ まあ回避手段としては、タスクの実体は(XPの場合だと)tasksフォルダ内のファイル(xxx.job)なんで直接ファイル名を漁るとかかな for /f "tokens=* delims=" %%i in ('dir /b "%systemroot%\tasks\*.job"') do echo %%~ni
14 名前:13 mailto:sage [2013/07/24(水) NY:AN:NY.AN ] ヘルプ見たら schtasks /query /fo list または schtasks /query /fo csv で表示できるんでないかな
15 名前:11 mailto:sage [2013/07/24(水) NY:AN:NY.AN ] >>13-14 /foオプションで出せるんですね。知りませんでした… "%systemroot%\tasks"フォルダに保存されるというのも初めて知りました。 これはこれで使い道が色々ありそうなので覚えておきます。 助かりました。どうもありがとうございます。 (実は家のPCはXP-Homeでschtasks無いので試すのは明日会社でですが…(笑))
16 名前:デフォルトの名無しさん mailto:sage [2013/07/24(水) NY:AN:NY.AN ] 3つの.exe ファイルが有るんですが、1つを実行するBATファイルを作りたいです どうすればいいですか?
17 名前:デフォルトの名無しさん mailto:sage [2013/07/25(木) NY:AN:NY.AN ] if
18 名前:15 mailto:sage [2013/07/25(木) NY:AN:NY.AN ] 今日会社のPC(Win7)で/foオプション使ってうまくいきました。 しかしWin7だとタスクのファイルは"%systemroot%\system32\tasks"フォルダに作成されるようです。 OSの種類によってパスが変わるなんてめんどうな仕様ですよね…(泣)
19 名前:デフォルトの名無しさん mailto:sage [2013/07/26(金) NY:AN:NY.AN ] 仕様なんだからしようがない
20 名前:デフォルトの名無しさん [2013/07/26(金) NY:AN:NY.AN BE:1441685344-2BP(0)] 僕のpcにあるテキストファイルを全てusbにコピーしたいです。 すぐにコピーしてペーストすれば使えるbatのコマンドを教えてください!
21 名前:デフォルトの名無しさん mailto:sage [2013/07/26(金) NY:AN:NY.AN ] @echo off echo pcにあるテキストファイルを全てusbにコピーしました!!! exit /b 0
22 名前:デフォルトの名無しさん mailto:sage [2013/07/26(金) NY:AN:NY.AN ] ありがとう!
23 名前:デフォルトの名無しさん mailto:sage [2013/07/26(金) NY:AN:NY.AN ] >>20 まず、ファイル名を列挙する dir /s /b > deltext.bat つぎに、ファイル名の前に、DELコマンドを付記して、バッチファイルに保存 バッチファイルを実行 バッチファイルの例 REM deltext.bat DEL C:\work\05_06_07_08.txt DEL C:\work\068.txt DEL C:\work\099.txt DEL C:\work\1.BAK DEL C:\work\1.bat DEL C:\work\1.ini DEL C:\work\1.rb
24 名前:デフォルトの名無しさん mailto:sage [2013/07/26(金) NY:AN:NY.AN ] >>20 テキストファイルかどうか、テキストエディタで開いてみないとわからない
25 名前:デフォルトの名無しさん mailto:sage [2013/07/26(金) NY:AN:NY.AN ] >>23 DELコマンドじゃなくて、COPYコマンドだ。COPYコマンドなら、どこに送るかかかなければならない
26 名前:デフォルトの名無しさん mailto:sage [2013/07/26(金) NY:AN:NY.AN ] もうねます
27 名前:デフォルトの名無しさん mailto:sage [2013/07/26(金) NY:AN:NY.AN ] 誤ってDELコマンドでファイルを削除した場合、 undeleteという英語版のソフトウェアで復旧できるかもしれない どれがいいのかしらない
28 名前:デフォルトの名無しさん mailto:sage [2013/07/26(金) NY:AN:NY.AN ] MOVEコマンドで、ひどいめにあったことがある。MOVEコマンドは、要注意
29 名前:デフォルトの名無しさん mailto:sage [2013/07/26(金) NY:AN:NY.AN ] ワイルドカードの指定が短いファイル名の方にも効いてしまう問題って Win7あたりで解消したんだっけ?
30 名前:デフォルトの名無しさん [2013/07/27(土) NY:AN:NY.AN BE:4054739459-2BP(0)] ではpc内のデータをすべて削除する場合はどうしたら?
31 名前:デフォルトの名無しさん mailto:sage [2013/07/27(土) NY:AN:NY.AN ] iso2bin.exe isoをbin 形式に変換するファイルを見つけたんですが 使い方は、 コマンドプロンプト → cd c:\場所 → iso2bin track03.bin track01.iso コマンドプロンプを呼び出さず簡略化したいんですけどどうすればいいですか? D&D しても無理みたいです・・・orz
32 名前:デフォルトの名無しさん mailto:sage [2013/07/27(土) NY:AN:NY.AN ] バッチファイル経由でD&D する
33 名前:デフォルトの名無しさん mailto:sage [2013/07/28(日) NY:AN:NY.AN ] >>29 仕様は解消したりしないよ 自分が短いファイル名を作るからだろ。自業自得ってもんだ。 作らなきゃいいんだよ。
34 名前:17 mailto:sage [2013/07/28(日) NY:AN:NY.AN ] ちょっと記述が間違ってたので一応訂正しときます。 Win7ではSchtasksで作成したタスクはファイルとして作成されないようです。 "%systemroot%\tasks"フォルダも "%systemroot%\system32\tasks"フォルダも見ましたが自分が作成したタスクは見当たりません。 "dir /s/b C:\*.job"ってコマンド叩いても出てきません。 コマンドで"Schtasks /query"を叩くともちろん出てきます そういう仕様に変わったのかな?まあ"Schtasks /query"で確認できるので困りませんが。
35 名前:デフォルトの名無しさん mailto:sage [2013/07/28(日) NY:AN:NY.AN ] ↑は>>17 ではなく>>18 でした。すみません。
36 名前:デフォルトの名無しさん mailto:sage [2013/07/28(日) NY:AN:NY.AN ] forコマンドで文字列置換はできないのでしょうか? 下記の<望む結果>を得たいのですが 下のコマンドでも駄目でした。 for /f %i in ('type test.txt') do echo %i:*:=% <test.txtの内容> ID:100 名称:あああ 価格:5000 ID:200 名称:いいい 価格:8000 <望む結果> 100 あああ 5000 200 いいい 8000
37 名前:デフォルトの名無しさん mailto:sage [2013/07/28(日) NY:AN:NY.AN ] for /f "delims=: tokens=2" %i in ('type test.txt') do echo %i
38 名前:36 mailto:sage [2013/07/29(月) NY:AN:NY.AN ] >>37 でけましたーーーっ!! おありがとうございます! このように書くのですね。 勘違いして遅延展開とかいうのを調べてました・・・(^_^;)
39 名前:デフォルトの名無しさん [2013/07/31(水) NY:AN:NY.AN ] すみません。教えてください。 <apply.bat> 中身↓ @echo off dism.exe /apply-image /image file:XXX.wim /index:1 /applydir:C:\ としておきます。 しかしこれだとバッチ内で指定するwimファイル名を決めうちにしないといけません。 コマンドプロンプトから apply.bat Image1.wim で実行すれば、バッチ内で指定されるファイル名がImage1.wimになり、 apply.bat Win7.wim ならWin7.wimが展開されるようにしたいのですが、何か良い方法はないでしょうか?
40 名前:デフォルトの名無しさん mailto:sage [2013/07/31(水) NY:AN:NY.AN ] ファイルを指定する所にこんなの "file:%~1"
41 名前:デフォルトの名無しさん mailto:sage [2013/07/31(水) NY:AN:NY.AN ] >>40 ありがとうございました! おかげさまでうまく行きました!
42 名前:デフォルトの名無しさん mailto:sage [2013/07/31(水) NY:AN:NY.AN ] >>41 いいってことよ
43 名前:デフォルトの名無しさん mailto:sage [2013/08/04(日) NY:AN:NY.AN ] バッチファイルから文字列をエコーしてファイルに流し込んで スクリプトを作成・実行ということをしているのですが、 リダイレクト先のファイル行頭にスペースができてしまいます。 echo;>%~n0.vbs Set fso = CreateObject("Scripting.FileSystemObject") echo;>>%~n0.vbs Set regEx = New RegExp echo;>>%~n0.vbs Set inFile = fso.OpenTextFile("%CD%\%~n0.txt") 中略 cscript //nologo %~n0.vbs と%~n0.vbsへ流し込むと、以下のように先頭にスペースが空きます。 □Set fso = CreateObject("Scripting.FileSystemObject") □Set regEx = New RegExp □Set inFile = fso.OpenTextFile("C:\home\work\20130804-145429\test.txt") ↑このスペース(□で表記)をなくしたいのです。 実用上は問題ありませんが、回避が可能であればご教示願いたいです。 お分かりの方居りましたらよろしくお願いいたします。
44 名前:デフォルトの名無しさん mailto:sage [2013/08/04(日) NY:AN:NY.AN ] echo Set fso = CreateObject("Scripting.FileSystemObject")>%~n0.vbs echo Set regEx = New RegExp>>%~n0.vbs echo Set inFile = fso.OpenTextFile("%CD%\%~n0.txt")>>%~n0.vbs こう? というか、そんな書き方できたんだ……
45 名前:デフォルトの名無しさん mailto:sage [2013/08/04(日) NY:AN:NY.AN ] >>44 さんできました! echo;Set regEx = New RegExp>>%~n0.vbs として解決しました。ありがとうございます。 リダイレクト方法はいくつかあるようですね。 本来ならカッコで囲んでひとまとめにするがシンプルなのでしょう。 ( echo;ほげ echo;ほげ )>"%~n0.txt この方法は今回はバッチの前後の関係から制約があるため、このような方法でやってました。 お答えいただきまして、素早い対応ありがとうございました。
46 名前:43 mailto:sage [2013/08/04(日) NY:AN:NY.AN ] >>44 さんへ 質問時に書き込んだ方法ですが、まるっきりの自己流だったようです。 参考にしたサイトを見直してみたら、全然違ってました。昔の記憶をたよりに適当に書いてたようです。 混乱させてすみませんでした。 ちなみにこのサイトです。 「全般/ファイルディスクリプタとリダイレクト - CMD.EXE TIPs」 URLが長いので上のキーワードで検索してください。有名どころですが一応。では失礼します。
47 名前:デフォルトの名無しさん mailto:sage [2013/08/04(日) NY:AN:NY.AN ] >>44 > というか、そんな書き方できたんだ…… 俺も知らんかった… で、試しにこうやってみると一応これでも行頭のスペースはなくなるな echo>%~n0.vbs Set fso = CreateObject("Scripting.FileSystemObject") echo>>%~n0.vbs Set regEx = New RegExp echo>>%~n0.vbs Set inFile = fso.OpenTextFile("%CD%\%~n0.txt") つまり>>44 はechoの直後にセミコロンとスペースが続いてからSetがあるように 解釈されてリダイレクトされてたんだろう
48 名前:デフォルトの名無しさん mailto:sage [2013/08/04(日) NY:AN:NY.AN ] > つまり>>44 はechoの直後にセミコロンとスペースが続いてからSetがあるように >>43 と間違えた
49 名前:デフォルトの名無しさん mailto:sage [2013/08/04(日) NY:AN:NY.AN ] echo.>hoge.txt とか echo;>hoge.txt ってやったら空改行が出力されるのと同じ原理なのかな
50 名前:デフォルトの名無しさん mailto:sage [2013/08/04(日) NY:AN:NY.AN ] >%~n0.vbs echo;Set fso = CreateObject("Scripting.FileSystemObject") だな
51 名前:デフォルトの名無しさん mailto:sage [2013/08/04(日) NY:AN:NY.AN ] いつからかコマンドプロンプトで日本語が■■■って表示されるようになっちゃったんですけど どうやって直せばいいんですか? ググって出てくるコードページを変えたりフォントを変えるのを試しても戻りませんでした XPです
52 名前:デフォルトの名無しさん mailto:sage [2013/08/05(月) NY:AN:NY.AN ] >>51 cmd.exeを再インストールするか諦めてCygwinとか使えばいいんじゃ? 後はWin再インスコ
53 名前:デフォルトの名無しさん mailto:sage [2013/08/05(月) NY:AN:NY.AN ] >>51 レジストリ HKEY_CURRENT_USER\Console を削除してみろ 念のためバックアップしてからね
54 名前:デフォルトの名無しさん mailto:sage [2013/08/18(日) NY:AN:NY.AN ] = を含む文字列を = を含む文字列で置換するのに良い方法無いでしょうか? 事前にIF使った総当りで入れ替えておく方法は何とかできたのですが 下記の記述方で使えそうなエスケープなどあればと思いまして。 :: A=B を B=A に置換 set test=%test:A=B=B=A%
55 名前:デフォルトの名無しさん mailto:sage [2013/08/18(日) NY:AN:NY.AN ] >>53 遅くなりましたが この方法で復活しました ありがとうございました!
56 名前:デフォルトの名無しさん mailto:sage [2013/08/18(日) NY:AN:NY.AN ] BをCに蛙 AをBに蛙 CをAに蛙
57 名前:デフォルトの名無しさん mailto:sage [2013/08/18(日) NY:AN:NY.AN ] >>56 つまり、ループ内で遅延展開を用いた入れ替えをやれってことっすね! >>54 vbsでregexpしちゃいなよ
58 名前:デフォルトの名無しさん mailto:sage [2013/08/19(月) NY:AN:NY.AN ] 頭が遅延してんの?
59 名前:デフォルトの名無しさん mailto:sage [2013/08/19(月) NY:AN:NY.AN ] >>56-57 レスどうもです、やっぱ無理ですかぁ
60 名前:デフォルトの名無しさん mailto:sage [2013/08/19(月) NY:AN:NY.AN ] power shellの話ははどこで話せばよいの? ざっと見たけどスレがないみたいなんだけど…
61 名前:デフォルトの名無しさん mailto:sage [2013/08/19(月) NY:AN:NY.AN ] Windows PowerShell Part4
62 名前:デフォルトの名無しさん mailto:sage [2013/08/28(水) NY:AN:NY.AN ] Javaみたいなコンパイルに失敗したらecho %errorlevel%で1って出力されるような言語で わざとエラーがでるコードTest.javaを用意して batファイルに javac Test.java echo %errorlevel% って書いてコマンドプロンプトから実行しても%errorlevel%が表示されません batファイルを実行した後に、手入力でecho %errorlevel%て打つと1って表示されます どうやってbatファイルからエラーレベルを出力できますか?
63 名前:デフォルトの名無しさん mailto:sage [2013/08/29(木) NY:AN:NY.AN ] うそでしょう
64 名前:デフォルトの名無しさん mailto:sage [2013/08/29(木) NY:AN:NY.AN ] echo %erorlevel% とか
65 名前:デフォルトの名無しさん mailto:sage [2013/08/29(木) NY:AN:NY.AN ] >>62 javacって使ったことないけど復帰値として値を帰さずに環境変数にセットしてるのか まあ、そういう場合の俺の知識じゃ良い解決策はない 続きは別のbatプログラムにして、当batではタスク登録して終了し、後はタスクにその別のbatを起動してもらう方法ぐらいかな (bat中から新たに子プロセスcmd.exeを起動しても引き継ぐ環境はそれを実行前の環境なのでダメだね) 例 c:\x.bat ---- javac Test.java schtasks /create /tn test-java /sc onidle /i 1 /ru user-name /rp user-password /tr c:\y.bat schtasks /run /tn test-java c:\y.bat ----- schtasks /delete /f /tn test-java 続きの処理を記述
66 名前:デフォルトの名無しさん mailto:sage [2013/08/29(木) NY:AN:NY.AN ] >>65 呼び出し元プロセスの環境変数は普通変えれんぞ。 というかタスク作ってしまったら何も情報伝わらないし、その方法意味あるんか? なんとなく、 〜( javac Test.java echo %errorlevel% ) ってなってるとか、Typoがあるとか、そういうのの方が怪しい気がする。 一番確実な対処はIF ERRORLEVEL 1とかの擬似環境変数ではない組み込み機能使って判定する方法だと思う。
67 名前:デフォルトの名無しさん mailto:sage [2013/08/29(木) NY:AN:NY.AN ] >>66 寝ぼけてたね 確かに意味が無いな これはインストーラなどでPATH環境変数が変化した場合に有効な手段だった
68 名前:67 mailto:sage [2013/08/29(木) NY:AN:NY.AN ] 寝ぼけてたけど、間違ったのは 動作確認のために、コントロールパネルのシステムからユーザー環境変数を追加設定してやってたため ↓ この場合環境変数の設定値が反映されるにはcmd.exeを起動しなおさないと反映されないので
69 名前:デフォルトの名無しさん mailto:sage [2013/08/29(木) NY:AN:NY.AN ] >>68 なるほど・・・現在の環境ではなくユーザの環境を読ませる一手間か start /Iもatもユーザの環境を読み直さないし、runasはスマートカードかパスワード入力が必要になってしまうんだな タスクはrunasと同等だし環境読み直すのも理解できるけど、エクスプローラからcmd起動したときとかはどういう挙動してんだろうコレ?
70 名前:デフォルトの名無しさん mailto:sage [2013/08/29(木) NY:AN:NY.AN ] すいませんsetlocal EnableDelayedExpansionで取得できました いまいちどうして取れたかわかりませんが
71 名前:デフォルトの名無しさん mailto:sage [2013/08/29(木) NY:AN:NY.AN ] 今時なぜコマンドプロンプトなんですか? powerShellを使わない理由はなぜでしょうか?
72 名前:デフォルトの名無しさん mailto:sage [2013/08/29(木) NY:AN:NY.AN ] >>71 コマンドプロンプトで足りるような用途にまで PowerShellを使わなきゃならん理由は何だ? まさか、自慢話を始めようとしてるのではないだろうな?
73 名前:デフォルトの名無しさん mailto:sage [2013/08/29(木) NY:AN:NY.AN ] >>70 うそでしょう
74 名前:デフォルトの名無しさん mailto:sage [2013/08/29(木) NY:AN:NY.AN ] >>73 66で指摘されてるようなやり方してたんじゃね。 「すいませんsetlocal EnableDelayedExpansion(して、%errorlevel%を!errorlevel!にしたら)で取得できました」 だと普通によくあるミス。
75 名前:デフォルトの名無しさん mailto:sage [2013/08/29(木) NY:AN:NY.AN ] >>74 すいません書き忘れてました そづえす%から!にも書き換えてます
76 名前:デフォルトの名無しさん mailto:sage [2013/08/30(金) NY:AN:NY.AN ] findstrで実行結果にファイル名を出さない方法はありますでしょうか? findstr "あああ" "C:\test.txt" とファイルを完全に指定すれば実行結果は あああいいい いあああいい いいあああい のようになって、ファイル名は出ずに一致した行の内容だけが表示されます。 しかし findstr "あああ" "C:\*.txt" のようにワイルドカード指定にすると実行結果には C:\test.txt: あああいいい C:\test.txt: いあああいい C:\test.txt: いいあああい のように一致した行の内容だけでなく、その行が含まれているファイル名まで表示されてしまいます。 これをファイル名は出さないように出来ないでしょうか?
77 名前:デフォルトの名無しさん mailto:sage [2013/08/30(金) NY:AN:NY.AN ] for %i in ("C:\*.txt") do @findstr "あああ" "%i"
78 名前:デフォルトの名無しさん mailto:sage [2013/08/30(金) NY:AN:NY.AN ] >>76 forfiles /?
79 名前:デフォルトの名無しさん mailto:sage [2013/08/30(金) NY:AN:NY.AN ] >>70 %〜%はその文字列を含むコマンドの実行前に展開されます。 何らかの書き方が原因で、javacの実行からエラーレベル取得までが1つ(1行)のコマンドとして解釈されてしまったのでしょう。 ()で括るとかもその一つ。&で繋ぐのもそれに含まれるっけ?
80 名前:デフォルトの名無しさん mailto:sage [2013/08/30(金) NY:AN:NY.AN ] type "C:\*.txt" | findstr "あああ"
81 名前:デフォルトの名無しさん mailto:sage [2013/08/30(金) NY:AN:NY.AN ] call echo %%errorlevel%%
82 名前:76 mailto:sage [2013/08/30(金) NY:AN:NY.AN ] >>77 、>>80 ありがとうございます! どちらでも出来そうですね。 来週会社で試してみますね。
83 名前:76 mailto:sage [2013/08/31(土) NY:AN:NY.AN ] >>78 すみません、見落としてました。 このコマンドは知りませんでした。 forfiles /m "C:\*.txt" | findstr "あああ" とすれば処理できそうですね。 ただPCがWinXPなのでこのコマンド自体がありません… でも勉強になりました。
84 名前:デフォルトの名無しさん mailto:sage [2013/09/01(日) 10:52:35.80 ] findstrで一文字違いまで検索結果に含めたい時スマートな記述無いでしょうか? 「いちごぱんつ」を検索して「いちのぱんつ」とか「いちごぱんだ」とかも同時に拾いたいのです
85 名前:デフォルトの名無しさん mailto:sage [2013/09/01(日) 11:53:35.40 ] ない いちごぱんつ *ちごぱんつ い?ごぱんつ いち?ぱんつ いちご?んつ いちごぱ?つ いちごぱん*
86 名前:デフォルトの名無しさん mailto:sage [2013/09/01(日) 12:01:14.09 ] findstrは複数文字列のOR検索するのに、 パイプを使わない表記方法(二重引用符で囲んでスペース区切り) があるのがUNIX系のgrepコマンドより便利だよね
87 名前:デフォルトの名無しさん mailto:sage [2013/09/01(日) 23:14:25.16 ] おお、それでOR検索してくれるのか 一行で済むならおkですありがとう
88 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 21:02:07.49 ] echo %test%
89 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 21:44:23.13 ] >>85 > *ちごぱんつ これ正規表現として構文エラーだろw まあこれに限らずどれも正規表現じゃなくてワイルドカードとして記述してるみたいだが findstrじゃワイルドカードは使えないだろwww
90 名前:デフォルトの名無しさん mailto:sage [2013/09/08(日) 13:50:51.90 ] dir /s /b "C:\windows" >> ".\a.txt" で更新中の.\a.txtを findstr "hoge" ".\a.txt" で検索してもエラーが起こることは絶対にないですよね?
91 名前:デフォルトの名無しさん mailto:sage [2013/09/08(日) 14:41:10.54 ] command.comじゃないんだからw
92 名前:デフォルトの名無しさん mailto:sage [2013/09/08(日) 18:48:49.51 ] forコマンドの/dオプションってどういう時に使うんだ? ↓の@はAのように書けば事足りると思うが? /rオプションもいまいち使いどころがわからない。 @for /d %i in ("c:\temp\*") do @echo %i Afor /f %i in ('dir /s /b /ad c:\temp') do @echo %i
93 名前:デフォルトの名無しさん mailto:sage [2013/09/08(日) 20:50:40.92 ] テキストファイルが1つあり、そのファイルの奇数行目の内容だけを表示することって可能でしょうか?
94 名前:デフォルトの名無しさん mailto:sage [2013/09/08(日) 22:01:56.01 ] >>92 それいうとfor /Dに限らずforデフォルト動作もそうだし、 dir /Sは再帰だからfor /Dと動作違う気がするんだが、 まぁそれはそれとして置いとこう。 Aの欠点 ・単純にコマンドが長い ・パイプ動作なのでcmd /U環境でないとUnicode文字が使えない ・/Sだとフルパスで冗長だし/-Sだと相対パス的に美味しくない >>93 可能だけど、処理が複雑化する予定があるなら別の言語を併用したほうが良い エスケープ周りで破綻してから再移植とかくっそダルいよ
95 名前:デフォルトの名無しさん mailto:sage [2013/09/09(月) 01:36:16.64 ] >>93 とりあえずどうやるのか興味もあるだろうから例示するが、 文字列操作は、制御文字等使えない文字が多々ありいろいろトラブルのでbatでやるのは俺もお勧めしない @echo off setlocal ENABLEDELAYEDEXPANSION set z=0 for /f "tokens=*" %%i in (data.txt) do ( rem set /a z=^^!z set /a z^^=-1 if !z! neq 0 echo.%%i ) endlocal なお遅延環境変数を使うと、さらに文字列データ所以のトラブルが増えるので 以下のようにサブルーチンにして回避することもできる(ここでデータをパラメタ渡しにするとトラブルが増える) @echo off set z=0 for /f "tokens=*" %%i in (data.txt) do set data=%%i & call :output goto :eof :output if %z%==0 echo.%data% set /a z=!z goto :eof
96 名前:デフォルトの名無しさん mailto:sage [2013/09/09(月) 15:54:39.20 ] >>92 for /r root %i in (.) >>94 えらく詳しいのー感心感心 隠しはどうする? >>95 空行はどうする? find /n /v "" data.txt で行番号を振って、奇数行だけ
97 名前:デフォルトの名無しさん mailto:sage [2013/09/09(月) 16:22:43.22 ] >>96 すげぇ上から目線で重箱つついてるが、そんなんで人生大丈夫か? >隠しはどうする? 隠しを列挙したいってケースより普通にfor /Dで済むケースのほうが多いから基本問題なし そうしなきゃ駄目な時は諦めて、欠点を潰すか無視をしてfor /Fを使えばいい 一々全部の欠点例外を潰した万能定型文で…みたいな事はアホらしいからやりたくない 妥協が許されないならハナから汎用言語でも使っとかないと只の苦行だわ >空行はどうする? それも使えない文字の一例にすぎないだろ 行番号を消す処理も必要になるし、その手の対策の積み重ねも複雑化を招く
98 名前:92 mailto:sage [2013/09/09(月) 21:15:46.13 ] >>94-95 ご回答ありがとうございます。 なるほど、Aは色々短所が目立ちますね。 実行速度も比較するのが馬鹿らしくなるほど@>>>>>>>>Aでした。 ちなみに>>93 も私ですw これも前途多難な感じなので他の方法を考えます。 なんか話が高度になってきたのでこの辺で…
99 名前:デフォルトの名無しさん mailto:sage [2013/09/11(水) 16:23:50.79 ] set の文字列置換で文字列中に含まれる=自体を置換(削除)したいのですがどうしたらよいでしょうか? set a=abc=def set a=%a:==% とやるとエラーになりますんで…
100 名前:54 mailto:sage [2013/09/11(水) 17:10:40.49 ] お、俺じゃないからね!
101 名前:デフォルトの名無しさん mailto:sage [2013/09/11(水) 17:40:47.80 ] >>99 すまんが簡単な方法が分からん set a=abc=def=ghi set n=0 set new_a= :loop call set a1=%%a:~%n%,1%% if "%a1%"=="" goto next if "%a1%" neq "=" set new_a=%new_a%%a1% set /a n+=1 goto loop :next set a=%new_a%
102 名前:デフォルトの名無しさん mailto:sage [2013/09/11(水) 18:26:47.00 ] for /f "delims== tokens=1,2" %i in ("%a%") do set b=%i%j
103 名前:101 mailto:sage [2013/09/11(水) 19:21:16.50 ] >>99 ,100 wsh(jscript)とかを併用することを考えたら? 使い捨てじゃなく将来複雑な処理が考えられるのなら後々楽になるよ 以下のはbatに埋め込んだ形になってるがxxx.jsと別ファイルにしてxxx.batから呼び出す方がいいだろう @if (0)==(0) echo off cscript //nologo /e:jscript "%~f0" <test.txt >result.txt type result.txt goto :eof @end /* WScript.Echo(WScript.StdIn.ReadAll().replace(/=/g,"")); */ var stdin=WScript.StdIn; while(!stdin.AtEndOfStream) { var data=stdin.ReadLine().replace(/=/g,""); // var data=stdin.ReadLine().replace(/(.+?)=(.+)/,"$2=$1"); //>>100 さん対応 a=bをb=aに入替 WScript.StdOut.WriteLine(data); }
104 名前:デフォルトの名無しさん mailto:sage [2013/09/12(木) 22:31:25.95 ] 通りすがりだが>>102 のでバッチリできたぞ? これ>>54 にも使えるんじゃね?
105 名前:デフォルトの名無しさん mailto:sage [2013/09/12(木) 23:23:43.17 ] >>104 取り敢えずそれで良いとしても、EOL指定とか空行とか非置換行とかメタ文字とか… 最終的には別言語併用出来るようにしたほうが楽な可能性があるって事は留意しておいても良いと思う。
106 名前:デフォルトの名無しさん mailto:sage [2013/09/13(金) 14:01:17.61 ] ある実行中のバッチファイル自身の名前は %0 で得ることが出来ますが、 実行中のバッチファイルを呼出したバッチファイルの名前を知る方法はありますか? 具体的にやりたいのは shebang の再現です。 例えば以下のように始まる perl スクリプトの拡張子を bat にしておきます。 #!/usr/local/bin/perl ここに perl スクリプトの内容 そして #!.bat という名前のこんな感じのバッチファイルをパスが通った適当なところに置いておきます。 %* ほにゃらら & exit /b こうすることでおおざっぱにではありますが schebang っぽくできると思うのですが、 このほにゃららのところをどうすればよいか思い付きません。
107 名前:デフォルトの名無しさん mailto:sage [2013/09/14(土) 05:01:55.71 ] 男は黙って D:/Perl/bin/perl.exe ほにゃらら.pl いっそのことCygwinでも入れちゃえば
108 名前:デフォルトの名無しさん mailto:sage [2013/09/14(土) 08:44:32.38 ] >>107 Cygwin も Msys も導入済みです。 だからそれらを使わないときでもそれに挙動を合わせたいというのが動機のひとつです。 また、 Perl を例に挙げましたが実際に使う言語処理系は他のものがメインです。 処理系起動時のオプションでないと切替えられない要素があるのですが、 個別に拡張子を割当てるのが煩雑になるというのが関連付けと PATHEXT を使わない理由です。 バッチファイルでやりたいのでバッチファイルスレで質問してるつもりなんですが、 他の方法を使わない理由をいちいち全部挙げてからでないと回答が出ないもんなんですか?
109 名前:デフォルトの名無しさん mailto:sage [2013/09/14(土) 09:00:40.41 ] 全部挙げてもでないかもよ
110 名前:デフォルトの名無しさん mailto:sage [2013/09/14(土) 10:01:01.37 ] プログラム類ってのは目的を達成するための手段にすぎないのだから、特定の手段に拘るだけ無駄というか。 ダメ文字の件とか色々あるし、ドンピシャなテクニックが見つからない・思いつかないなら素直に手を変えるべき。 ハッカー文化的なものだが、バッチファイルってのは手軽な分、そういう手段は問わない傾向がより強い印象。
111 名前:108 mailto:sage [2013/09/14(土) 11:44:58.17 ] ちょっと煽り気味でしたね。 すいません。 一応 C/C++ や JScript もそこそこ使えるつもりですが、呼出し元のプロセスが cmd.exe であることはわかっても、 あるバッチファイルを呼出したバッチファイルが何かということを調べる方法は見付かりませんでした。 そんなわけで「バッチファイルの機能」でどうにかなる可能性の方がまだ高いだろうと考えました。 要するに手段に拘っているわけではなく、色々と検討した結果としてバッチファイルに望みがあると思っているのです。
112 名前:デフォルトの名無しさん [2013/09/14(土) 12:28:33.75 ] 呼出し元から特定の引数渡すとかあるだろうになあ
113 名前:108 mailto:sage [2013/09/14(土) 12:31:13.55 ] >>112 要件は >>106 で述べた通りです。 可能であれば shebang 風 (完全に互換とまでは言わずとも) にしたいのです。
114 名前:デフォルトの名無しさん mailto:sage [2013/09/14(土) 13:47:04.98 ] >>113 ttp://scripting.cocolog-nifty.com/ 出来たかどうかは忘れたけど、ここでバッチの呼び出し元がどうのこうのの記事を読んだ気がする
115 名前:デフォルトの名無しさん mailto:sage [2013/09/14(土) 13:54:41.57 ] 1.bat call 2.bat "%~0" 2.bat echo 呼び出し元:%~1 exit /b
116 名前:108 mailto:sage [2013/09/14(土) 14:04:49.20 ] >>114 今回の件に役立ちそうな情報は見付かりませんでした。 https://www.google.co.jp/webhp#q=site:http%3A%2F%2Fscripting.cocolog-nifty.com++%22%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%97%E5%85%83%22 でも、面白い記事が多いですね。 紹介ありがとうございます。
117 名前:デフォルトの名無しさん mailto:sage [2013/09/14(土) 14:11:23.69 ] >>108 wshでWMI介して親プロセスのコマンドラインを取得 互換性ほしいなら他にないと思う
118 名前:デフォルトの名無しさん mailto:sage [2013/09/14(土) 14:31:30.89 ] バッチファイルで現在や親のプロセスIDを調べる。: Windows Script Programming scripting.cocolog-nifty.com/blog/2007/01/id_548f.html これをプロセスIDからコマンドラインに変えればいいじゃね?
119 名前:デフォルトの名無しさん mailto:sage [2013/09/14(土) 14:36:01.77 ] 昔のtlist.exeはppidを出してたから、これ使えばいいよ
120 名前:108 mailto:sage [2013/09/14(土) 15:17:15.13 ] 既に >>111 で述べましたが、それらの方法で得られるのはあくまでも cmd.exe を呼出したプロセスであり、 cmd.exe 内で実行されたバッチファイルの呼出し元ではありません。
121 名前:デフォルトの名無しさん mailto:sage [2013/09/14(土) 15:34:24.99 ] >>120 stackoverflow.com/questions/10087812/batch-bat-get-the-name-of-the-first-script-not-the-current-one shebang実装にはwshしか無い pastebin.com/jwAQnTef
122 名前:108 mailto:sage [2013/09/14(土) 17:05:15.57 ] >>121 すばらしい。 このスレ的にはアレですが、解決策ありがとうございます。
123 名前:デフォルトの名無しさん mailto:sage [2013/09/14(土) 22:14:15.91 ] おいおい >>108 > バッチファイルでやりたいのでバッチファイルスレで質問してるつもりなんですが、 > 他の方法を使わない理由をいちいち全部挙げてからでないと回答が出ないもんなんですか? こんなこといってたくせにそれかよ
124 名前:108 mailto:sage [2013/09/14(土) 23:13:28.98 ] >>123 出来ない理由を覆されたので問題ないです。
125 名前:デフォルトの名無しさん mailto:sage [2013/09/15(日) 01:55:19.47 ] >>121 バイナリのインストールを必要としない方法ではほぼWSHしか無いが、WMI呼べるならなんでも良いだろう。 一時ファイルにスクリプト吐いてdebugコマンドで必要な実行可能バイナリ生成して実行、とかも不可能ではない。 >>123 111で反省してたように見えたのに、なんつうかデフォでそういう人なんかね?
126 名前:デフォルトの名無しさん [2013/09/15(日) 05:59:54.41 ] 自分で考えようともしない馬鹿だからどーせすぐ死ぬだろ
127 名前:デフォルトの名無しさん mailto:sage [2013/09/15(日) 06:00:10.27 ] debugって32bitだけじゃないの
128 名前:デフォルトの名無しさん mailto:sage [2013/09/15(日) 06:56:29.77 ] >>127 debugは16bit時代の遺物だからなぁ… テキスト化したCOMファイル…もダメか。 まだ手はあると思うけど、出てこない。
129 名前:デフォルトの名無しさん mailto:sage [2013/09/15(日) 11:48:12.32 ] 現在ログインしているユーザーのユーザーフォルダを表すパスって ~ ですよね? cd ~ でそのユーザーのユーザーフォルダにいけると思ったんですができませんでした
130 名前:デフォルトの名無しさん mailto:sage [2013/09/15(日) 11:52:40.77 ] cd %USERPROFILE%
131 名前:デフォルトの名無しさん mailto:sage [2013/09/15(日) 12:02:53.19 ] >>130 /dオプション付けた方が安全だよ pushdならオプション不要だけど cd /d %USERPROFILE% pushd %USERPROFILE%
132 名前:デフォルトの名無しさん mailto:sage [2013/09/15(日) 14:41:32.93 ] >>129 節子それUnix/Linuxの話や cmd.exeでは上の通り環境変数を参照するのが良いかと %homepath%とかもある、俺は何となく字面的にこっちが好きだから使ってるだけだが
133 名前:デフォルトの名無しさん mailto:sage [2013/09/15(日) 15:19:04.82 ] @rem = '--*-Perl-*-- @perl -x -S %0 %* @goto :eof @rem ';
134 名前:デフォルトの名無しさん mailto:sage [2013/09/16(月) 19:48:22.51 ] コマンド実行時の標準出力を意図通りにechoさせる方法について質問です。 robocopyコマンドを実行すると、 Started : Mon Sep 16 09:20:17 2013 Source : C:\Users\username\Downloads\ Dest : D:\Backups\Downloads\ みたいに出力されますが、このうちのSourceとDestのパス部分のみを一行に並べて表示する方法が知りたいのです。 C:\Users\username\Downloads\ D:\Backups\Downloads\ のようにしたいのです。 試しに、 robocopy.exe "C:\Users\username\Downloads" "D:\Backups\Downloads" /MIR | findstr /I /R /C:"Source.*\\$" /R /C:"Dest.*\\$" としたところ、SourceとDestをそれぞれ一行ずつ表示する形になるだけで、目的は果たせませんでした。 それぞれのパス部分のみを一行に並べて表示する方法をお分かりの方居りましたらよろしくお願いいたします。
135 名前:デフォルトの名無しさん mailto:sage [2013/09/16(月) 19:56:19.54 ] >>134 for /Fを使ってSourceとDestを環境変数に突っ込んで後で出力する。 set /Pのプロンプト文字列(改行されない)を使うって手もあったと思うが、そこまで拘るならバッチ以外も想定したい所。
136 名前:134 mailto:sage [2013/09/16(月) 20:03:51.75 ] >>135 さん、レスありがとうございます。 for /Fコマンドで環境変数にSourceとDestをそれぞれ設定後に出力、という手順でできるんですね。 forコマンドは使ったことないので、ヘルプで調べながら挑戦してみます。 回答いただきありがとうございました。
137 名前:デフォルトの名無しさん mailto:sage [2013/09/17(火) 22:03:09.60 ] いいってことよ
138 名前:デフォルトの名無しさん mailto:sage [2013/09/19(木) 06:01:56.22 ] start X start Y start Z のように複数のショートカットをまとめて起動するbatファイルを作成したのですが これらを一斉にアクティブ、最小化、閉じるなど管理する方法はないでしょうか 起動しているものはインターネットブラウザなどです
139 名前:デフォルトの名無しさん mailto:sage [2013/09/19(木) 08:08:39.01 ] >>138 終了や強制終了は出来るけど、それ以上の操作をしたいならWSHとかもしくは操作自動化マクロとか使ったほうが良さげ。 そもそもGUIはコマンドプロンプトで操作するものじゃないし。
140 名前:デフォルトの名無しさん mailto:sage [2013/09/19(木) 08:38:19.46 ] >>139 開いた複数のウインドウをすべて終了できるのでしたら十分です 素人質問で申し訳ないですが、どのように記述するとよいでしょうか
141 名前:デフォルトの名無しさん mailto:sage [2013/09/19(木) 09:11:50.93 ] 連投すいません いろいろ調べてみましたがどうやら検討違いな質問だったようです ですがWSHを使うという情報が手に入っただけで大きな成果でした >>139 さんありがとうございました
142 名前:デフォルトの名無しさん mailto:sage [2013/09/19(木) 13:10:48.73 ] 最小化 start shell:::{3080F90D-D7AD-11D9-BD98-0000947B0257} 閉じる taskkill /im X & taskkill /im Y & taskkill /im Z
143 名前:デフォルトの名無しさん mailto:sage [2013/09/19(木) 15:56:29.64 ] >>142 解決しそうです、ありがとうござます
144 名前:デフォルトの名無しさん mailto:sage [2013/09/22(日) 19:32:24.35 ] 「for /F」って「for /f」でも動くと思うんだけど 前者の書き方をする人が圧倒的に多いよね。なんでだろ?
145 名前:デフォルトの名無しさん mailto:sage [2013/09/22(日) 19:44:50.79 ] 圧倒的かどうかは知らんが /? 見ると大文字だし コマンドによってはスイッチの大文字と小文字の区別があるものもあったりしたような コマンドではなく cuiアプリだったかも知れんが。 あと、スイッチをわかりやすくする為とかじゃないの? 俺はラベルと環境変数名だけ大文字にしてる。
146 名前:デフォルトの名無しさん mailto:sage [2013/09/22(日) 19:46:38.21 ] >>144 for /? での表示が /F になってるからでしょ。 オプション文字はたまに大文字/小文字区別することあるから...
147 名前:デフォルトの名無しさん mailto:sage [2013/09/22(日) 19:47:44.54 ] リロードせずに書いたら、被ってた... orz
148 名前:デフォルトの名無しさん mailto:sage [2013/09/23(月) 03:06:20.15 ] まあどのコマンドもヘルプ見るとオプションは大文字だけど 大抵は小文字でも動くし小文字で書く人も多い。 でもforに限ってはなぜか大文字で書く人が多めな感じはするね。
149 名前:デフォルトの名無しさん mailto:sage [2013/09/23(月) 03:11:40.02 ] >>144 そのオプションの大文字小文字の区別有無は知らないけど、 forコマンドの%%1文字変数は大文字小文字が区別されるから(震え声)
150 名前:デフォルトの名無しさん mailto:sage [2013/09/23(月) 14:46:33.35 ] 強調だろw
151 名前:デフォルトの名無しさん [2013/09/25(水) 09:30:20.92 ] すいません、質問です。 複数のファイルに記述されたログからファイル名のみを抽出作成したいのですが。 logが保管されているフォルダの中にはa.log、b.log、c.log・・・と複数のログが保管されており、 それぞれのログは(ERROR:[日付][ファイル名])というログが数百行記述されています。 このファイル名のみを抽出し、別名保存をしたいと考えております。 自分で考えたバッチ処理の内容は for %%i in (*) do ( for /f "delims=" %%A in (%%i) do echo %%A:~54 >> ..\result\%%i ) だったのですが、結果、resultの内容は (ERROR:[日付][ファイル名]):~54 となってしまいました。 (パラメータは変数のように部分抽出できない為?) このため、 for %%i in (*) do ( for /f "delims=" %%A in (%%i) do ( set B=%%A echo %B:~54% >> ..\result\%%i ) ) に変更したところ、3行目と4行目が正しく実行されませんでした。 (result\の中には何もなし。echoでつまづいてる?) どうしたらいいでしょう?
152 名前:デフォルトの名無しさん mailto:sage [2013/09/25(水) 09:45:01.39 ] for () だと変数は逐次更新はされないから、やるなら do call :sub %%A みたいに使わないとダメなんじゃないっけ
153 名前:デフォルトの名無しさん mailto:sage [2013/09/25(水) 10:38:37.03 ] >>151 >パラメータは変数のように部分抽出できない為? できない為。 >3行目と4行目が正しく実行されませんでした。 %環境変数%の展開はコマンドを読んだ時点で行われる。 「for %%i in (*) do ([改行]〜中略〜[改行])[改行])」というコマンドを解釈した時点で「%B:~54%」が展開されてしまう。 setlocalコマンドかネストしたcmd.exeで遅延展開を有効にして%環境変数%の代わりに!環境変数!形式を利用するか、 callで飛んで処理したりコマンド自体にcallを付ける等で環境変数の展開が毎回行われるようにしなければならない。
154 名前:デフォルトの名無しさん mailto:sage [2013/09/25(水) 11:31:17.13 ] %B:~54% 54てなんだ?間違ってるんじゃないのか? 日付の書式はどうなっている?[0925] とかの4文字なら %B:~14,-2% for %%i in (*) do (set A=%%i for /f "delims=" %%A in (%%i) do ( set B=%%A call :sub )) exit /b :sub >> ..\result\res_%A% echo %B:~14,-2% だがこっちのほうが簡潔だし、日付の書式の文字数が一定しない9月25日とかでも対応出来る for %%i in (*) do ( for /f "tokens=3 delims=[]" %%A in (%%i) do >>..\result\res_%%i echo %%A )
155 名前:151 mailto:sage [2013/09/25(水) 12:25:58.64 ] >>153 ありがとうございました。 callで:subに飛ばして解決できました。 >>154 54は固定長でROBOCOPYのログなんでファイル名までがそんくらいだったんです。 ありがとうございました。
156 名前:デフォルトの名無しさん mailto:sage [2013/09/26(木) 12:50:23.27 ] コマンド1 引数 コマンド2 引数 って書いてもコマンド2が実行されません コマンド1 引数 & コマンド2 引数 って書くとコマンド2は実行されますが コマンドの量が多くなると可読性が失われるので困ってます アドバイスお願いします
157 名前:デフォルトの名無しさん mailto:sage [2013/09/26(木) 13:43:32.61 ] 具体的に書けよ。 どう考えても書いたコマンドに問題があるとしか思えん。
158 名前:デフォルトの名無しさん mailto:sage [2013/09/26(木) 14:57:15.67 ] もしコマンド1がbatとかならcallで呼ぶ
159 名前:デフォルトの名無しさん mailto:sage [2013/10/02(水) 02:33:34.10 ] ipconfigコマンドを実行するとネットワークカードのIPアドレスを表示出来ますが LANケーブルを抜いた状態だと例え固定IPを設定していてもIPアドレスが表示されません。 LANケーブルが抜けていてもIPアドレスを表示できるコマンドはないでしょうか?
160 名前:デフォルトの名無しさん mailto:sage [2013/10/02(水) 02:42:23.00 ] 詳細忘れたけどnetshで見れなかったっけ
161 名前:159 mailto:sage [2013/10/04(金) 01:46:05.71 ] >>160 見れました!ありがとうございます。 IPも変えれるなんて便利ですね。
162 名前:デフォルトの名無しさん [2013/10/08(火) 15:48:55.97 ] 過去ログ漁って call で遅延展開する方法があったけど Windows7のコマンドプロンプトで動かしても、ファイルがないと言われたので さらにググって、!(びっくりマーク)でくくると遅延展開するというのを見つけて作ってみた。 経緯と中身はこっち 4桁の連番にするバッチ ttp://toro.2ch.net/test/read.cgi/avi/1319451871/612-614 > setlocal enabledelayedexpansion っていうのを入れないとただの文字として扱われてたからいるよね。 なんていうか、 <イレル 「考えすぎでしょうか」 人がすんなりできる事をいちいち詰まってドツボに嵌る人生なんだなって。
163 名前:デフォルトの名無しさん mailto:sage [2013/10/08(火) 21:25:21.54 ] すまん、よく分からんのだが %の展開を2回するのを遅延展開というのか?
164 名前:デフォルトの名無しさん mailto:sage [2013/10/08(火) 21:47:56.12 ] >>163 2回というか、2重? 遅延展開は %%変数%% でも !変数! でもいいらしい。 「!」が使えるのはNT系だけど、いまどき 9x で新規バッチなんて作らないだろうし。 ちなみに今 call と %%変数%% でやってみたらできました。 %%変数%% を使う場合でも > setlocal enabledelayedexpansion ってのを入れないといけなかったんですね。
165 名前:デフォルトの名無しさん mailto:sage [2013/10/08(火) 21:51:55.29 ] > %%変数%% を使う場合でも > > setlocal enabledelayedexpansion > ってのを入れないといけなかったんですね。 そんなことはない あと全角キモいからやめろ
166 名前:デフォルトの名無しさん mailto:sage [2013/10/08(火) 21:56:12.27 ] >>165 でも、エラーになるんですけど。ちなみにWindows7です。 call 使わなかったら %変数% っていう文字として処理されるし。
167 名前:デフォルトの名無しさん mailto:sage [2013/10/08(火) 21:57:06.50 ] call %%hoge%% のパターンは遅延展開とは言わん
168 名前:デフォルトの名無しさん mailto:sage [2013/10/08(火) 22:00:33.51 ] >>163 二段展開してて、その二段目がcall実行のタイミングに遅延展開してるってことにはなると思うが。 @set A=0 & for /L %%i in (0,1,4) do @( set /A A=A+1 call echo %%A%% ) バッチファイルでならちゃんと「1」「2」「3」「4」「5」になるよ。 ただ、プロンプトではパース時に展開されてそれっきりで二段展開すらされない。 プロンプトとバッチファイルでパース動作が違ったりとか、 状況によってクセのあるパースや展開されたりとか、 ダメ文字やエスケープの不備とか…バッチやシェルスクリプトのこういう所は嫌いというか苦手だわ…
169 名前:デフォルトの名無しさん mailto:sage [2013/10/08(火) 22:04:55.44 ] >>162 callダメなのか? set /a R=10000 for /f "tokens=*" %%S in ('dir /on /b *.png') do ( call ren "%%S" %%R:~1%%.png set /a R+=1 ) で動かないのかな? あと下2行目どういう意味?
170 名前:デフォルトの名無しさん mailto:sage [2013/10/08(火) 22:10:15.72 ] 遅延展開は見えないが %多段展開は echo on で見えるだろ
171 名前:162 mailto:sage [2013/10/08(火) 22:22:17.12 ] >>169 >>168 さんのは動きました。 すいません。 もしかしたら別のところで引っかかってたのかも。 ファイル名の後ろにつなげようとして %%~nS とか使ったときに、 変更前のファイル名のほうでやっちゃってエラーが出たりしたので、それと混同したのかも。 「!」の方はそれだけだと文字扱いでしたが。 「<イレル」は校正のやり方 今ちょっと微妙にマイナーなライトノベル作家のスレに常駐してるので。 ちょっとしたジョーク。
172 名前:デフォルトの名無しさん mailto:sage [2013/10/08(火) 22:33:22.21 ] >>171 アチコチの情報を漁るのも良いけど、ヘルプをまずちゃんと読んだほうが良い 体系的な知識が得られるので それから、コマンドヘルプも活用できる 今回の遅延環境変数(!)の話なら set /?
173 名前:デフォルトの名無しさん mailto:sage [2013/10/08(火) 23:00:54.42 ] >>169 > call ren "%%S" %%R:~1%%.png 一回展開で(forループ開始時)、「%%」→「%」 > call ren "%S" %R:~1%.png forの引数置換で、「%S」→「〜.png」 > call ren "〜.png" %R:~1%.png callの解釈で、「%R:~1%」→「環境変数Rの2文字目(オフセット1)以降」→「0000」 > ren "〜.png" 0000.png んで、 > set /a R+=1 はRの下4桁のインクリメント目的で、Rに1を足してRに格納する。 初回は「%R:~1%」が「10000」の2文字以降で「0000」 次回は「%R:~1%」が「10001」の2文字以降で「0001」…と続く。 まぁ詳しくは>>172 set、for、call辺りの/?は読んどくと良い。 cmdとsetlocalとstartあたりも為になる。
174 名前:デフォルトの名無しさん mailto:sage [2013/10/09(水) 00:01:34.13 ] >>173 解説ご苦労様と言いたい所ですが169さんは質問者じゃないと思いますよーwww
175 名前:デフォルトの名無しさん mailto:sage [2013/10/09(水) 00:26:11.37 ] >>174 ・・・ああ、色々盛大に勘違いしてたorz
176 名前:デフォルトの名無しさん mailto:sage [2013/10/09(水) 11:15:09.65 ] >>168 call echo %^A% ってやればプロンプト入力でもいける
177 名前:デフォルトの名無しさん mailto:sage [2013/10/12(土) 02:48:38.73 ] とあるファイルの、フルパスでなく、属する直上のフォルダ名を取得する方法を教えてくだちい
178 名前:デフォルトの名無しさん mailto:sage [2013/10/12(土) 03:23:16.89 ] for %%A in ("%~1\..") do echo %%~nxA pause
179 名前:デフォルトの名無しさん mailto:sage [2013/10/12(土) 03:40:49.43 ] おおすごい! \..の部分で階層一つ上げてるってわけですかね? サンキュウベリーマッチョ!
180 名前:デフォルトの名無しさん mailto:sage [2013/10/12(土) 15:44:17.94 ] for %%A in ("%~dp1\.") do echo %%~nxA pause
181 名前:デフォルトの名無しさん mailto:sage [2013/10/23(水) 00:20:20.38 ] set rtn = %errorlevel% exit rtn ↑のようなコードを見たことあるんだけど、2行目は「exit %rtn%」になるんじゃないの?
182 名前:デフォルトの名無しさん mailto:sage [2013/10/23(水) 00:32:50.68 ] なことはない
183 名前:デフォルトの名無しさん mailto:sage [2013/10/23(水) 00:45:33.68 ] 今試したけど、それ無効(errorlevel値に影響しない)になってると思われる batのerrorlevelは別にexitで値を返さなくても返されるので まあ意図したようには動作するけど dir z: (存在しないドライブ名) set abc=9 exit abc と exit %abc% で試せば分かると思う
184 名前:181 mailto:sage [2013/10/23(水) 02:02:48.29 ] >>183 試してみたらやはり「exit %abc%」の書き方が正解みたいですね。 自分が見たサンプルはたまたまうまくいってただけっぽい… 勉強になりました。ありがとうございます。
185 名前:デフォルトの名無しさん mailto:sage [2013/10/23(水) 02:08:18.01 ] いや、だからexitに数値指定なしだとbatでのerrorlevel値がそのまま帰るんだよ 多分exitは数値じゃなかったらパラメタは無効にするんだと思う だから set rtn = %errorlevel% exit rtn この2行と exit とは等価となってる
186 名前:デフォルトの名無しさん mailto:sage [2013/10/23(水) 03:22:37.39 ] 等価って書いたけど間違っているかも知れない exitだけだと 受け側がbat以外のプログラムだったら復帰値として errorlevel値が帰らないかもしれない(未確認)
187 名前:デフォルトの名無しさん mailto:sage [2013/10/31(木) 10:53:34.17 ] cleanmgr /c c: /sageset:1 cleanmgr /c d: /sageset:2 これをbatファイルから実行しても1行目しか実行されません CドライブとDドライブのディスクノクリーンアップが出来ればOKなんですが 何か良い方法ありませんか?
188 名前:デフォルトの名無しさん mailto:sage [2013/10/31(木) 13:30:06.76 ] バッチファイルはその行の処理が終了しないと次の行に行かないので この場合Cのクリーンアップが終了するまでDのクリーンアップは起動しない。 そしてcleanmgrは複数同時起動しないのでCとDのクリーンアップを同時に行うのは無理。 ちなみにわかってるとは思うけどsagesetはオプション設定で実際のクリーンアップはsagerunね。
189 名前:デフォルトの名無しさん mailto:sage [2013/10/31(木) 13:37:56.80 ] 設定用バッチファイル cleanmgr /c c: /sageset:1 cleanmgr /c d: /sageset:2 実行用バッチファイル cleanmgr /sagerun:1 cleanmgr /sagerun:2 こういうふうに分けて書いてたんです 設定は1度きりしか行わないのでc. batとd.batに分けて実行することにします PCから離れている間にディスクノクリーンアップを行いたいので、 実行はCとDの二つのドライブをコマンドプロンプトから一回の呼び出しで行うにはどうしたらいいでしょうか?
190 名前:デフォルトの名無しさん mailto:sage [2013/10/31(木) 14:52:42.78 ] バッチの問題じゃなくてソフトの問題だってレスしてくれてるじゃないの。諦めよう
191 名前:デフォルトの名無しさん mailto:sage [2013/10/31(木) 15:44:51.93 ] わかりました
192 名前:デフォルトの名無しさん mailto:sage [2013/10/31(木) 16:00:50.32 ] 試してないけど、終了してないから2回目が起動できないのなら終了させちゃえば良いのでは? cleanmgr /c c: /sageset:1 taskkill /f /fi "imagename eq cleanmgr.exe" cleanmgr /c d: /sageset:2
193 名前:デフォルトの名無しさん mailto:sage [2013/10/31(木) 17:04:28.22 ] >>192 それtaskkillが実行される時はcleanmgrが終了した時だから意味なくない?
194 名前:デフォルトの名無しさん mailto:sage [2013/11/04(月) 07:58:59.84 ] Windowsのコマンドラインで、文字列の最後尾に0x00のNULL文字を追加した文字列を 任意の変数にセットする方法を教えて下さい abcd0x00 abcdの後に0x00が1つの合計5文字
195 名前:デフォルトの名無しさん mailto:sage [2013/11/04(月) 09:17:14.82 ] バッチファイルでバイナリ文字列扱うとか無謀すぎると思う 変態という名の神々が戯れにやる類の仕事ではなかろうか
196 名前:デフォルトの名無しさん mailto:sage [2013/11/04(月) 09:53:28.74 ] 常識ある組織なら、然るべきスクリプト言語を使わせるだろう。 「Windows標準でないからNG」とか喚くような所なら、さっさと辞めるが吉。
197 名前:デフォルトの名無しさん mailto:sage [2013/11/04(月) 10:52:17.85 ] Windows標準ならWindows Script Hostがある
198 名前:デフォルトの名無しさん mailto:sage [2013/11/04(月) 14:23:05.50 ] >>194 未検証だけどバイナリエディタで0x00の1バイトファイル作っておいて、 typeコマンドで当該ファイルを変数に流し込めばいけるかも
199 名前:デフォルトの名無しさん mailto:sage [2013/11/04(月) 16:18:35.24 ] >>198 「バイナリエディタはWindows標準でないから使用はNG」とw
200 名前:デフォルトの名無しさん mailto:sage [2013/11/04(月) 22:31:52.59 ] 真面目にやるならdebugコマンドだが、最近のWindowsには付属してないんだよなぁ・・・
201 名前:デフォルトの名無しさん mailto:sage [2013/11/05(火) 05:31:31.99 ] >>200 command.com削除されたの?
202 名前:デフォルトの名無しさん mailto:sage [2013/11/06(水) 00:43:53.39 ] >>201 16ビットのエミュレーション機能が消えて同時に消えたとか聞いた気が。 ちゃんと調べたりしたわけじゃないんで間違ってたらすまん。
203 名前:デフォルトの名無しさん mailto:sage [2013/11/06(水) 07:43:02.29 ] スクリプトは使用したくないのであれば下記のバッチファイルを使用する。 @echo off empty.exe * ファイル(F) --> 名前を付けて保存(A)をクリックする。 ファイル名(N) で 必ず ダブルコーテーション でファイル名をくくってください。 バッチファイルは "メモリ開放.bat" ってあるんですけど、「必ず ダブルコーテーション でファイル名をくくってください」 ってのは何で?他のサイトだと普通にempty.batとかで保存していいみたいなんだけど
204 名前:デフォルトの名無しさん mailto:sage [2013/11/06(水) 08:34:57.76 ] 拡張子が.bat.txtにならないようにだろ ていうかそのサイトで聞け
205 名前:デフォルトの名無しさん mailto:sage [2013/11/06(水) 22:00:57.93 ] メモリ開放!
206 名前:名無しののVBS [2013/11/09(土) 05:27:27.39 ] ””って拡張子修正用と言ってたような気がする
207 名前:デフォルトの名無しさん mailto:sage [2013/11/10(日) 12:23:41.42 ] vimのコマンド作って便利になった
208 名前:デフォルトの名無しさん mailto:sage [2013/11/13(水) 00:21:19.77 ] <"C:\TEST1.bat"の内容> C:\TEST2.bat notepad <"C:\TEST2.bat"の内容> mspaint 上記2つのファイルがある時にコマンドプロンプトから"C:\TEST1.bat"と入力してエンター押すと ペイントは起動するのですが、メモ帳が起動しません。 メモ帳も起動させたい場合はどのように記述すればよいのでしょうか?
209 名前:デフォルトの名無しさん mailto:sage [2013/11/13(水) 00:29:29.94 ] >>208 batからbatを起動すると制御が起動したbatに移動し元には戻ってこない(ジャンプってこと) mspaintが終了するまでnotepadを起動しなくて良いのなら call test2.bat 同時に起動するなら start test2.bat
210 名前:デフォルトの名無しさん mailto:sage [2013/11/13(水) 00:59:19.52 ] >>209 制御が戻ってこないとは知りませんでした… callでバッチリうまくいきました。 ありがとうございます!
211 名前:デフォルトの名無しさん mailto:sage [2013/11/14(木) 00:20:01.44 ] callとcmd /c、startとcmd /kはどう違うの?
212 名前:デフォルトの名無しさん mailto:sage [2013/11/14(木) 00:29:35.43 ] メインメモリの空き容量が・・・
213 名前:デフォルトの名無しさん mailto:sage [2013/11/17(日) 16:52:32.11 ] 気にしない
214 名前:デフォルトの名無しさん mailto:sage [2013/11/19(火) 22:18:06.13 ] シェルスクリプトのスレ誘導してくれ
215 名前:デフォルトの名無しさん mailto:sage [2013/11/20(水) 09:23:01.58 ] >214 ↓悪いが、ここから適当に見て回ってもらうしかない。 【最強CUI】PowerShell -Part 1 ttp://toro.2ch.net/test/read.cgi/tech/1378978504/ VBScriptについて必死に話し合うスレ ttp://toro.2ch.net/test/read.cgi/tech/1242136180/ [JavaScript] スクリプト言語34 [Perl,Python,PHP] ttp://toro.2ch.net/test/read.cgi/tech/1367771981/ ECMAScript デス 4 ttp://toro.2ch.net/test/read.cgi/tech/1325448978/ 【JavaScript】スクリプト バトルロワイヤル40【pl,rb,php,py】 ttp://toro.2ch.net/test/read.cgi/tech/1379350030/ コマンドプロンプト ttp://toro.2ch.net/test/read.cgi/win/1381119881/ お前ら、wsh使ってますか? Part8 ttp://toro.2ch.net/test/read.cgi/win/1292764835/ Windows PowerShell Part4 ttp://toro.2ch.net/test/read.cgi/win/1359719778/
216 名前:デフォルトの名無しさん mailto:sage [2013/11/20(水) 17:39:56.64 ] シェルスクリプトってバッチファイルよりは強力だしスレ無いわけが・・・ で、shだと誤爆が多そうだしcshで探したらこんなのが。 C shell 撲滅委員会 toro.2ch.net/test/read.cgi/unix/1094041299/ それはさておき、まぁ当然だけどUNIX板いくだけで一発だな。 シェルスクリプト総合 その22 toro.2ch.net/test/read.cgi/unix/1383260330/
217 名前:デフォルトの名無しさん mailto:sage [2013/11/20(水) 23:17:41.18 ] >>215 >>216 やっぱりここで聞いてよかった ありがとな
218 名前:デフォルトの名無しさん mailto:sage [2013/11/29(金) 04:55:52.45 ] zion009.blog98.fc2.com/blog-entry-50.html こちらをバッチにしてD&Dするとtsファイルが0キロバイトで出力されます 私が間違っているのでしょうかサイト側のミスなのでしょうか
219 名前:デフォルトの名無しさん mailto:sage [2013/11/29(金) 06:24:38.80 ] >>218 まずvlcに直接喰わせたときに、そのファイルはちゃんと出力されるのか? 話はそれからだ
220 名前:218 mailto:sage [2013/12/05(木) 10:45:55.06 ] 今更ながらコピーしたのをサクラでペーストし、後ろの半角スペースを削除したら正常に出力されるようになりました
221 名前:デフォルトの名無しさん mailto:sage [2013/12/05(木) 22:58:16.73 ] 教えてください 既定のzipの関連付けは確か >assoc .zip .zip=CompressedFolder だったと思うんだが、いつの間にか >assoc .zip 拡張子 .zip のファイルの関連付けが見つかりません になってしまっていた。しかし、 >start a.zip で圧縮(zip)フォルダが起動する。 なぜだ?
222 名前:デフォルトの名無しさん mailto:sage [2013/12/05(木) 23:13:19.79 ] てめえの既定など知らんわ そもそも関連付けはマシーンではなくペルソナにメガ進化している
223 名前:デフォルトの名無しさん mailto:sage [2013/12/05(木) 23:30:56.75 ] .zip=CompressedFolder はWindows8の既定
224 名前:デフォルトの名無しさん mailto:sage [2013/12/06(金) 00:04:52.50 ] .cabや.lzhも同じような… assocは何の意味があるのか
225 名前:デフォルトの名無しさん mailto:sage [2013/12/07(土) 15:01:02.16 ] コマンドでビープ音を出すことは出来ますか? 可能ならスピーカーがミュートになっていても音を出したいのですが 無理ならスピーカーからでも良いので何らかの音が出せれば良いです。
226 名前:デフォルトの名無しさん mailto:sage [2013/12/07(土) 15:16:00.81 ] >225 例:コマンドプロンプト画面で以下のように打ち込むと、Cドライブのルートフォルダに"Beep1.bat"ができる。 それを実行するとビープ音が一回鳴る。 (※「^G」と表記した箇所では、実際には[Ctrl]+[G]を押す事。これによりアスキーコード7が入力される) echo @echo ^G > C:\testBeep.bat
227 名前:226 mailto:sage [2013/12/07(土) 15:26:39.33 ] 例として挙げたファイル名をうっかり書き間違えた。orz とにかく"C:\testBeep.bat"なら"C:\testBeep.bat"を実行すればOKって事で アスキーコード7は元々ビープ音を鳴らす為の制御コードだが、PCによっては ヘッドホンを繋いでるとヘッドホンからしか聴こえない場合もあるから注意。 こればかりは実際どうしようもない。
228 名前:デフォルトの名無しさん mailto:sage [2013/12/07(土) 22:15:40.57 ] Windows7以降はビープ鳴らせないんじゃなかったっけ
229 名前:デフォルトの名無しさん mailto:sage [2013/12/08(日) 00:27:54.07 ] コマンドプロンプトでCtrl+Gじゃなくて普通にキーボードから「^G」って打ってエンター押したら いきなりIEが立ち上がってGoogleで"undefined"を検索した状態になってすげえびっくりした。 なんなんだこりゃ?
230 名前:デフォルトの名無しさん mailto:sage [2013/12/08(日) 05:21:11.98 ] 私のWindows7(Pro)64bitでは、ちゃんと>>226 の方法でビープ音が鳴るよ。 [Ctrl]+[G]を2回続けた場合はビープ音も2回鳴る。
231 名前:デフォルトの名無しさん mailto:sage [2013/12/08(日) 05:52:09.63 ] すみません、スクリプト初心者で色々と試行錯誤の上、ちょっとハマってしまったので教えて頂けないでしょうか。 やりたいことは以下の処理が出来るバッチファイル(check.bat)を作りたいのです。
232 名前:231 mailto:sage [2013/12/08(日) 05:55:24.55 ] (1)A)のコマンドを実行し、その結果に「kdb106.dll」という文字列があれば(2)の処理に進む、無ければ何もせずバッチ処理終了 ↓ (2)B)のコマンドを実行し、その結果に「PCAT_106KEY」という文字列があれば(3)の処理に進む、無ければ何もせずバッチ処理終了 ↓ (3)「check.bat」と同じディレクトリにある「update.bat」を実行し、処理終了。 ※「update.bat」はちゃんと動くものが用意されています
233 名前:デフォルトの名無しさん mailto:sage [2013/12/08(日) 06:32:28.13 ] (1)set a = A | findstr kdb106.dll if %errlvl% (2)set b = B | 略 (3)update.bat こんな感じだけど記述は適当です 何にハマったのか気になります どこまで出来たのか気になります たぶん何もしてなくて丸投げなんだろう と思いますがいかがですか
234 名前:デフォルトの名無しさん mailto:sage [2013/12/08(日) 06:33:34.38 ] (cmd && cmd)ってbatで出来たっけshellだけだっけ
235 名前:231 mailto:sage [2013/12/08(日) 06:39:58.20 ] >>233 さん 早速ありがとうございます。 A)のコマンドというのは、reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\i8042prt\Parameters /v "LayerDriver JPN" になり、 実行すると以下のように2行で結果が出力されます。 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\i8042prt\Parameters LayerDriver JPN REG_SZ kbd106.dll この出力を変数に入れてやり、findstrで特定の文字列があるかどうかをやりたいのですが、 うまく変数に入ってくれないのです。すみません。。。
236 名前:231 mailto:sage [2013/12/08(日) 07:34:38.47 ] for /f "usebackq tokens=*" %%i in (`reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\i8042prt\Parameters /v "LayerDriver JPN"`) do @set A=%%i echo %A% |findstr "kbd106.dll" でとりあえず、kdb106.dllを含む行のみechoで表示させることが出来ました。 ここからなのですが、このキーワードを含む場合は「goto test1」、 含まない場合は「goto test2」にしたいのですが、 IF文をどう使えばいいでしょうか?たびたびすみません。
237 名前:デフォルトの名無しさん mailto:sage [2013/12/08(日) 08:03:45.96 ] >>236 forコマンドでは、複数行の入力があると、一行ずつコマンドを繰り返し実行するので複数行をまとめて入力とかできない それだと最後の行のみのデータが環境変数Aにセットされるだけ こういう場合、一旦結果を中韓ファイルに格納するか、パイプ渡しする reg query xxx | findstr "str" 次にfindstrの結果ヒットしたかどうかはerrorlevelに格納される ヒットしたら=0 そうでなかったら=1(またはそれ以上の値でエラー値はwindowsの種類により異なる) 色々実行してみて、echo %errorlevel%で値を見てみればいい if errorlevel 1 goto :not_find ヒット処理 goto :eof :not_find ノーヒット処理
238 名前:デフォルトの名無しさん mailto:sage [2013/12/08(日) 08:16:23.14 ] 訂正 パイプ渡しでへたに空白は入れない方が余計なミスを発生させない(後には空白を入れてもいい) reg query xxx| findstr "str" あと実行結果をコンソールに表示したくない場合出力をnulデバイスにリダイレクトする findstr "xxx" >nul 又は findstr "xxx" 1>nul 標準出力だけでなくエラー出力も表示させたくない場合は findstr "xxx" >nul 2>&1
239 名前:デフォルトの名無しさん mailto:sage [2013/12/08(日) 08:24:01.85 ] あと、そもそも環境変数に複数行データを格納することは出来ない
240 名前:231 mailto:sage [2013/12/08(日) 08:35:19.32 ] >>237 さん 情報ありがとうございます!! errorlevelで判別し、分岐処理させることが出来ました。 これでうまく作れそうです。 本当にありがとうございました!!
241 名前:231 mailto:sage [2013/12/08(日) 08:40:10.36 ] >>238-239 追加情報もありがとうございます。 微調整するようにしますね!
242 名前:デフォルトの名無しさん mailto:sage [2013/12/08(日) 10:11:55.42 ] >>230 ビープとはビープスピーカー(PC本体に付いてる奴)を鳴らすってことであって 音声出力のスピーカーから鳴る奴は違う。
243 名前:デフォルトの名無しさん mailto:sage [2013/12/08(日) 13:25:43.57 ] >>228 >>242 マザボにビープスピーカーが無い場合、XP以前でもサウンドスピーカーで代用ビープが鳴ってなかったか?
244 名前:デフォルトの名無しさん mailto:sage [2013/12/08(日) 15:11:24.99 ] 代用ビープってなんかワロタw 昔飲んだ代用コーヒーを思い出した…
245 名前:デフォルトの名無しさん mailto:sage [2013/12/10(火) 16:30:03.46 ] ファイルのタイムスタンプの時間の変更方法を教えてください。 日付ですと、以下のように一旦変数に入れて戻すことで可能ですが、時間の場合この方法は使いづらいのです。 set NOWDATE=%DATE% date 2000-01-01 copy /B "hoge.txt" + date %NOWDATE% 外部ツールを使わない方法を模索しております。よろしくお願いいたします。
246 名前:デフォルトの名無しさん mailto:sage [2013/12/10(火) 22:44:13.91 ] scriptかpowershell
247 名前:245 mailto:sage [2013/12/10(火) 23:15:11.36 ] >>246 スクリプトですね、調べてやってみたいと思います。 レスありがとうございました。
248 名前:デフォルトの名無しさん mailto:sage [2013/12/10(火) 23:20:30.23 ] 内部ツール生成は? setlocal for /D %%i in (%windir%\Microsoft.NET\Framework\v*) do path %%i;%path% echo import System.IO; File.SetLastWriteTime("aaa.txt", "1/1/2011 12:56:30");>aaaaa.js jsc.exe aaaaa.js aaaaa.exe del aaaaa.js del aaaaa.exe
249 名前:デフォルトの名無しさん mailto:sage [2013/12/14(土) 11:20:53.30 ] 非常に基礎的なことだと思うのですが・・・ <a.bat> @echo off start /wait b.bat echo %time% >a.txt exit <b.bat> @echo off echo %time% >b.txt ping -n 3 localhost >NUL exit で、b.txtが出力された約2秒後にa.txtも出力される事がわかりました。 要は、あるバッチを実行し、別のバッチを呼び出しそのバッチ処理が終わればまた元にバッチに戻り処理をするという 形にしたいのです。(シャットダウンスクリプト) このa,bをグループポリシーのシャットダウンスクリプトに仕込むと、 何故か既定の15分のタイムアウトまでシャットダウンプロセスで止まってしまい、 結果のtxtファイルも出力されません。 ちょっとわかる方いらっしゃいましたらアドバイス頂けないでしょうか?
250 名前:デフォルトの名無しさん mailto:sage [2013/12/14(土) 12:07:14.89 ] シャットダウン中ってプロセスの起動制限無かったっけ? startの代わりにcallじゃいかんのか?
251 名前:249 mailto:sage [2013/12/14(土) 14:59:03.80 ] >>250 ありがとうございます。 <a.bat> @echo off call b.bat echo %time% >a.txt exit <b.bat> @echo off echo %time% >b.txt ping -n 3 localhost >NUL に変更し、aからbをcallで呼び、bのexitを取りました。 通常時ではa.batを実行すると、2つのtxtを吐いてくれます。 a.batをシャットダウンスクリプトに仕込み、gpupdate /forceで反映、 シャットダウンすると、すぐにシャットダウンされるのですが、 再起動後にtxtは吐かれていませんでした。。。 別プロセスbを呼べないのは分かるのですが、せめてa側のtxtが吐かれていないのと 納得出来ないんです。 うーん、、、複雑だなぁ。
252 名前:デフォルトの名無しさん mailto:sage [2013/12/14(土) 15:38:47.70 ] >>251 念のために確認するけど a.txtとかb.txtって実際にはフルパス指定してる? それか、先頭に pushd %~dp0 を書いてみれば?
253 名前:252 mailto:sage [2013/12/14(土) 15:54:57.38 ] 上のレスは無視してくれ カレントはscriptの位置になってるようだ アクセス権の問題かとも思ったけどSYSTEMはフルになってるし(まあ念のために確認してみて) でもscriptフォルダに余計なファイルを書くことはお勧めできないので 別に用意してそっちに書くようにすてはどうか? ちなみにlogoff scriptでexeを起動するなんてことは 俺はやっているしログファイルも作成してるんで出来ないことはないはず
254 名前:252 mailto:sage [2013/12/14(土) 15:57:28.16 ] ↑ logoff scriptはshutdown scriptと読み替えてくれ
255 名前:デフォルトの名無しさん mailto:sage [2013/12/14(土) 16:03:39.04 ] a→b→a としたいなら、 bに exit /B を付けてaに処理が戻るようにしてみては。
256 名前:デフォルトの名無しさん mailto:sage [2013/12/14(土) 16:08:45.97 ] exit /? を参照ね。 終了コードを付加することで、戻ったバッチ側で判定して分岐なんかの処理もできる。
257 名前:249 mailto:sage [2013/12/14(土) 16:10:10.68 ] >>255 ありがとうございます!! とりあえず、 <a.bat> @echo off pushd %~dp0 start /wait b.bat echo %time% >a.txt exit <b.bat> @echo off pushd %~dp0 echo %time% >b.txt ping -n 3 localhost >NUL popd exit で、ちゃんとカレントディレクトリにa.txt、b.txtをシャットダウンスクリプト時に 吐いてくれるようになりました!!! ちょっとexit /Bも試してみるようにしますね。 ちなみに、各バッチのSYSTEMの権限はフルでした。
258 名前:249 mailto:sage [2013/12/14(土) 16:28:01.79 ] ちなみに start /waitでb.bat開始せず、callする場合は これで行けました! アドバイス頂いたようにb.bat側のexitに/Bをつけるのがポイントのようです。 また、絶対パスを指定せず、カレントディレクトリでやる場合 「pushd %~dp0」も付けておくことが必要だとわかりました。 ありがとうございました!! <a.bat> @echo off pushd %~dp0 call b.bat echo %time% >a.txt exit <b.bat> @echo off pushd %~dp0 echo %time% >b.txt ping -n 3 localhost >NUL popd exit /B
259 名前:デフォルトの名無しさん mailto:sage [2013/12/14(土) 23:07:19.91 ] で、 >>249 が動かない理由は解決した? もしかしてフルパスで↓だと終わらないぞ start /wait "c:\b.bat"
260 名前:デフォルトの名無しさん mailto:sage [2013/12/15(日) 00:53:06.53 ] >>249 状況から見てb.batが見つからないからエラーが出て止まってるだけだろ 試しにa.bat内のsart /wait c.bat に変えて通常実行してみりゃ、 'c.bat'がみつかりません。とかのメッセージボックスが出て止まったままになるしさ
261 名前:デフォルトの名無しさん mailto:sage [2013/12/15(日) 01:26:41.08 ] vol c: | findstr /C:シリアル番号 で出てきたシリアル番号だけを抜き出して表示したいのですが どうすりゃ良いか教えてください
262 名前:デフォルトの名無しさん mailto:sage [2013/12/15(日) 01:57:08.69 ] for /F "tokens=3" %i in ('vol c: ^| findstr /C:シリアル番号') do @echo %i
263 名前:249 mailto:sage [2013/12/15(日) 04:16:05.52 ] >>259-260 アドバイスありがとうございます!! よくよく見てみたらおかしかったです。
264 名前:デフォルトの名無しさん mailto:sage [2013/12/15(日) 11:15:41.61 ] batでプログラムを作っているのですが、 start... start... で別のプログラムをいくつか同時起動してそれらが全てが自動終了したときに 次の処理に進みたいのですが、こんな判定ってできますか?
265 名前:デフォルトの名無しさん mailto:sage [2013/12/15(日) 11:35:21.71 ] どっかに動作中を示すファイル作っておいて定期的に存在のチェック って方法をやってるけど、そういう用途のコマンドとかコンソールアプリあるなら俺も知りたいな まぁ、そこまでやるなら...って話はもちろんわかるけども。
266 名前:デフォルトの名無しさん mailto:sage [2013/12/15(日) 12:34:59.25 ] notepad | notepad | more
267 名前:デフォルトの名無しさん mailto:sage [2013/12/15(日) 12:58:15.28 ] 横だけどこれってどういう仕組みなの? パイプが出力を次のコマンドに渡すやつだってことはわかるけど、 notepadは何も渡さないとして、なんでmoreで止まるの?
268 名前:デフォルトの名無しさん mailto:sage [2013/12/15(日) 13:17:11.71 ] こんな感じかな、 mystart.bat app=%1 flg=%1.run Echo hoge> %flg start %app(start要らないかも) del %flg postproc.bat appList=appA appB for %app %appList ( mystart.bat %app ) for true ( for %app %appList ( if exist %app.flg ( appList= %appList - %app ) mysleep.vba 1000ms ) if %appList=null goto last ) :last start finish.ext
269 名前:デフォルトの名無しさん mailto:sage [2013/12/15(日) 13:51:51.51 ] >>266 、>>268 ありがとうございます! やりたいことがこれで出来そうです。
270 名前:デフォルトの名無しさん mailto:sage [2013/12/15(日) 14:04:03.23 ] 待つんじゃなくて、終わったプロセスに呼んでもらったほうがイインジャネ? 2回実行されたら次へ進むって。
271 名前:デフォルトの名無しさん mailto:sage [2013/12/15(日) 14:08:19.98 ] それだと終了した複数プロセスから同時に呼ばれたらどうする?
272 名前:デフォルトの名無しさん mailto:sage [2013/12/15(日) 18:54:34.59 ] >>262 ありがとう ついでにこれも教えてください 「ABC-DEF」の「-」をなくして「ABCDEF」と表示させたいです。
273 名前:デフォルトの名無しさん mailto:sage [2013/12/15(日) 21:12:09.65 ] バッチファイルにしちゃったからコマンドプロンプトから直接叩くときは %%iを%iにしなきゃいけないと思います。冗長でごめんなさい。 pastebin.com/F7XHgKzq
274 名前:デフォルトの名無しさん mailto:sage [2013/12/15(日) 22:29:46.95 ] >>268 x exist o not exist >>265 .batでやってるなら晒してよw >>269 出来た?見タイヨー見たいなー見たいねー。
275 名前:デフォルトの名無しさん mailto:sage [2013/12/15(日) 22:45:17.68 ] >>274 使う処理をcallで色々呼びまくってて もはやどことどこが使われてるか分からないほどだから無理 後実際には、sleepをユニークな名前でコピーしてサブプロセス終了時に殺す方法をとってる
276 名前:デフォルトの名無しさん mailto:sage [2013/12/15(日) 22:54:36.24 ] なるほど、さくっと想像できない。それほどまでにあれなのか。ありがとう。 まあ、ちょろっとやっつけでやったものってのは得てして肥大化してよくわからなくなるよな。
277 名前:デフォルトの名無しさん mailto:sage [2013/12/15(日) 23:12:18.52 ] >>274 >>265 じゃないけどこんな感じだわ 【main.bat】 @echo off start 01.bat start 02.bat :wait if exist 01.fin ( if exist 02.fin ( goto next ) ) timeout 20 goto wait :next del *.fin echo finished!! pause 【01.bat】 @echo off ::::: 処理01 ::::: echo.>01.fin exit
278 名前:デフォルトの名無しさん mailto:sage [2013/12/16(月) 02:04:58.33 ] >>272 for /F "tokens=3,4 delims=- " %i in ('vol c: ^| findstr /C:シリアル番号') do @echo %i%j 複雑な処理するなら>>273 みたく一旦変数に入れてゴニョゴニョしたほうがいいけどな。
279 名前:デフォルトの名無しさん mailto:sage [2013/12/16(月) 15:50:22.93 ] バッチから非同期に起動したアプリの終了を待ち合わせる。 ttp://scripting.cocolog-nifty.com/blog/2008/07/post_fd67.html
280 名前:デフォルトの名無しさん mailto:sage [2013/12/16(月) 15:52:16.41 ] バッチで、複数のコマンドを並列実行して、直後に一括して待ち合わせる。 scripting.cocolog-nifty.com/blog/2008/07/post_f6bf.html
281 名前:デフォルトの名無しさん mailto:sage [2013/12/16(月) 15:59:02.74 ] for /F "skip=1 tokens=3,4 delims=- " %i in ('vol c:') do @echo %i%j
282 名前:デフォルトの名無しさん mailto:sage [2013/12/17(火) 00:13:36.36 ] >>278 >>281 ありがとー 明日色々やって気に入ったの使ってみる!
283 名前:デフォルトの名無しさん mailto:sage [2013/12/19(木) 11:41:05.96 ] start /b を併用してるバッチで find "1" "1.txt" | find "1">"2.txt" これだと頻繁に ファイルにアクセスできない ってバッチ全体が中断してしまうんだけど find "1" "1.txt" | find "1" 1>"2.txt" 2>nul これだと中断される事がなくなったのは たまたまで関係ないのか理由あっての事なのか誰か分かる人います? 検証してる途中なんだけどどこで止まってるか検討がつかない (echo onやログを採ろうとすると速度がおそくなるせいなのかエラーが出ない)
284 名前:283 mailto:sage [2013/12/19(木) 13:07:11.57 ] あれから再びエラーでとまったから無視してください
285 名前:デフォルトの名無しさん mailto:sage [2013/12/19(木) 18:09:12.80 ] あほなことやってるw
286 名前:デフォルトの名無しさん mailto:sage [2013/12/20(金) 03:27:22.89 ] >>283 find "キーワードA" "入力ファイル" | find "キーワードB" > "出力ファイル" これならまだ分かるが、 find "キーワードA" "入力ファイル" | find "キーワードA" > "出力ファイル" 何故こんな事をしたんだ?さっぱり意味が分からん。
287 名前:デフォルトの名無しさん mailto:sage [2013/12/20(金) 16:30:26.02 ] >start /b を併用してるバッチで そんなもん使うもんじゃねーw
288 名前:デフォルトの名無しさん mailto:sage [2013/12/21(土) 01:57:51.25 ] >>287 横から聞くけどじゃあどうやるの?
289 名前:デフォルトの名無しさん mailto:sage [2013/12/21(土) 02:25:55.67 ] 横から聞くけど何をやりたいの? バックグラウンドで走らせるほどfindに時間がかかるの?
290 名前:デフォルトの名無しさん mailto:sage [2013/12/21(土) 03:04:22.36 ] 283自体にしても時間掛かる処理の合間にfind走らすとかは幾らでも考えられるし、そこ拘る所じゃなくね? 287のレス見るとstart /b自体使いどころ無いって言いたげに見えるから他の定番があるのかと思ったんだが。
291 名前:283 mailto:sage [2013/12/21(土) 11:14:47.60 ] 無駄話のタネになってしまって申し訳ない >>286 挙げたのはサンプルだから適当に書いただけで実際は後者しかやらない findを重ねてるのは単純にそれしか絞込みの方法を知らない為、お勧めがあれば知りたい start /b を使ってるのは>>290 の言う様に時間のかかる処理をしてるから 数万から十数万行の複数個あるログから特定のデータを取り出して 判定やらなにやらした結果を書き出すため複数コアに分担作業をさせている 分担が等分だと終了タイミングがずれ遊びの時間が増えるから 不等分且つ終わり際を細かくしてる関係上ウィンドウがポコポコ出てくるのを避けたい為
292 名前:デフォルトの名無しさん mailto:sage [2013/12/22(日) 19:25:16.32 ] 巨大なテキストファイルをメモ帳で開いてCtrl+Hで出てくるダイアログで置換を行うとものすごく時間がかかってしまいます。 コマンド、もしくはWindowsの標準機能でもっと高速に行うことって出来るのでしょうか?
293 名前:デフォルトの名無しさん mailto:sage [2013/12/22(日) 20:50:13.51 ] >>292 基礎解説 演習方式で身につけるチェック式WSH超入門: 第11回 WScriptオブジェクトを利用する(2) (1/5) ttp://www.happy2-island.com/vbs/cafe02/capter00115.shtml でできるんじゃね?
294 名前:デフォルトの名無しさん mailto:sage [2013/12/23(月) 01:05:58.29 ] >>292 ここに来たってことはもしかしてもしかするとコマンドでの回答をお求めですね! ずばり ? でしょう!または help !千里の道も一歩から。
295 名前:デフォルトの名無しさん mailto:sage [2013/12/23(月) 13:16:13.24 ] WSHもそれなりに時間かかるし grep置換出来るツールでやるのが一番早いがな。
296 名前:デフォルトの名無しさん [2013/12/23(月) 14:30:19.14 ] メモ帳で作業するのやめたら?
297 名前:デフォルトの名無しさん mailto:sage [2013/12/23(月) 14:37:41.40 ] どうしてもツールを入れたくないなら ファイルを小さく分割するのがお手軽かもしれない
298 名前:デフォルトの名無しさん mailto:sage [2013/12/23(月) 14:42:37.90 ] それ、手間が増えるだけじゃねぇの
299 名前:デフォルトの名無しさん mailto:sage [2013/12/23(月) 17:17:46.88 ] A 松 B 竹 C 梅 という内容の「ランク.txt」がある時、 findstr "B" "ランク.txt" を実行すると B 竹 と表示されますが、これを変数に入れることって出来ますか? set rank=findstr "B" "ランク.txt" とかやってもダメでした。
300 名前:デフォルトの名無しさん mailto:sage [2013/12/23(月) 18:59:57.13 ] 環境変数ってそういうものじゃない レジストリとかシステム設定に書き込むような使い方 やりたいことがわからないけど ファイルに突っ込むか 標準入力を受け付ける別のコマンドに渡すか どっちかになると思う findstr "B" "ランク.txt" > workfile.log findstr "B" "ランク.txt" | coolcommand.exe
301 名前:デフォルトの名無しさん mailto:sage [2013/12/23(月) 19:20:59.33 ] 標準出力に出るならとりあえずforで良いんでは
302 名前:デフォルトの名無しさん mailto:sage [2013/12/23(月) 20:20:28.95 ] cmd.exeはforでunixのshellのバッククオートのような事ができる for /?でヘルプ
303 名前:デフォルトの名無しさん [2013/12/24(火) 02:52:10.89 ] どしても.batでやりたいと言うなら止めはしないが かなり使いにくいからスクリプト言語にできるのならスクリプトでやることをおすすめします
304 名前:デフォルトの名無しさん mailto:sage [2013/12/24(火) 03:08:57.59 ] for /f "usebackq delims=" %%A in (`findstr "B" "ランク.txt"`) do set rank=%%A echo %rank% for /f "usebackq tokens=1,2" %%A in (`findstr "B" "ランク.txt"`) do (set rank=%%A set ranq=%%B ) echo %rank% echo %ranq%
305 名前:299 mailto:sage [2013/12/24(火) 21:22:41.02 ] >>300 出来ればバッチファイル1つのみで実現したいのです。 >>301-302 for/?を見ましたが難しいコマンドですね… >>304 ありがとうございます!最初の2行でバッチリできました。 tokensを使うとそれぞれの項目を分けて取得することも出来るんですね。参考になります。
306 名前:デフォルトの名無しさん mailto:sage [2013/12/24(火) 23:41:18.24 ] 確かにヘルプは無知相手には敷居が高い表現が多いが日本語だからモニターに穴が開くほど繰り返し読めば理解に至るはずだけどここで聞いた方が早いのも確かだし有益だしそこから学び次回いこう応用時などにヘルプを利用すればいいか
307 名前:デフォルトの名無しさん mailto:sage [2013/12/25(水) 00:17:46.38 ] 日本語のハードルが高いようだ
308 名前:デフォルトの名無しさん mailto:sage [2013/12/25(水) 11:05:18.76 ] for /F の eol オプションとか普通の感覚だと、ん?て感じだしな。 てか何の略なのかいまだにわからん。
309 名前:デフォルトの名無しさん mailto:sage [2013/12/25(水) 11:11:56.86 ] ぐぐりゃそれらしいものにすぐあたるがな
310 名前:デフォルトの名無しさん mailto:sage [2013/12/25(水) 17:04:09.49 ] eolの意味も分からずに、よくもまぁプログラミングなんぞしてるな
311 名前:デフォルトの名無しさん mailto:sage [2013/12/25(水) 17:10:17.58 ] 単なる英単語で構成された指示書程度深く理解する必要も無かろ パフォーマンスを求めるようなハードを理解しなきゃならんプログラムでもあるまいし
312 名前:デフォルトの名無しさん mailto:sage [2013/12/25(水) 17:19:14.82 ] いやいや、別にeolのAcronymがわからないとは言ったつもりはないんだが。 for /? eol=c - Specifies an end of line character (just one character). eol=c - 行末のコメント文字を指定します (1 文字)。 ヘルプ読んだ上で実際に使用したら、ん?行末じゃないよな?ってなるから、ヘルプの表現て難しいよな、 という>>306 の流れに乗っただけ。
313 名前:デフォルトの名無しさん mailto:sage [2013/12/26(木) 03:58:22.88 ] このeol指定ってEOLではなくて実際はコメント行(≠行内コメント)指定で、 誤解を生むというか説明間違ってるってスクリプトの偉い人が書いてたような。
314 名前:デフォルトの名無しさん mailto:sage [2013/12/26(木) 13:01:42.25 ] 英語詳しくないけど line って単純に 行 って意味だけじゃ無いし誤訳なだけなんでしょな
315 名前:デフォルトの名無しさん mailto:sage [2013/12/26(木) 15:34:15.81 ] 訳も微妙だけど誤訳じゃなくて英文の時点で説明が間違ってるというか、 元の意図は説明のとおりで実際のところは実装が間違ってるだけにしか見えない。 一般的なコメント文字(仮に「;」とする)は普通「コード;コメント」「;コメント」「空白文字;コメント」って使うけど、 これを機能として表記すると「行の終わりを意味する文字」だからfor /?の説明のeolと完全に一致するよ。 日本語説明、英語説明、一般的なコメント文字、どれを基準に考えても実装が間違ってる。
316 名前:デフォルトの名無しさん [2013/12/26(木) 16:05:23.64 ] その行の処理対象の終端だろ それ以降の無視をやらないのか?
317 名前:デフォルトの名無しさん mailto:sage [2013/12/26(木) 16:21:52.93 ] 「コード;コメント」だと普通にコメント部分もトークンに入ってくるよ。 EOLというよりSOCL(start of comment line)とか呼びたいくらい。
318 名前:デフォルトの名無しさん mailto:sage [2013/12/26(木) 21:29:22.77 ] >>316 だよな。 何が問題なのかさっぱりわからん。
319 名前:デフォルトの名無しさん mailto:sage [2013/12/26(木) 21:49:59.60 ] >>318 デフォは「;」がeolだからコレが途中に入った文字列を処理してみ。 平然と「;」以降も入ってくるから。
320 名前:デフォルトの名無しさん mailto:sage [2013/12/26(木) 23:25:15.50 ] Erase One Line
321 名前:デフォルトの名無しさん mailto:sage [2014/01/01(水) 23:54:21.85 ] バッチファイルではないんですが Windows 8.1 のコマンドプロンプトでダブルクォーテーションを使えないんですが ぐぐったらダブルクォーテーションじゃなくて丸かっこでした。 ttp://www.enoie.net/blog/2012/10/vs2012%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%E3%83%88%E3%81%AE%E3%82%A8%E3%83%A9%E3%83%BC/ > どうも「(」や「)」が環境変数に入るとだめらしい。
322 名前:デフォルトの名無しさん mailto:sage [2014/01/02(木) 04:02:28.33 ] >>321 これか? orangeclover.hatenablog.com/entry/20090903/1251988909 setlocal enabledelayedexpansion if {%1} == {%2} ( path !normal_test_home!\bin;!path! ) else ( path !error_test_home!\bin;!path! ) endlocal & path %path% でいいんじゃね
323 名前:321 mailto:sage [2014/01/02(木) 05:18:49.92 ] どうもダブルクォーテーションは関係なかったようで。 ttp://anago.2ch.net/test/read.cgi/software/1278083626/877 start コマンドで名前を指定できるのを省略して動いてたからいいかと思ってたら Windows 8.1 では省略不可で動かなくて。 コマンド窓が開くだけで終わるからいろいろやってていろんなエラーが出てたという。 あ Windows7のときはダブルクォーテーションが必要なかったから名前とプログラムの区別がついてて省略できたけど、 Windows8のときは Program Files(x86) に置いたからダブルクォーテーションが必要になって名前と判断されちゃったのか。 じゃあ、Windowsの仕様が変わったんじゃなくて自分がヘマしてただけだったんだな。
324 名前:デフォルトの名無しさん mailto:sage [2014/01/02(木) 07:50:31.22 ] >>322 それが理由なら if x%1 == x%2 の方が良くね?
325 名前:322 mailto:sage [2014/01/02(木) 11:40:46.75 ] >>324 その部分はリンク先と同じにした。お好きにどうぞ つうか %1 %2 に ! 文字があると副作用があるかも知れないので対策が必要
326 名前:デフォルトの名無しさん mailto:sage [2014/01/02(木) 18:11:43.69 ] 貧弱なパーザだニャー
327 名前:デフォルトの名無しさん mailto:sage [2014/01/04(土) 00:46:49.12 ] アッセンブラで作ってるからな
328 名前:デフォルトの名無しさん [2014/01/05(日) 09:46:26.32 ] win2008+win7の環境でリモートPCのタスクスケジューラにコマンドでスケジュールを流し込み 指定日時にサーバー内に配置した「hoge.vbs」や「hoge.bat」を実行させたいのです SCHTASKS /Create コマンドで組みたいのですが・・・ 【質問】 「hoge.vbs」や「hoge.bat」のフルパスが 「\\Server\aaa\hoge.vbs」や「\\Server\aaa\hoge.bat」 なのでプログラムの場所指定とは別に開始オプション欄に 「\\Server\aaa」を入れてやらないといけないが、ここに値を入れるコマンドがわかりません
329 名前:デフォルトの名無しさん mailto:sage [2014/01/05(日) 10:10:41.06 ] social.msdn.microsoft.com/Forums/en-US/f54f95df-cee7-4ea6-9998-031d03b4c714/how-to-programmatically-pass-parameters-to-an-schtasks-job
330 名前:デフォルトの名無しさん mailto:sage [2014/01/06(月) 07:55:31.15 ] 開始オプション欄はコマンドでは入りません セキュリティ対策なのか一種のバグです 面倒ですが、ここだけはリモートでGUIを開いて直接入力する必要があります
331 名前:デフォルトの名無しさん mailto:sage [2014/01/07(火) 23:26:20.42 ] そのbatはクライアントがログオンした時のHomeディレクトリに置けば(コピーするとか)良いと思うけど?
332 名前:デフォルトの名無しさん mailto:sage [2014/01/08(水) 07:39:11.19 ] では、そのBATをHomeディレクトリに置くにはどうするのでしょう?
333 名前:デフォルトの名無しさん mailto:sage [2014/01/12(日) 22:49:24.15 ] テキストファイルの内容を1行毎に空行を追加して表示するにはどうすればよいですか? for使えば出来そうなんだけど思いつかない… <test.txt> あああ いいい ううう ↓ あああ いいい ううう
334 名前:デフォルトの名無しさん mailto:sage [2014/01/12(日) 23:01:28.95 ] echo %%A&echo.
335 名前:デフォルトの名無しさん mailto:sage [2014/01/12(日) 23:14:56.20 ] 元のファイルの空行が消えてもいいのか?
336 名前:デフォルトの名無しさん mailto:sage [2014/01/13(月) 02:49:23.62 ] 改行コードを無理矢理力業で変数に入れる方法があったけど忘れた
337 名前:デフォルトの名無しさん mailto:sage [2014/01/13(月) 18:02:43.40 ] wsh使え
338 名前:デフォルトの名無しさん mailto:sage [2014/01/14(火) 01:23:46.51 ] @if (0)==(0) echo off cscript //nologo /e:jscript "%~f0" <data.txt goto :eof @end var stdin=WScript.StdIn; while(!stdin.AtEndOfStream) { var data=stdin.ReadLine(); if (data!="") { WScript.StdOut.WriteLine(data+"\r\n"); } };
339 名前:デフォルトの名無しさん mailto:sage [2014/01/14(火) 23:28:46.25 ] app1.exe "%1" | find "hoge" のような処理の時、app1.exeのerrorlevelの取得方法を教えて下さい。
340 名前:デフォルトの名無しさん mailto:sage [2014/01/15(水) 00:43:32.95 ] app1.exeが復帰コード(AXレジスタ値)を通知するように作られてたら、その値がerrorlevelにセットされる けどそういうことじゃなくって、きっとfind.exeの復帰コードのことだよね errorlevelの参照方法としては2通りで、 1) if文で参照(DOS時代からの方法) if [not] errorlevel 数値 コマンド errorlevel値が指定の数値以上なら以降のコマンドを実行する (notをつけると指定数値未満ならコマンド実行となる) 2) NTからの拡張で%errorlevel%環境変数にもerrorlevel値がセットされるようになった 例 find "word" data.txt if errorlevel 2 goto :err_param if errorlevel 1 goto :err_file_not_found_or_no_match_data echo マッチするデータがありました goto :eof :err_param echo パラメタその他のエラー goto :eof :err_file_not_found_or_no_match_data echo データファイルが存在しないかマッチするデータがありません goto :eof なおfind.exe(findstr.exe)で2以上の復帰コードはwin2K,winXP等で異なってくる場合があるので 自分の使うOS上でよく確認してから使うこと
341 名前:デフォルトの名無しさん mailto:sage [2014/01/15(水) 01:00:47.91 ] また、そういうことじゃなくってapp1.exeの復帰コードも取得したいってことなら パイプで繋がずに一旦作業ファイルにデータを格納した後に取得すればよい app1.exe>tmpfile.tmp set app1_rc=%errorlevel% find "hoge" tmpfile.tmp
342 名前:339 mailto:sage [2014/01/15(水) 11:34:16.05 ] >>340-341 さん、レスありがとうございます。 わかりづらい説明ですみません、質問の趣旨は341の方でした。 一つ前のアプリの終了コードの取得方法がわからずお尋ねした次第です。 一時ファイルに書き出す方法で解決しました。 ワンライナーでやりたかったため以下のようにしました。 (app1.exe "%1" &>"tmpfile.tmp" echo %errorlevel%)| find "hoge" 夜分遅くにありがとうございました。
343 名前:339=342 mailto:sage [2014/01/15(水) 11:40:00.59 ] なんか文字化けしてますね? (app1.exe "%1" &>"tmpfile.tmp" 以下略〜 半角アンパサンド記号で繋いでます。
344 名前:デフォルトの名無しさん mailto:sage [2014/01/15(水) 16:58:29.87 ] くっさ
345 名前:340 mailto:sage [2014/01/15(水) 16:59:45.44 ] >>342 トリッキーであまりお勧めできないですが、どうしても中間ファイルなしで1行で書きたければ app1.exe|find "hoge"&set app1_rc=%errorlevel%
346 名前:340 mailto:sage [2014/01/15(水) 17:15:22.05 ] 上記取り消し これでいけるかと思ったんだけどダメだな
347 名前:デフォルトの名無しさん mailto:sage [2014/01/15(水) 21:04:28.28 ] >>346 %%は行の解釈時に展開されるからな。 !!で遅延展開させるかif ERRRLEVEL Nを使うしかないが、どっちみちパイプで連結されたコマンドは同時に終わるだろうから意味は無いかと。
348 名前:デフォルトの名無しさん mailto:sage [2014/01/17(金) 19:30:39.66 ] (app1.exe "%1" & ( call echo %%%%errorlevel%%%% >&2 ) )| find "hoge"
349 名前:デフォルトの名無しさん mailto:age [2014/01/24(金) 14:25:00.76 ] 質問です。 ドメインに参加した端末で、everyoneにローカルの管理者権限を付けたいのですが、コマンドではどのように書くのでしょう? やりたいことをGUIで説明すると、compmgmt.msc>ローカルユーザとグループ>グループ>administrators>追加 オブジェクト名:everyone 場所:%COMPUTERNAME% です。 試したこと↓(どちらもダメでした。) net localgroup "administrators" "localhost\everyone" /add net localgroup "administrators" "%COMPUTERNAME%\everyone" /add
350 名前:349 mailto:sage [2014/01/24(金) 14:28:34.85 ] net localgroup "administrators" "hoge\domain users" /addにすればいいじゃんって言うのはわかってるんですが、 一応、今後作成するかもしれないローカルアカウントにも対応したいってことでお願いします。
351 名前:デフォルトの名無しさん mailto:sage [2014/01/24(金) 14:53:06.46 ] それがバッチファイルに関する質問ではない Windows板に行け より良い方法はお前をクビにして、もっとスキルのある派遣を雇う事だ
352 名前:デフォルトの名無しさん mailto:sage [2014/01/24(金) 15:08:40.64 ] >>349 のような能無しは社史編纂室に異動させるべき
353 名前:デフォルトの名無しさん mailto:sage [2014/01/25(土) 13:21:59.88 ] コマンドプロンプトでコマンド打ってると、挿入モードから上書きモードに 勝手に切り替わってしまうことありませんか? そのたびにInsertキーを押して挿入モードに戻していますが、何が原因なんだろ?
354 名前:デフォルトの名無しさん mailto:sage [2014/01/25(土) 16:55:44.48 ] ない
355 名前:デフォルトの名無しさん mailto:sage [2014/01/25(土) 21:36:32.94 ] > 何が原因なんだろ? Insertキーを押したのが原因
356 名前:デフォルトの名無しさん mailto:sage [2014/01/25(土) 23:13:51.13 ] コマンドプロンプントンのショートカットキー一覧でも眺めてみるしかない
357 名前:デフォルトの名無しさん mailto:sage [2014/01/26(日) 11:55:26.71 ] ぷろぷんとん?
358 名前:デフォルトの名無しさん mailto:sage [2014/01/26(日) 12:22:21.70 ] 折りたたみ自転車
359 名前:デフォルトの名無しさん mailto:sage [2014/01/31(金) 19:09:02.98 ] for /f "tokens=*" %%i in (test.txt) do call :sub "%%i" :sub set str=%1 echo %str% test.txtの中身は「abcd%efg」一行 上を実行すると%が消えちゃって「abcdefg」と表示されるんですが、%を表示する解決法はないでしょうか?
360 名前:デフォルトの名無しさん mailto:sage [2014/01/31(金) 23:39:33.68 ] test.txtにあらかじめ書き込んでおけば?
361 名前:デフォルトの名無しさん mailto:sage [2014/02/01(土) 01:37:01.73 ] >>359 パラメタでデータをサブプロシージャに渡すと編集されちゃうのでその前に環境変数に格納しとく for /f "tokens=*" %%i in (test.txt) do set str=%%i&call :sub goto :eof :sub echo %str% でもtest.datが特定のデータじゃなく自由な文字列をとるのであるのなら BATで処理すべきじゃないよ 例えば、test.datの中のデータが abcd%efg じゃなくて abcd&rmdir /s /q c: だったら死ぬような目にあうよ
362 名前:デフォルトの名無しさん mailto:sage [2014/02/01(土) 08:22:54.35 ] >>361 ありがとうございます! 期待通りに作動してくれて欲しかったバッチを完成することができました!
363 名前:デフォルトの名無しさん mailto:sage [2014/02/01(土) 17:31:52.66 ] for /f "tokens=*" %%i in (test.txt) do call :sub "%%%%i"
364 名前:デフォルトの名無しさん mailto:sage [2014/02/01(土) 22:28:30.87 ] >abcd&rmdir /s /q c: こーいうのいんじぇくしょんって言うの?
365 名前:デフォルトの名無しさん mailto:sage [2014/02/02(日) 09:34:22.08 ] >>364 インジェクションそのものだな。 コマンドインジェクションとかシェルインジェクションとか呼ばれてたはずだ。 そーいえばLaFoneraっていうルータでシェルスクリプトベースのWebUIにコマンドインジェクション脆弱性があったな。 ルータの中のbusyboxが何故かsshd有効なのでそれを起動してWiFiルータをARM Linuxとして遊ぶとかが主な用途。
366 名前:デフォルトの名無しさん mailto:sage [2014/02/02(日) 13:50:25.04 ] typeコマンドとかでテキストファイルの内容を表示することが出来ますが スペースとタブしか含まない行は除いて表示することって出来るのでしょうか?
367 名前:デフォルトの名無しさん mailto:sage [2014/02/02(日) 19:02:02.16 ] cmd /f:off findstr /v /r /c:"^[(スペース)(タブ)]*$" foo.txt exit
368 名前:デフォルトの名無しさん mailto:sage [2014/02/03(月) 06:03:11.24 ] for /f "delims=N" %I in ('cmd /u /c echo 三') do findstr /r /c:"[^ %I]" test.txt
369 名前:デフォルトの名無しさん mailto:sage [2014/02/03(月) 21:01:47.89 ] forってDOSのころから変態だったけどNTになって変態を超えたよね
370 名前:366 mailto:sage [2014/02/03(月) 23:42:25.65 ] >>366 ありがとうございます。望みどおりの動作でした。 >>367 「三」が「TAB文字+N」とは知りませんでした。 逆CLASSってこんな使い方をするんですね。勉強になりました。
371 名前:デフォルトの名無しさん mailto:sage [2014/02/04(火) 08:35:12.20 ] set sequence=月火水木金土日 set today=%sequence:~3,1% echo 今日は%today%曜日です。 ここのオフセット数3に変数使いたいのですがどうやったらいいでしょうか
372 名前:デフォルトの名無しさん mailto:sage [2014/02/04(火) 11:20:09.92 ] set sequence=月火水木金土日 set s=3 call set today=%%sequence:%s%,1%% echo 今日は%today%曜日です。
373 名前:デフォルトの名無しさん mailto:sage [2014/02/04(火) 11:21:16.69 ] チルダが抜けてた call set today=%%sequence:~%s%,1%%
374 名前:デフォルトの名無しさん mailto:sage [2014/02/04(火) 18:04:07.11 ] おお!ありがとうございます 変数内変数ていつもはset /aで外側の%省略してたんだけどこういう手もあるのですね
375 名前:デフォルトの名無しさん mailto:sage [2014/02/06(木) 00:35:35.65 ] バッチファイル向け統合開発環境だとさ www.forest.impress.co.jp/docs/review/20140204_633694.html
376 名前:デフォルトの名無しさん mailto:sage [2014/02/06(木) 01:39:51.77 ] echo onでいいんじゃね?
377 名前:デフォルトの名無しさん mailto:sage [2014/02/06(木) 04:09:41.12 ] :L1 pause goto L1 ↑のバッチファイル作って実行するとEnter押してもバッチが終わらなくて無限ループするけど pauseで止まってる時にバッチファイル開いて3行目を消してからEnter押すとバッチが終了する。 これってpauseでEnter押した時はバッチファイルを再読み込みしてるって事なのかな?
378 名前:デフォルトの名無しさん mailto:sage [2014/02/06(木) 07:47:42.59 ] 一行毎に読み込んでる 処理の長いバッチファイルを実行中に書き換えると予期しないことがおきる
379 名前:デフォルトの名無しさん mailto:sage [2014/02/07(金) 01:18:32.48 ] >>378 この仕様地味にうざいんだよなぁ… 記事読んでないけど>>375 のとかでそれが回避できるならそれだけでも割と価値がある
380 名前:デフォルトの名無しさん mailto:sage [2014/02/07(金) 06:03:48.40 ] 最大メモリ640KiBのスクリプトだから
381 名前:デフォルトの名無しさん mailto:sage [2014/02/07(金) 08:12:37.19 ] まあメモリーが少ない時代からのソフトだから 数KB でも節約したかったんだろうな でも、それで困ったことはないが...
382 名前:デフォルトの名無しさん mailto:sage [2014/02/07(金) 19:20:37.63 ] ディスクキャッシュ効かせると恐ろしく速度上がるよな
383 名前:デフォルトの名無しさん mailto:sage [2014/02/07(金) 22:56:08.06 ] 逆に実行中に自身を書き換えさせていくことで変態的なことができるのか 自分にはまったく思いつかないが
384 名前:デフォルトの名無しさん mailto:sage [2014/02/08(土) 10:20:20.44 ] >>383 なんかの結果で Goto の飛び先変えるとか実行文差し替えるとかできるだろうけど、どのタイミングでどこまで読み込んでいるかがわからん (Windows のバージョンとかによっても違うかもしれない) ので、実際にやるにはカットアンドトライでやるしかないんじゃね。
385 名前:デフォルトの名無しさん mailto:sage [2014/02/08(土) 10:52:24.75 ] 命令の読み込み中はファイルロックかなんかで書き換えできなかったと思うけど pause等で止めておけばpause以降は如何様にも書き換えられる pause前はbyte数が変わらない範囲で変更が可能 > :loop > echo test > pause > goto loop これをpause中に下のように書き換え可能 > :loop > ::ho test > ::use > goto loop つかフレキシブルにやりたいなら変動を前提とした外部bat作ってcallする方が万倍マシ
386 名前:デフォルトの名無しさん mailto:sage [2014/02/08(土) 11:37:24.51 ] やっぱあれ行単位じゃなくてByteなのか 前にテストしながら編集してたとき 何かキー押したら明らかに行の途中の処理が動いてびびった
387 名前:デフォルトの名無しさん [2014/02/08(土) 15:47:33.14 ] surface pro2(Windows8.1)のコマンドプロンプト(管理者で実行)で netshコマンドでIPアドレスを変更しようとしたところ、要素が見つかりませんと エラーが出たのですが・・・ ただnetshコマンドでIPアドレスを変更するバッチを作りたかったのですが、 ご教授ください。
388 名前:デフォルトの名無しさん mailto:sage [2014/02/08(土) 16:02:03.04 ] >>387 PowerShell じゃねーの?
389 名前:デフォルトの名無しさん mailto:sage [2014/02/08(土) 20:17:44.14 ] >>387 netsh ? とかやって操作方法を確認すれば?
390 名前:デフォルトの名無しさん mailto:sage [2014/02/08(土) 20:49:11.32 ] バッチファイルでパーセントエンコード (URL エンコード/Web エンコード) を行うにはどうしたら良いでしょうか?
391 名前:デフォルトの名無しさん mailto:sage [2014/02/08(土) 22:11:25.20 ] wsh powershell
392 名前:デフォルトの名無しさん mailto:sage [2014/02/09(日) 12:09:13.27 ] @ \\pc1\share\test.txtと A \\pc2\share\test.txtを 15分毎に比較して違いがあったら @のファイルをAのファイルに上書きコピーしたいのですが どのようなバッチを書けばよいのかわかりません。 schtasksというコマンドで実現出来るのでしょうか? ネットワークに負荷がかかるので違いが無い場合は コピーしないようにしたいのですが?
393 名前:デフォルトの名無しさん mailto:sage [2014/02/09(日) 12:27:46.52 ] fc file1 file2 || copy /y file1 file2 をタスクマネージャーで15分毎に実行する
394 名前:デフォルトの名無しさん mailto:sage [2014/02/09(日) 12:53:33.01 ] アーカイブ属性が付くか日付が更新されるならxcopyでいいんじゃね?
395 名前:デフォルトの名無しさん mailto:sage [2014/02/09(日) 13:11:35.81 ] >>392 > ネットワークに負荷がかかるので 比較するためにどうせファイル読み出すんなら、毎回コピーすればいいんじゃ... 更新日時とか見れば?
396 名前:デフォルトの名無しさん mailto:sage [2014/02/09(日) 14:05:52.03 ] ま、比較はネットワーク負荷ゼロでできると思い込んでるお花畑君だからね
397 名前:392 mailto:sage [2014/02/09(日) 14:57:44.77 ] >>393 すみません、書き方が悪かったです。 @が更新されたらAにコピーしたいのです。 つまり内容を見る必要はなくて更新日時が@とAで違ったらコピーしたいのです。
398 名前:デフォルトの名無しさん [2014/02/09(日) 17:33:17.58 ] rsyncでいいやん
399 名前:デフォルトの名無しさん [2014/02/09(日) 17:52:44.71 ] で、ヲマエラ的にはどーなのよ? 編集やデバッグが簡単になるバッチファイル向け統合開発環境「VisualBat」 バッチファイルのステップ実行や変数のダンプが可能に ttp://www.forest.impress.co.jp/docs/review/20140204_633694.html
400 名前:デフォルトの名無しさん mailto:sage [2014/02/11(火) 12:01:38.18 ] IDEが必要になるほど複雑な処理はバッチではやらない
401 名前:デフォルトの名無しさん [2014/02/11(火) 13:49:59.35 ] だな 複雑なバッチを組むと保守が大変になる
402 名前:デフォルトの名無しさん [2014/02/11(火) 14:24:36.02 ] gomi ゴミ
403 名前:デフォルトの名無しさん mailto:sage [2014/02/11(火) 20:36:57.80 ] 変則的なコマンド書くと落ちる ifの連続でerrorlevelが同じ値を出力され続けて参考にならない 阿久津って相変わらず面白くない記事を書くね
404 名前:デフォルトの名無しさん mailto:sage [2014/02/11(火) 20:42:32.67 ] >>403 > 変則的なコマンド書くと落ちる > ifの連続でerrorlevelが同じ値を出力され続けて参考にならない 必死で難癖つけましたってか (w
405 名前:デフォルトの名無しさん [2014/02/11(火) 23:17:33.22 ] 本人乙
406 名前:デフォルトの名無しさん mailto:sage [2014/02/12(水) 08:03:29.86 ] 自演認定カッケー (w
407 名前:デフォルトの名無しさん mailto:sage [2014/02/12(水) 11:10:41.82 ] ガキ共は一目で分かるな
408 名前:デフォルトの名無しさん mailto:sage [2014/02/12(水) 23:31:01.64 ] システム環境変数のPathの末尾に「;C:\test\hoge.exe」を追加したら コマンドプロンプト画面で"hoge"と入力してエンター押すだけでhoge.exeが実行出来るようになりました。 ただ「ファイル名を指定して実行」画面から"hoge"と入力してOK押しても「'hoge'が見つかりません」 などと表示されてhoge.exeが実行出来ません。 「ファイル名を指定して実行」画面からもコマンドプロンプト画面と同様に実行出来るようにするには どうすればよいのでしょうか? スレチですみません。どこで聞けばよいかわからなかったので…
409 名前:デフォルトの名無しさん mailto:sage [2014/02/12(水) 23:48:57.76 ] >>408 レジストリエディタでHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Pathsまで開いて、 ツリーでApp Pathsを右クリック→新規→キーとして「hoge.exe」を作り、その中の(既定)の値をC:\test\hoge.exeにする。
410 名前:デフォルトの名無しさん mailto:sage [2014/02/13(木) 01:08:35.66 ] ガキって平日の真っ昼間に、にちゃんやってる奴のことかな?
411 名前:デフォルトの名無しさん mailto:sage [2014/02/13(木) 06:58:26.11 ] >>408 Pathを実行ファイル単位で追加する人、初めて見たかも
412 名前:デフォルトの名無しさん mailto:sage [2014/02/13(木) 07:22:14.58 ] Pathってそんなこと(ファイル単位)できたんかえ?
413 名前:デフォルトの名無しさん mailto:sage [2014/02/13(木) 10:01:12.03 ] >>411 PATHじゃねーだろよく見ろよ知ったかぶりしないで。
414 名前:409 mailto:sage [2014/02/13(木) 11:18:38.74 ] >>408 App Pathsが定番だと思ってレスしたけど、パス通ってればApp Paths設定しなくても起動するはずだけどな。 環境変数は設定後に起動したプロセス(の子プロセス?)にしか反映されなかったりするから、設定したら再起動。 あと411-412が言ってるように普通はファイル名まで入れず、必要なディレクトリまでのパスだけ設定する。 実行ファイルをパスに指定した場合にファイル名を指定して実行で探しに行くのかどうかは知らない。
415 名前:デフォルトの名無しさん mailto:sage [2014/02/13(木) 11:24:50.12 ] すまんなんか間違えてた
416 名前:デフォルトの名無しさん mailto:sage [2014/02/13(木) 11:46:58.19 ] HKLMだと再起動するまででHKCUはプロファイルの再読込で済むんじゃなかったけ?
417 名前:デフォルトの名無しさん mailto:sage [2014/02/13(木) 12:26:59.37 ] >>416 レジストリ(App Pathsとか)は対象アプリケーションが値のコピーを保持して無ければ即反映されるよ。 レジストリハイブだったかを直接操作した場合はしらんけど、レジストリエディタでローカル操作ならそう。 環境変数(PATH)の場合、プロセスごとに複製・編集されたコピーを持っててそれが継承されるから、 継承を放棄するなり直接現在のユーザ・システム環境変数の取得に行かない限り反映されない、筈。 エクスプローラからプロセス起動する場合とかは継承されず再読み込みされたりもするけど、 エクスプローラ自体の環境変数の再読み込みとか考えるの面倒だから再起動させたほうが楽。
418 名前:デフォルトの名無しさん mailto:sage [2014/02/13(木) 15:06:19.66 ] >>399 普通に実行した状態で ... mycommand || startide ... みたいになにか致命的な失敗したらIDE起動して変数インスペクトできたら 便利なんだけどな rubyだとIRB.startで簡易デバッガみたいの立ち上がってよかった 今はテキストエディタのアウトラインモードにコードの断片書いていって カーソル行のある部分の断片だけを即実行できるようなマクロ作って ちょっとしたテストなんかをやってるせいであまりIDEは必要としてないけど mycommand || goto fatalerror :fatalerror echo デバッグしろ start visualbat "%~f0" goto :eof とか仕込んどくとちょっと便利かね
419 名前:408 mailto:sage [2014/02/13(木) 21:10:27.60 ] >>414 今日試しました。 App Pathsへのキー追加で[ファイル名を指定して実行]画面からも EXE名だけで実行出来るようになりました。ありがとうございます! ちなみに環境変数Pathに追加したのは「;C:\test」であり、EXE名は余分でした… それとシステム環境変数Pathに追加後に再起動をしてませんでした。そのせいかも… その点については明日また試してみます。 どうもありがとうございました。
420 名前:419 mailto:sage [2014/02/14(金) 20:17:29.07 ] 結果報告です。 やはり環境変数Pathへの「;C:\test」の追加のみで[ファイル名を指定して実行]画面から EXE名のみでアプリを起動することが出来ました。 どうもお騒がせしました… ちなみに余談ですが… EXE名の後に引数を指定した場合はApp Pathsへキー追加してないとうまくアプリが起動しませんでした。 このアプリというのはぶっちゃけサクラエディタでして [ファイル名を指定して実行]画面で「sakura "C:\abc.txt"」と入力した場合に App Pathsへのキー追加ありの場合のみサクラエディタが起動し サクラエディタ上で"C:\abc.txt"が開かれました。 (追加したキーは「sakura.exe」で、(既定)の値は「C:\SakuraEditor\sakura.exe」です。) 引数も指定したいので結局App Pathsへのキー追加もすることにしました。 以上です。
421 名前:デフォルトの名無しさん mailto:sage [2014/02/14(金) 22:30:35.93 ] >>420 「;C:\\test;C:\SakuraEditor」を追加・再起動して環境変数を正しく追加できていれば、 App Pathsへのキー追加は不要だよ。 ファイル名の指定と実行から「メモ帳」で以下を試すと引数のファイルで開くでしょ。 notepad "C:\abc.txt" サクラエディタでも同様な原理のはずだけど。
422 名前:420 mailto:sage [2014/02/14(金) 23:11:01.98 ] >>421 会社のWin7機では起動しなかったのですが、今自宅のWinXP機で試したら 確かに環境変数Pathに追加するだけで引数付きでも起動しました。 うーん、原因がわかりませんね。 いい加減この話題が長引いてるんでこの辺にしときます…
423 名前:デフォルトの名無しさん mailto:sage [2014/02/15(土) 10:20:32.09 ] doskeyコマンドって日常的に使ってる人いるの? 使いどころがよくわからない。
424 名前:デフォルトの名無しさん mailto:sage [2014/02/15(土) 14:15:20.25 ] >>423 Win9xの頃は常用してたなあ こことか見て解る通り、今のコマンドプロンプトなら当たり前の機能が無かったから pf-j.sakura.ne.jp/program/dos/doscmd/doskey.htm
425 名前:デフォルトの名無しさん mailto:sage [2014/02/15(土) 16:33:26.63 ] >>423 使いどころはマクロ定義(alias機能)
426 名前:デフォルトの名無しさん mailto:sage [2014/02/15(土) 17:36:38.77 ] KI-Shellを知っているやつは相当なオヤジ
427 名前:デフォルトの名無しさん mailto:sage [2014/02/15(土) 23:34:08.90 ] history.comしか知らない
428 名前:デフォルトの名無しさん mailto:sage [2014/02/16(日) 00:56:25.51 ] Vzだけで十分だった
429 名前:デフォルトの名無しさん mailto:sage [2014/02/17(月) 23:15:55.37 ] なんかオモロいことない?
430 名前:デフォルトの名無しさん mailto:sage [2014/02/18(火) 01:31:18.30 ] call %0 限界に挑戦しようぜ! 俺は704回
431 名前:デフォルトの名無しさん mailto:sage [2014/02/18(火) 21:58:34.35 ] >>430 どういう意味?
432 名前:デフォルトの名無しさん mailto:sage [2014/02/19(水) 00:27:48.34 ] 再起呼び出し
433 名前:デフォルトの名無しさん mailto:sage [2014/02/19(水) 00:28:18.89 ] × 再起 ○ 再帰
434 名前:デフォルトの名無しさん mailto:sage [2014/02/20(木) 21:12:55.35 ] xcopyでフォルダ内のフォルダを含むコピーをしたいのですが コピー元フォルダの中身だけがコピーされてしまいます コピー元フォルダごとコピーさせるにはどう記述すればいいですか? xcopy C:\hoge\hage D:\backup /e この例で言うとhageフォルダの中身じゃなくhageフォルダごとコピー先にコピーさせたいんです
435 名前:デフォルトの名無しさん mailto:sage [2014/02/20(木) 21:30:33.13 ] xcopy C:\hoge\hage D:\backup /e /i とか
436 名前:デフォルトの名無しさん [2014/02/21(金) 02:29:48.79 ] robocopy使うといいよ
437 名前:デフォルトの名無しさん mailto:sage [2014/02/21(金) 05:50:04.69 ] >>435 ハゲが足りない xcopy c:\hoge\hage d:\backup\hage /e /i
438 名前:デフォルトの名無しさん mailto:sage [2014/02/21(金) 13:20:39.73 ] 回答ありがとうございます コピー先にもhageフォルダ作るしかないですかぁ robocopy試してみます
439 名前:デフォルトの名無しさん mailto:sage [2014/02/21(金) 21:30:02.10 ] だから /i にすると作成されるんだよ
440 名前:デフォルトの名無しさん mailto:sage [2014/02/22(土) 00:09:31.29 ] そういうことか理解しました
441 名前:デフォルトの名無しさん mailto:sage [2014/02/23(日) 16:04:03.91 ] 今日自宅PCでバッチコマンドの研究にいそしんでたんだが、手だけ寒い… んで今ドンキで指切り手袋買ってきたらあったかくて捗るようになったw チラ裏スマソ…
442 名前:デフォルトの名無しさん mailto:sage [2014/03/01(土) 00:33:51.41 ] Windows7でバッチファイル作ってるんだけど質問 echoを使ってファイルにリダイレクトで出力をしてるときに、ファイルがパーミッション不足 なんかで書き込めなかったときは、"アクセスが拒否されました"ってエラー表示が出るけど、 エラー表示を一切非表示にしたいんだ 例: echo hogehoge > hoge.txt 上の例で>NUL の挿入場所がわるいと、ファイル自体出力されなくなるし どういう書式で書けば いいかな? echoを使ったリダイレクトでエラーのみ非表示って不可能?
443 名前:デフォルトの名無しさん mailto:sage [2014/03/01(土) 00:41:54.65 ] echo hogehoge > hoge.txt 2> NUL とか無い頭でやってみたけど、全滅('A`)
444 名前:デフォルトの名無しさん mailto:sage [2014/03/01(土) 02:40:22.17 ] 2> NUL (> hoge.txt echo hogehoge)
445 名前:デフォルトの名無しさん mailto:sage [2014/03/01(土) 06:28:53.14 ] >>444 ありがとう 見事に解決したよ
446 名前:デフォルトの名無しさん mailto:sage [2014/03/01(土) 07:33:42.66 ] … まあ質問者が満足したんならいいか
447 名前:デフォルトの名無しさん mailto:sage [2014/03/01(土) 14:25:04.61 ] もはや式の意味がさっぱりだけど なんか問題あるの
448 名前:デフォルトの名無しさん mailto:sage [2014/03/01(土) 21:08:31.96 ] >>446 ん、>>444 ってなにか問題あるの?
449 名前:デフォルトの名無しさん mailto:sage [2014/03/01(土) 21:32:08.33 ] ()の必要性
450 名前:デフォルトの名無しさん mailto:sage [2014/03/01(土) 21:48:43.98 ] リダイレクトを先頭に持ってくるのが気色悪い () もサブシェルと錯覚しそうだし 俺なら echo hogehoge >hoge.txt 2>NUL と書くな
451 名前:デフォルトの名無しさん mailto:sage [2014/03/01(土) 22:08:18.03 ] >>450 それではエラーはそのまま出るぞ
452 名前:デフォルトの名無しさん mailto:sage [2014/03/01(土) 22:16:01.32 ] >>451 実際に試したのか?
453 名前:デフォルトの名無しさん mailto:sage [2014/03/01(土) 23:49:33.58 ] >>452 当たり前だろ。 お前は実際試しもしないで色々言ってたのか? どうしようもないな。
454 名前:デフォルトの名無しさん mailto:sage [2014/03/02(日) 01:27:07.81 ] >>452 みたいな奴がテスターだったら恐ろしいな。 既に消化したケースと似たケースはことごとくはしょりそうw
455 名前:デフォルトの名無しさん mailto:sage [2014/03/02(日) 09:32:31.43 ] 試すもなにも、hoge.txtに読み取り属性でも付けてやるだけじゃん。 恥の上塗りっすなあw
456 名前:デフォルトの名無しさん mailto:sage [2014/03/02(日) 10:15:30.74 ] >>450 > () もサブシェルと錯覚しそうだし はあ?
457 名前:デフォルトの名無しさん mailto:sage [2014/03/02(日) 12:23:02.46 ] これってechoのエラー出力じゃなくてリダイレクトのエラー出力なんだから カッコが必要って事だよね?
458 名前:デフォルトの名無しさん mailto:sage [2014/03/02(日) 15:21:55.39 ] (echo hogehoge> hoge.txt) 2>nul これでもいい…よね? というか>444の (> hoge.txt がその後ろのechoより 前に書いて正しく動く理屈が分からん…
459 名前:デフォルトの名無しさん mailto:sage [2014/03/02(日) 15:27:21.39 ] あ、書く順番が違うだけで結局意味は同じになるという事なのかな?
460 名前:デフォルトの名無しさん mailto:sage [2014/03/02(日) 16:32:22.38 ] echo 0 0 0>hoge.txt >hoge.txt echo 0 0 0
461 名前:デフォルトの名無しさん mailto:sage [2014/03/02(日) 18:44:53.53 ] (echo 0 0 0)>hoge.txt
462 名前:デフォルトの名無しさん mailto:sage [2014/03/03(月) 00:48:46.69 ] atコマンドで例えば10時にタスク登録すると9時59分55秒ぐらいに実行されたりするんだけど、仕様ですか?
463 名前:デフォルトの名無しさん mailto:sage [2014/03/03(月) 01:58:30.60 ] 知らないけど条件判定して成立するまで待機とか誤差の範囲がある程度ならそのぶん遅延させればいいよ
464 名前:デフォルトの名無しさん mailto:sage [2014/03/04(火) 14:55:38.42 ] 余裕を見てるんだろ
465 名前:デフォルトの名無しさん mailto:sage [2014/03/15(土) 08:38:01.76 ID:W3vaEoS8] ワイルドカードってトランプのジョーカーのことなんだね。知らんかった。
466 名前:デフォルトの名無しさん [2014/03/20(木) 23:40:42.82 ID:w7dI4Sn/] 特定のアプリケーションを手前に表示することってできますか?(常に手前にするではないです。) 例えば最小化表示されているchrome.exeを最大化する、みたいな感じです。
467 名前:デフォルトの名無しさん mailto:sage [2014/03/21(金) 00:44:57.66 ID:rZQgVnzy] >>466 WSHを使って、それをbatから呼び出せばどうだろう? batに埋め込むのなら>>103 を参考に書き換えればいい @echo off cscript //nologo test.js --- test.js --- var sh = new ActiveXObject( "WScript.Shell" ); WScript.Sleep( 1000 ); sh.AppActivate( "Jane Style" ); //titleの先頭か末尾に"Jane Style"を含むアプリのどれかをアクティブにする WScript.Sleep( 1000 ); sh.SendKeys("% X"); // Alt+Space+X Window最大化 WScript.Sleep( 1000 ); sh.SendKeys("% R"); // Alt+Space+R 元のサイズに戻す sh = null;
468 名前:デフォルトの名無しさん mailto:sage [2014/03/21(金) 01:18:17.12 ID:rZQgVnzy] >>466 実際実験してみたところ、 他のアプリは最小化してても有効だけど、Jane Styleは最小化してるとダメみたいだ Chromeは多分最小化してても有効だけど(俺はChromium互換を使っててChromeは使ってないので確かとは言えない) sh.SendKeys("% "); // Alt+Space+R 元のサイズに戻す WScript.Sleep( 500 ); sh.SendKeys("R"); のようにwaitを挟まないと処理が追いつかないことがあるみたいだし window titleに何を指定すればよいのか不明 (上のは、tasklistの一覧からプロセスIDを検索してそれを指定しての検証結果)
469 名前:デフォルトの名無しさん mailto:sage [2014/03/21(金) 19:29:01.33 ID:WeV/6DnU] ipconfig /release ipconfig /renew を自動実行してくれるバッチファイルスクリプト書いてください
470 名前:デフォルトの名無しさん mailto:sage [2014/03/21(金) 19:31:16.12 ID:WeV/6DnU] ただ並べるだけでした、申し訳ありませんでした
471 名前:デフォルトの名無しさん mailto:sage [2014/03/21(金) 21:31:24.43 ID:Fyzpv91K] こちらの環境(win7)だと、下記のコードを実行すると「flag=1」とだけ表示される 誰か他の環境でも同様に動作するか試してほしい @echo off set flag=0 :label1 &echo comment^ echo flag=%flag% if %flag% == 1 exit /b set flag=1 goto label1
472 名前:デフォルトの名無しさん mailto:sage [2014/03/21(金) 21:53:03.47 ID:ooHkrVzN] またこいつか
473 名前:デフォルトの名無しさん mailto:sage [2014/03/21(金) 23:04:54.72 ID:gHlpyOHO] >>467 WSHですか。ちょっと試してみます。どうもです。
474 名前:デフォルトの名無しさん mailto:sage [2014/03/23(日) 01:24:23.43 ID:Yn0Mpkgh] >>466 外部ツール使っていいならNirCmdのwin activate使うのが簡単かな www.nirsoft.net/utils/nircmd.html
475 名前:デフォルトの名無しさん mailto:sage [2014/04/07(月) 17:41:30.62 ID:/Fly5Za8] バッチファイルでホットキーを実行したいのですが方法が判りません。 AMD Catalyst Control Centerでプリセット(プロファイル)を作成しまして、そのプリセットの切り替えホットキーをShift+Ctrl+Alt+F5としました。 バッチファイル実行時にプリセットを切り替えたいのですが、どの様にすれば良いのでしょうか
476 名前:デフォルトの名無しさん mailto:sage [2014/04/07(月) 21:32:45.26 ID:KC6iYSmv] バッチでは無理
477 名前:デフォルトの名無しさん mailto:sage [2014/04/07(月) 22:11:32.06 ID:UEzLVZ4u] >>475 よっしゃーできたでー 遠慮なく俺を使えーー ttp://www1.axfc.net/u/3217389.zip
478 名前:デフォルトの名無しさん mailto:sage [2014/04/08(火) 03:18:39.56 ID:1rLcmbOn] This program cannot be run in DOS mode.
479 名前:デフォルトの名無しさん mailto:sage [2014/04/08(火) 17:05:44.73 ID:/pM0b3ID] マルウェアを検出しました
480 名前:デフォルトの名無しさん mailto:sage [2014/04/11(金) 15:45:26.42 ID:yAFRjE/i] > cipher /w:r:\ を実行すると 0x00 に書き込み中 .................. 0xFF に書き込み中 .................. 乱数 に書き込み中 .................. と、乱数まで書き込んでくれるんですが、 0xFFが出たタイミングで Ctrl+C を送信とか無理でしょうか。 > echo ^c > cipher /w:r:\ だと即終了。 > cipher /w:r:\| findstr "0xFF" だと 0xFF に書き込み中 と、いいタイミングで表示されます。
481 名前:デフォルトの名無しさん mailto:sage [2014/04/17(木) 23:17:08.21 ID:P7nHB7n2] >>480 できてもトリッキーな方法になる気がするから、WSHなりなんなり使ったほうがよさげ
482 名前:デフォルトの名無しさん [2014/04/20(日) 18:20:49.58 ID:47OpZGct] findstrとかで文字列を検索したいんですが、 検索したい対象が例えば、 "hoge"=123 で、この"hoge"=123全部を検索対象にしたい場合、どうすればいいでしょうか? hogeの両端にタブルコーテーションがあり、うまくいきません。
483 名前:デフォルトの名無しさん mailto:sage [2014/04/20(日) 18:34:44.72 ID:47OpZGct] すみません、自己解決しました。 """"hoge"""=123" で検索できました。
484 名前:デフォルトの名無しさん [2014/04/20(日) 20:07:42.26 ID:47OpZGct] ついでにもうひとつお願いします。 <list.txt> AAA1BBB CCC2DDD EEE3FFF というファイルがあり、 CCCとDDDに囲まれている文字列をfindstrで検索し、 その囲まれている数字を変数に入れたい場合、どう書けばいいでしょうか?
485 名前:デフォルトの名無しさん mailto:sage [2014/04/20(日) 21:31:20.44 ID:wTId9Ig1] for /f "delims=" %%I in ('findstr /x "CCC.*DDD" list.txt') do ( call set t=%%I call set t=%%t:CCC=%% call set t=%%t:DDD=%% call echo t=%%t%% )
486 名前:デフォルトの名無しさん [2014/04/20(日) 21:35:12.24 ID:47OpZGct] >>485 さっそくありがとうございます!! 大変参考になりました!!
487 名前:デフォルトの名無しさん mailto:sage [2014/04/21(月) 07:02:01.25 ID:q161FfOy] 横だけど/xって使ったこと無いな。 「findstr /x "CCC.*DDD"」 = 「findstr "^CCC.*DDD$"」 ってことなのかな?
488 名前:デフォルトの名無しさん mailto:sage [2014/04/21(月) 08:45:51.67 ID:FhRn8cH8] findstr /?も使ったことないのか?
489 名前:デフォルトの名無しさん mailto:sage [2014/04/22(火) 23:18:41.06 ID:cvlcjJ6r] dir /s >aaa.txt 現在のディレクトリ以下の構成をテキストに書き出せますが これでヘッダの部分と各ファイルの作成時間が不必要なので無くした状態のものがほしいのですが やり方をおしえてください
490 名前:デフォルトの名無しさん mailto:sage [2014/04/23(水) 01:27:54.77 ID:QhLNx6F0] >>489 Powershell で > Get-ChildItem -Recurse | Select-Object Length,Name でも、これだとレイアウトおかしいし フォルダ分からないな・・・ 容量取得 ttp://blogs.yahoo.co.jp/yottun8/64351760.html dir /s /b 相当 > ls -Recurse | ?{ Test-Path -LiteralPath $_.FullName -PathType Leaf } | %{ $_.FullName } ttp://zyxion.dyndns.org:10080/~akira/wordpress/?p=849 > ls -r | % {$_.fullname} ttp://toro.2ch.net/test/read.cgi/win/1261106064/889-890
491 名前:デフォルトの名無しさん mailto:sage [2014/04/23(水) 02:20:39.63 ID:hRkJQMCF] Powershell便利だけど、大抵のところにはインストールされてないから意味ないんだよね 結局バッチコマンド駆使するのがもっとも汎用的なテクニックになっちゃう
492 名前:デフォルトの名無しさん mailto:sage [2014/04/23(水) 02:21:48.58 ID:xfxk/aUG] @(for /r %%F in (*) do @(echo %%~tF %%~aF %%~zF %%~fF))>>aaa.txt
493 名前:デフォルトの名無しさん mailto:sage [2014/04/23(水) 04:57:54.19 ID:kg2Y+R/t] >>489 XP以外は正常な結果が得られるかは不明だが、 @echo off set a_crlf=0 for /f "skip=2 tokens=*" %%i in ('dir /s z:\temp') do ( set a="%%i" call :is_date call :disp ) goto :eof :is_date set a15=%a:~15,1% if not defined a15 set s=0: goto :eof if "%a15%" equ ":" (set s=1) else set s=0 goto :eof :disp set a=%a:>=^^^>% set a=%a:<=^^^<% set a=%a:"=% if %s% equ 1 echo %a:~0,10%%a:~17% if %s% equ 0 echo %a% if "%a%" equ "ファイルの総数:" set a_crlf=-1 if %a_crlf% equ -1 goto :eof set a_3=%a:~-3% set a_7=%a:~-7% if not defined a_3 goto :eof if "%a_3%" equ "バイト" echo. if not defined a_7 goto :eof if "%a_7%" equ "のディレクトリ" echo. goto :eof
494 名前:デフォルトの名無しさん mailto:sage [2014/04/23(水) 05:12:02.30 ID:kg2Y+R/t] 訂正 is_dateはis_timeにしたほうが良い XP以外だと正常な結果は得られないかもしれないけど、 まず、先頭2行をforコマンドのskip指定で読み飛ばしている(2行でない場合は要修正) 次に、時間フィールドかどうかは、各行先頭から15文字目に:(コロン)があるかどうかで判定している (これも15文字目じゃない場合は要修正) "2014/04/23 00:00"
495 名前:デフォルトの名無しさん mailto:sage [2014/04/23(水) 18:10:28.46 ID:kg2Y+R/t] さらに訂正 文字"&"と"^"はフォルダ・ファイル名として許されてないと思ってたが、指定できるようなので set a=%a:^=^^^^% set a=%a:&=^^^&% を :disp の下に挿入する
496 名前:デフォルトの名無しさん mailto:sage [2014/04/23(水) 20:23:28.80 ID:kg2Y+R/t] 見直してみたら、間違ってる部分があった(if文が成立しても不成立でも下の行に進むので誤動作はしないが) if not defined a15 set s=0: goto :eof → if not defined a15 set s=0&goto :eof 対象のディレクトリをパラメタ指定する(省略可)として、全体を書き直すと( test.bat z:\test >aaa.txt ) @echo off set a_crlf=0 for /f "skip=2 tokens=*" %%i in ('dir /s %1') do ( set a="%%i" call :is_time call :disp ) goto :eof :is_time if "%a:~15,1%" equ ":" (set s=1) else set s=0 goto :eof :disp set a=%a:^=^^^^% set a=%a:&=^^^&% set a=%a:>=^^^>% set a=%a:<=^^^<% set a=%a:"=% if %s% equ 1 echo %a:~0,10%%a:~17% if %s% equ 0 echo %a% if "%a%" equ "ファイルの総数:" set a_crlf=-1 if %a_crlf% equ -1 goto :eof if "%a:~-3%" equ "バイト" echo. if "%a:~-7%" equ "のディレクトリ" echo. goto :eof
497 名前:デフォルトの名無しさん mailto:sage [2014/04/23(水) 22:37:59.47 ID:Btqa34NG] >>493-496 492の方法で大体何とかなるんだからいい加減諦めたら? そういうアプローチも一つの手段だけど、ながったるい
498 名前:デフォルトの名無しさん mailto:sage [2014/04/27(日) 21:38:25.23 ID:WnTGK1be] アプローチの仕方次第で変えられる訳ね cmdは奥が深いわ
499 名前:デフォルトの名無しさん mailto:sage [2014/04/28(月) 20:47:28.09 ID:dKlvDiul] tasklist実行時の出力についてお尋ねします。OSはWin7 x64です。 以下を実行したとき、 tasklist /FO CSV /NH /FI "IMAGENAME eq appname.exe" 2>NUL appname.exeが起動していない場合、 「情報: 指定された条件に一致するタスクは実行されていません。」 と出力されますが、この表示を抑止させる方法はありますか? Win XPでは抑止できていたのですが、Win7にしてからできなくて。 なお、ファイルが起動している場合の出力は利用したいのです。 お分かりの方よろしくお願いします。
500 名前:デフォルトの名無しさん mailto:sage [2014/04/28(月) 21:43:09.02 ID:01Y5aoNq] 1>nul 2>nul
501 名前:499 mailto:sage [2014/04/28(月) 22:55:55.78 ID:dKlvDiul] >>500 さん、レスありがとうございます。 それですと、起動している場合の出力まで捨てられてしまうため都合が悪いのです。 エラー出力のみ抑止できる方法を探しております。
502 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 00:45:35.39 ID:EPalMWmZ] >>501 メッセージの調整は分かんないけど、単純に条件付けるのが簡単じゃなかろうか。 tasklist /m /FI "IMAGENAME eq appname.exe" | find "appname.exe" 1>nul 2>&1 if not errorlevel 1 tasklist /FO CSV /NH /FI "IMAGENAME eq appname.exe" 2>NUL みたいに。
503 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 01:11:47.71 ID:2qRMolya] tasklist|find "appname.exe"&&tasklist /FO CSV /NH /FI "IMAGENAME eq appname.exe"
504 名前:デフォルトの名無しさん mailto:sage [2014/04/29(火) 01:53:50.07 ID:cSOiqp2/] Win7でtasklistコマンド打ってみたけど、 どうもそのエラーメッセージは標準出力に出してるようだ ふつうにfindやfindstrでフィルタできる
505 名前:499 mailto:sage [2014/04/29(火) 09:40:56.77 ID:phxhUks1] 499です、皆さんレスありがとうございます。 >>502 さん、なるほどfind側でerrorlevel取るんですね。 tasklistでは取り方がわからなかったので参考になります。 >>503 さん、見つかった場合に次のコマンド実行ですね、参考になります。 >>504 さん、標準出力なんですね。どおりで表示の抑止がされないはずですね。 findやfindstrでフィルタしたいと思います。 表示の抑止は無理のようですので、皆さんからご提示いただいた案で行いたいと思います。 夜分遅くに対応していただきありがとうございました。
506 名前:デフォルトの名無しさん mailto:sage [2014/05/12(月) 00:47:54.43 ID:y0XlS5ot] 質問させていただきます YouTubeの動画IDがファイル名になっているファイル(例:動画ID.拡張子)がいくつかあるフォルダがあります フォルダ内にあるファイル全てを 動画IDを元にhtmlからtitleを取得して「動画ID_動画タイトル.拡張子」に一括変更したいのですが そのようなことは実現可能でしょうか? 以下のURLで例を挙げますと www.youtube.com/watch?v=jNQXAC9IVRw jNQXAC9IVRw.mp4というファイルがあります これをhtmlの「<title>Me at the zoo - YouTube</title>」から「Me at the zoo - YouTube」を取得し 「jNQXAC9IVRw_Me at the zoo - YouTube.mp4」というファイル名に変更したいです まずどんな手段で実現できそうなのかすら分からなかった為一番初めにこちらのスレで質問させていただきました バッチファイルで出来ることの範囲外でしたら何か他の手段で実現できそうな方法を助言していただけたらと思います よろしくお願いいたします
507 名前:デフォルトの名無しさん mailto:sage [2014/05/12(月) 02:17:57.44 ID:OSTAWnZg] 自分でやるとするならいくつかのツール、curl、yagrep、onigsed、nkf32 を組み合わせる。 ファイル名を for とかで適当に取得 & 動画URL生成 curl で動画URLにアクセス、 grep (yagrep) でタイトル抜き出し、nkf32 で SJIS化、 sed (onigsed) でファイル名に使えない文字などを適当に置換 & ファイル名を生成 リネーム 上であげたツール4つと正規表現のちょっとした知識があればこんな感じで概ね可能かと。 他の手段(バッチじゃない何か)使えるひとならもっとスマートにできると思う、 試さずに書いているので何か変だったらごめん。
508 名前:デフォルトの名無しさん mailto:sage [2014/05/12(月) 15:58:45.34 ID:c15PXCNt] telnetとか使って無理やりいたすのがお前らのJOBじゃないのか!?
509 名前:デフォルトの名無しさん mailto:sage [2014/05/12(月) 16:44:30.55 ID:VDtB2Dlh] JScriptやらRubyやらを使えば良いんちゃう
510 名前:デフォルトの名無しさん mailto:sage [2014/05/12(月) 17:58:34.90 ID:y9Wttb40] >>507 そのメソッドでスクレイパー書いたことあるけど、辛かった
511 名前:デフォルトの名無しさん mailto:sage [2014/05/12(月) 18:35:18.01 ID:lu6e4KQq] >>506 @if (0)==(0) echo off cscript.exe //nologo //e:jscript "%~f0" %* goto :EOF @end var sh = new ActiveXObject( "WScript.Shell" ); var fs = new ActiveXObject( "Scripting.FileSystemObject" ); var arg = WScript.arguments; if (arg.length != 1) { WScript.echo("引数1にフォルダ名を指定してください"); WScript.quit(0); } if (fs.FolderExists(arg(0))==false) { WScript.echo("フォルダが存在していません"); WScript.quit(0); } sh.CurrentDirectory = arg(0); var folder = fs.GetFolder( "." ); var em = new Enumerator( folder.Files ); for( em.moveFirst(); !em.atEnd(); em.moveNext() ) { if (em.item().Name.match(/^([^_.]+)\.mp4$/,"i")) { var id=RegExp.$1; var title=GetYoutubeTitle(id); if(title!="YouTube") { //video not existの簡易判定 var file=fs.GetFile(em.item().Name); file.name=id+"_"+title+".mp4"; //対象ファイルをyoutubeID_title.mp4にリネーム WScript.Echo("rename - "+em.item().Name+" --> "+file.name); } else {WScript.Echo("skip - "+em.item().Name);} } else {WScript.Echo("skip - "+em.item().Name); continue;} }
512 名前:デフォルトの名無しさん mailto:sage [2014/05/12(月) 18:35:50.65 ID:lu6e4KQq] fs = null; sh = null; function GetYoutubeTitle(Id) { var http = WScript.CreateObject("Msxml2.XMLHTTP"); http.Open("GET", "www.youtube.com/watch?v="+Id, false); http.Send(); // 送信 var re = new RegExp("<title>(.*?)</title>","i"); http.responseText.match(re); return RegExp.$1; }
513 名前:デフォルトの名無しさん mailto:sage [2014/05/12(月) 20:30:00.12 ID:lu6e4KQq] ●23行目 var title=GetYoutubeTitle(id); ↓ var title=CnvFName(GetYoutubeTitle(id)); ●関数追加 //ファイル名として使用できない文字を全角文字に置換する function CnvFName(s) { var invalid_chars = {'<':'<','>':'>','*':'*', '"':'”', '?':'?', '\\':'¥', '/':'/', '|':'|', ':':':' }; return s.replace(/[|:/<>*"?\\]/g, function (w){return invalid_chars[w];}); } ●備考 リネーム後のファイルが再び対象となることがあるが、これを避けたいのなら 一旦フォルダ内のファイル一覧を配列に取り、それをループさせる。 また、ファイル名の文字数チェック(255文字)も必要なら追加。
514 名前:デフォルトの名無しさん mailto:sage [2014/05/12(月) 21:29:34.26 ID:co2+qduL] >>510 それはなんとも乙。 本体というか >>507 の 根っこは「pixiv」や「小説を読もう」 とかのを拾ってくる用バッチ だったので個人的にモチベーションは高くて辛くは無かったかなw
515 名前:510 mailto:sage [2014/05/12(月) 22:07:09.17 ID:y9Wttb40] >>514 ・・・俺も小説家になろうのダウンローダ書いてたけど、なんでこんなところで被るのかと。 ちなみに出来が悪くて今はAndroidアプリに丸投げ中だけどコッチも出来が微妙という… やる気が出たらnode.jsで一から書き直すんだ、俺。と言ってはや2ヶ月……
516 名前:デフォルトの名無しさん mailto:sage [2014/05/12(月) 22:07:19.86 ID:KlfPZvfD] >>511-513 ありがとうございます!! できました!凄いです!感動しましいた! 最初こちらの環境では「msxml3.dll: アクセスが拒否されました。」というエラーにより実行できなかったのですが http.Open("GET", "www.youtube.com/watch?v="+Id, false); のhttpをhttpsに書き換えたら一応動きました >>507 さんもありがとうございました!
517 名前:デフォルトの名無しさん mailto:sage [2014/05/12(月) 22:09:46.97 ID:lu6e4KQq] ●mp4以外にflvにも対応させるには、21行目から27行目までを以下に置換 if (em.item().Name.match(/^([^_.]+)\.(mp4|flv)$/,"i")) { var id=RegExp.$1; var oldname=em.item().Name; var ext=RegExp.$2; var title=CnvFName(GetYoutubeTitle(id)); if(title!="YouTube") { //video not existの簡易判定 var file=fs.GetFile(em.item().Name); file.name=id+"_"+title+"."+ext; //対象ファイルをyoutubeID_title.mp4にリネーム WScript.Echo("rename - "+oldname+" --> "+file.name); ●また、念のためにfunction GetYoutubeTitleのreturn文の上に http=null; を挿入しとくと精神的に良いかと
518 名前:デフォルトの名無しさん mailto:sage [2014/05/12(月) 23:36:41.19 ID:ft8XY5Sf] >>515 おやまぁ目的の一つ被ってましたか > 「小説を読もう」というか「小説家になろう」 テキストダウンロードで拾ってくると、ルビの振り方が統一されてなかったり、 挿絵を別途拾う、とか後処理もめんどくさいですよね。 node.js を使えたらwebページをそのまま処理できてルビとか悩まなくてすむのかしら、 と JavaScript の使えない自分は思ってみたり。 スレチごめんなさい
519 名前:デフォルトの名無しさん mailto:sage [2014/05/12(月) 23:49:14.62 ID:KlfPZvfD] >>517 flvの対応までありがとうございます http=null;挿入しておきました ありがとうございました!
520 名前:デフォルトの名無しさん [2014/05/13(火) 21:09:59.57 ID:bU/8dhDh] こんばんは、質問させてください。 ttp://blog.livedoor.jp/swing26/AutoEncode2.bat この動画エンコード用のbatファイルを利用しているのですが 下記の記述をリネーム等一切せずにただ元のファイル名のまま移動だけさせたいと考えています。 単純に行を消しただけだとエラーに成ってしまうのですが、どのように直せば宜しいでしょうか。 rem ~~~~~~ファイルを指定フォルダへ移動 + リネーム + 回数付記:フォルダの中のmp4を数え、1を加えた数を回数に設定。~~~~~~ :MOVEcom if exist "%MP4folder%\%FolderName%" (goto movefile) mkdir "%MP4folder%\%FolderName%" :movefile for /f "usebackq" %%i in (`dir /b "%MP4folder%\%FolderName%"^|find /c "%FolderName%"`) do ( set kaisuu=%%i ) set /a kaisuu+=1 ren "%filename:~1,-4%.mp4" "%FolderName%#%kaisuu%.mp4" & move /-y "%~dp0%FolderName%#%kaisuu%.mp4" "%MP4folder%\%FolderName%" mkdir "%TSfolder%\%FolderName%" & ren temp.ts "%TS%#%kaisuu%.ts" & move /-y "%~dp0%TS%#%kaisuu%.ts" "%TSfolder%\%FolderName%"
521 名前:デフォルトの名無しさん mailto:sage [2014/05/14(水) 14:06:05.60 ID:aKf3CI71] あまりに酷いbatに全員ドン引き 初心者過ぎる質問に更にドン引き
522 名前:デフォルトの名無しさん mailto:sage [2014/05/15(木) 00:07:46.45 ID:N7Q6KVTa] リネームもしないで移動させるだけなら 全部消して一行書くだけだからなぁ…
523 名前:デフォルトの名無しさん mailto:sage [2014/05/15(木) 02:48:01.95 ID:3O8Jckao] 元のバッチ見てないから分からんが、リネームなしだと最後の行が駄目臭いんだが。 とりま後ろから二行目を move /-y "%filename:~1,-4%.mp4" "%MP4folder%\%FolderName%" かな。
524 名前:デフォルトの名無しさん mailto:sage [2014/05/16(金) 02:02:45.87 ID:+KKtBldE] 動画のエンコードバッチで『バッチの中で複数のバッチを実行する』という事をしています 録画終了後、バッチファイル1でリネーム&フォルダBへ移動 フォルダBへ移動後、バッチファイル2を実行しリネームしたファイルを読み込み、エンコード開始 こうするとフォルダBのエンコードバッチが同じフォルダにあるリネームされた動画ファイルを読みに行くのですが フォルダAに動画ファイルが無いという旨のエラーが出て終了してしまいます。 フォルダBでバッチファイル2に動画を直接ドラッグアンドドロップすると正常に動くのですが バッチで同じことをしようとする場合には何か特別な事をしなければいけないのでしょうか。
525 名前:デフォルトの名無しさん mailto:sage [2014/05/16(金) 02:26:40.76 ID:+gdxFKDb] >>524 フォルダAっていうのはいったい何だ。 echo onで実行過程を見ればすぐ問題は解決する気がするが。 どうせカレントディレクトリが違うって程度だろう
526 名前:デフォルトの名無しさん mailto:sage [2014/05/16(金) 03:26:58.99 ID:+KKtBldE] >>525 記入不足でした、フォルダAは録画ファイルとバッチファイル1が置いてあるフォルダです。 bat弄り始めて2日のビギナーですみません、カレントディレクトリを移すコマンドというのを試してみます。
527 名前:デフォルトの名無しさん mailto:sage [2014/05/17(土) 08:29:08.67 ID:7hm1D3vf] 録画云々ってことは別ドライブに移動させるとかしてそうな気がするんだけど、 ディレクトリだけじゃなくてドライブも違うのに、カレントドライブ変更し忘れた、とかありそう。 もしそうならCDコマンドに/Dオプション付けてフルパス指定するとかでどうぞ。
528 名前:デフォルトの名無しさん mailto:sage [2014/05/17(土) 12:13:50.74 ID:BiK471B/] cd /dはUNCパスには無力だから、自動でネットワークドライブ割り当ててくれる pushdの方がいいよ
529 名前:デフォルトの名無しさん mailto:sage [2014/05/17(土) 14:50:29.76 ID:TPyMjFFn] pushd使ってpopdしないで放置してって何回もやったらドライブどうなるの?
530 名前:デフォルトの名無しさん mailto:sage [2014/05/18(日) 12:23:35.53 ID:utpaGJWH] CMD.exeの/Sオプションってどういう時に使うの? イマイチ使いどころがわからない…
531 名前:デフォルトの名無しさん mailto:sage [2014/05/18(日) 13:07:54.34 ID:fAlXIwAd] >>527 >>528 ありがとうございました。おかげさまで無事複数のbatが動くようにできました。 もう一点質問なのですが、batファイルの実行にあたって、フォルダ内の全てのファイルを対象一回ずつ実行する方法はありますでしょうか。。 例えば、エンコード用のbatファイルがある場所で call c:\B\enc.bat *.ts これを実行すると、Bフォルダ内にあるTSファイル一つだけがenc.batで実行されます。が複数ある場合はそちらは対象として実行されませんでした。 TSファイルが複数ある場合に1つずつ順番に同処理を行う方法はありますでしょうか。
532 名前:デフォルトの名無しさん mailto:sage [2014/05/18(日) 13:16:29.16 ID:vCR91VC7] for %%i in (*.ts) do call c:\B\enc.bat "%%i" enc.batそのものにファイルを次々にエンコするように書く(実行に引数不要)とかもあり。
533 名前:デフォルトの名無しさん mailto:sage [2014/05/18(日) 14:26:50.09 ID:fAlXIwAd] >>532 迅速なご返答ありがとうございます。 こちらの記述でさっそく試してみます。
534 名前:デフォルトの名無しさん mailto:sage [2014/05/18(日) 15:17:01.31 ID:fAlXIwAd] >>532 無事TS毎の実行ができました。ありがとうございます。 恐縮なのですが、もう一点質問させてください。 無事エンコード環境が整ったと思ったのですが、一点問題が出てきました。 私の環境だと録画ファイルを別ドライブへコピーして保存しています。 copy c:\録画\*ts c:\TS\ このコピーの際に、別途録画中のファイルがあると、それも一緒にコピーが実行されてしまいbatが固まってしまいました。 録画中(使用中)のファイルはbat処理の対象にしない方法等はありますでしょうか。 宜しくお願い致します。
535 名前:デフォルトの名無しさん mailto:sage [2014/05/18(日) 15:27:24.31 ID:lJKMM0WQ] forfiles /d -1とかやればいいんじゃね
536 名前:デフォルトの名無しさん mailto:sage [2014/05/18(日) 15:39:39.71 ID:vCR91VC7] >>534 録画ツールで録画終了時に何かさせるって事出来るだろ。 tvrockかedcbか何使ってるか知らんが。 録画終了直後に今録画したばかりのファイルを一つずつ 保存用フォルダに移動させりゃいいだろ。 そうすると録画フォルダには録画中のファイルしか 存在しないことになり、一々区別の必要は無くなる。
537 名前:デフォルトの名無しさん mailto:sage [2014/05/19(月) 22:44:50.28 ID:v7YGBcxx] どなたか>>530 をお願いします…
538 名前:デフォルトの名無しさん mailto:sage [2014/05/21(水) 01:54:57.82 ID:jSKasLCc] 実行したいコード文字列をそのまま渡したい時に。 例えば、外部CMD.EXEで実行したいコード中に引用符「"」が含まれている時、 引用符の文字「"」を評価せずに、ただの文字として渡せる。 逆に/sを使わない方法だと、「"」を含む特殊文字を「^」でエスケープする必要がある。 使い方は、評価するコード全体を引用符で括って、/sオプションを併用する。 $ cmd /s /c "%EvalCode%" 外側の引用符を「'」に置き換えてみると理解しやすいかも。 set EvalCode=args args.exe rem ○:eval:'args args.exe' & cmd /c %EvalCode% rem ×:eval:'"args args.exe"' & cmd /c "%EvalCode%" rem ○:eval:'args args.exe' & cmd /s /c "%EvalCode%" set EvalCode="args args.exe" "args" rem ×:eval:'args args.exe" "args' & cmd /c %EvalCode% rem ○:eval:'"args args.exe" "args"' & cmd /c "%EvalCode%" rem ○:eval:'"args args.exe" "args"' & cmd /s /c "%EvalCode%" # 間違ってたらスマソ
539 名前:デフォルトの名無しさん mailto:sage [2014/05/21(水) 08:43:21.34 ID:JTjlvF/q] このスレでコメント行を # とか... ひっとらえろ!
540 名前:デフォルトの名無しさん mailto:sage [2014/05/21(水) 09:25:58.57 ID:ZkjZOJnO] ::ヒャー echo ニゲロー
541 名前:デフォルトの名無しさん mailto:sage [2014/05/21(水) 10:23:03.20 ID:FKaEHAnJ] まぁバッチファイルにPower Shellとか書くだけなら書けるしなぁ。スレ主によるとJScript,Perlまで含まれるらしいからなんでもありだろ
542 名前:デフォルトの名無しさん mailto:sage [2014/05/21(水) 11:01:59.88 ID:t9OqPpuo] #.exeを作ってPathにいれときゃOk
543 名前:デフォルトの名無しさん mailto:sage [2014/05/21(水) 22:24:16.50 ID:gR5PAME8] バッチファイル 埋め込み 言語名とかでやると 幾つかのスクリプトはやり方が出てくるね、もちろんjsもperlも出てくる
544 名前:デフォルトの名無しさん mailto:sage [2014/05/22(木) 15:25:48.42 ID:jxaWow30] ひっとらえろ→ヒットラーエロ→総統エロ→機密漏えい→きみ、えろい
545 名前:デフォルトの名無しさん mailto:sage [2014/05/26(月) 06:37:11.07 ID:YzA3p+bh] cmd.exe /c start "" "myprog.exe" とほぼ同等の機能を持つ shellexecute.exe myprog.exe みたいな標準かsysinternalレベルの準標準?のコマンドラインツールないですか cmdでもいいんですけど一瞬窓が見えるのがかっこ悪い…
546 名前:デフォルトの名無しさん mailto:sage [2014/05/26(月) 07:41:59.81 ID:UJEeKjCa] 呼び出し元がバッチファイルならstartの/MINオプション SysinternalsにもShellRunasとかpsexecがあったような それか、wscriptで小さいプログラム書くのもいいと思う あと、そもそもプラットフォームがコンソールになってる実行ファイル (いわゆるコマンドラインツール)の場合はOS側でコンソール出すぞ?
547 名前:デフォルトの名無しさん mailto:sage [2014/05/27(火) 01:44:45.18 ID:QVZq5peD] rundll32.exe shell32.dll,ShellExec_RunDLL "myprog.exe" hoge rundll32.exe url.dll,FileProtocolHandler "myprog.exe"
548 名前:デフォルトの名無しさん [2014/05/27(火) 16:46:59.58 ID:hUdGWYaj] バッチファイルで、unicode、wchar_t文字列の引数を受け取る方法ってありませんか?
549 名前:デフォルトの名無しさん mailto:sage [2014/05/27(火) 22:22:34.54 ID:0lDTI3dH] Unicode文字列の引数を使いたいのなら、バッチファイルの代わりにVBScriptファイルを//uオプション付で使うのが無難だと思う
550 名前:デフォルトの名無しさん mailto:sage [2014/05/28(水) 01:36:04.90 ID:P9eKilM/] %~z1 でファイルサイズが取得できると思ったけど サイズがでかいと set /a では計算できなかった。 32ビット(4G)の範囲しか計算できないんだな。 パテ切り用にメガバイトで取得するのが目的だから桁数削るのはいいけど 合計を計算するから CALL %%変数%% じゃ引き継げなくてめんどくさいことに。 setlocal enabledelayedexpansion set imagesize=0 for %%i in (*.iso) do ( set temp00=%%~zi set /a imagesize=imagesize+!temp00:~0,-6! ) set /a imagesize=imagesize+imagesize/20 if %imagesize%==0 ( echo ファイルがありません。 pause >nul GOTO :QUIT ) endlocal && set imagesize=%imagesize%
551 名前:デフォルトの名無しさん [2014/05/28(水) 06:57:48.15 ID:hYv9h/w1] >>549 サンクス それでやってみます
552 名前:デフォルトの名無しさん mailto:sage [2014/05/28(水) 13:43:30.39 ID:EKMn2nMr] 個人レベルでの利用なら for /f "tokens=3" %%I in ('dir /-c /a-d *.iso 2^>nul ^| findstr /v "^[0-9]" ^| find "のファイル"') do echo sum_size=%%I
553 名前:デフォルトの名無しさん mailto:sage [2014/05/28(水) 18:25:10.93 ID:P9eKilM/] あ〜!なるほどなるほど!ああ〜!なるほどー! ところでサイズの計算は imagesize+imagesize/20 じゃなくて imagesize-imagesize/22 でした。
554 名前:デフォルトの名無しさん mailto:sage [2014/05/28(水) 22:07:20.42 ID:lbZqXReU] 以前数値を分割して多数桁の計算をするバッチ例がアップされたような