全部 1- 101- 201- 301- 401- 501- 601- 701- 801- 901- 最新50
  
    - 【.cmd】 バッチファイルスクリプト %10 【.bat】
 
 
- 
      1デフォルトの名無しさんsage2013/07/19(金) 12:45:15.17
    
- 
      拡張子が .cmd または .bat のバッチファイルのスクリプティング(プログラミング)に関わる
 質問,テクニック(JScript,Perl等の埋め込みなど含む),関連情報のためのスレです。
 
 ※何でも無理矢理バッチでやろうとせず、WSH等の使用も検討しましょう。
 前スレ
 【.cmd】 バッチファイルスクリプト %9 【.bat】
 http://toro.2ch.net/test/read.cgi/tech//
 
 それ以前の過去スレ
 %8  http://toro.2ch.net/test/read.cgi/tech//
 %7  http://hibari.2ch.net/test/read.cgi/tech//
 %6  http://hibari.2ch.net/test/read.cgi/tech//
 %5  http://pc12.2ch.net/test/read.cgi/tech//
 %4  http://pc12.2ch.net/test/read.cgi/tech//
 %3  http://pc11.2ch.net/test/read.cgi/tech//
 %2  http://pc12.2ch.net/test/read.cgi/tech//
 %1  http://pc11.2ch.net/test/read.cgi/tech//
- 
      2デフォルトの名無しさんsage2013/07/19(金) 13:58:16.64
    
- うんちっち
- 
      3デフォルトの名無しさんsage2013/07/19(金) 20:09:20.20
    
- 
      @echo ^>^>1乙
    
- 
      4デフォルトの名無しさんsage2013/07/20(土) 14:17:08.00
    
- wshもここでええのんか?
- 
      5デフォルトの名無しさんsage2013/07/20(土) 15:58:37.65
    
- お前ら、wsh使ってますか? Part8
- 
      6デフォルトの名無しさんsage2013/07/21(日) 19:30:14.12
    
- C:¥Users¥user¥desktop
 の時にdesktopだけを表示したいのですがよい方法はありませんか
- 
      7デフォルトの名無しさんsage2013/07/22(月) 23:17:08.85
    
- 「set /p hizuke=日付を入力して下さい:」
 とやると
 「日付を入力して下さい:」
 と出ますが、この時に
 「日付を入力して下さい:2013/07/22」
 のように今日の日付をデフォルト値として表示出来ないでしょうか?
 思いつきで
 「set /p hizuke=日付を入力して下さい:
    とかやってみましたがもちろんダメでした…
- 
      8デフォルトの名無しさんsage2013/07/23(火) 00:10:32.95
    
- set /p hizuke="日付を入力して下さい:%date%"
- 
      9デフォルトの名無しさんsage2013/07/23(火) 00:17:29.12
    
- 空入力でデフォルト値
 set hizuke=%date%
 set /p hizuke=日付を入力して下さい:%hizuke%
- 
      107sage2013/07/23(火) 01:10:42.24
    
- ありがとうございます。
 ただ言い忘れていましたが、表示したデフォルト値をキーボードで変更できるようにしたいのです。
 例えば2013/07/22と表示されたら最後の2を消して5にしたりといった具合にです。
- 
      11デフォルトの名無しさんsage2013/07/23(火) 22:36:55.04
    
- schtasksで長いタスク名を確認する方法はありますでしょうか?
 例えば
 
 schtasks /create /tn "メモ帳を起動してやるぞ!こんちくしょう!" /tr c:¥windows¥system32¥notepad.exe /sc daily /st 23:00:00
 
 と入力して「メモ帳を起動してやるぞ!こんちくしょう!」というタスク名のタスクを作成します。
 すると、
 
 schtasks /query
 
 と入力して先ほど作ったタスクを表示させるとタスク名が途切れて表示されてしまいます。
 これでは途切れていない正しいタスク名がわからず、タスクを削除する時などにタスク名を指定できません。
 タスクスケジューラでもPowerShellでもいいので途切れていない正しいタスク名を確認する方法を
 知っている方がいましたら教えて下さい。
- 
      12デフォルトの名無しさんsage2013/07/24(水) 17:34:48.71
    
- ありません
- 
      13デフォルトの名無しさんsage2013/07/24(水) 18:25:09.85
    
- 
      >>11
 へー最近はそんなことになってるんだねえ
 XPだとタスク名は欠けることなく全部出る
 何かオプションスイッチがあるんでないのかなあ
 まあ回避手段としては、タスクの実体は(XPの場合だと)tasksフォルダ内のファイル(xxx.job)なんで直接ファイル名を漁るとかかな
 for /f "tokens=* delims=" %%i in ('dir /b "%systemroot%¥tasks¥*.job"') do echo %%‾ni
- 
      1413sage2013/07/24(水) 18:33:40.73
    
- ヘルプ見たら
 schtasks /query /fo list
 または
 schtasks /query /fo csv
 で表示できるんでないかな
- 
      1511sage2013/07/24(水) 19:58:05.43
    
- 
      >>13-14
 /foオプションで出せるんですね。知りませんでした…
 "%systemroot%¥tasks"フォルダに保存されるというのも初めて知りました。
 これはこれで使い道が色々ありそうなので覚えておきます。
 助かりました。どうもありがとうございます。
 
 (実は家のPCはXP-Homeでschtasks無いので試すのは明日会社でですが…(笑))
- 
      16デフォルトの名無しさんsage2013/07/24(水) 22:11:11.93
    
- 3つの.exe ファイルが有るんですが、1つを実行するBATファイルを作りたいです
 どうすればいいですか?
- 
      17デフォルトの名無しさんsage2013/07/25(木) 00:10:35.11
    
- if
- 
      1815sage2013/07/25(木) 22:29:07.88
    
- 今日会社のPC(Win7)で/foオプション使ってうまくいきました。
 しかしWin7だとタスクのファイルは"%systemroot%¥system32¥tasks"フォルダに作成されるようです。
 OSの種類によってパスが変わるなんてめんどうな仕様ですよね…(泣)
- 
      19デフォルトの名無しさんsage2013/07/26(金) 07:44:45.38
    
- 仕様なんだからしようがない
- 
      20デフォルトの名無しさん2013/07/26(金) 18:01:38.77 ?2BP(0)
    
- 僕のpcにあるテキストファイルを全てusbにコピーしたいです。
 すぐにコピーしてペーストすれば使えるbatのコマンドを教えてください!
- 
      21デフォルトの名無しさんsage2013/07/26(金) 18:24:42.29
    
- @echo off
 echo pcにあるテキストファイルを全てusbにコピーしました!!!
 exit /b 0
- 
      22デフォルトの名無しさんsage2013/07/26(金) 20:15:51.22
    
- ありがとう!
- 
      23デフォルトの名無しさんsage2013/07/26(金) 20:48:56.63
    
- 
      >>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デフォルトの名無しさんsage2013/07/26(金) 20:51:53.63
    
- 
      >>20
 テキストファイルかどうか、テキストエディタで開いてみないとわからない
- 
      25デフォルトの名無しさんsage2013/07/26(金) 20:56:13.36
    
- 
      >>23
 DELコマンドじゃなくて、COPYコマンドだ。COPYコマンドなら、どこに送るかかかなければならない
- 
      26デフォルトの名無しさんsage2013/07/26(金) 20:57:20.88
    
- もうねます
- 
      27デフォルトの名無しさんsage2013/07/26(金) 21:05:58.98
    
- 誤ってDELコマンドでファイルを削除した場合、
 undeleteという英語版のソフトウェアで復旧できるかもしれない
 どれがいいのかしらない
- 
      28デフォルトの名無しさんsage2013/07/26(金) 21:11:54.85
    
- MOVEコマンドで、ひどいめにあったことがある。MOVEコマンドは、要注意
- 
      29デフォルトの名無しさんsage2013/07/26(金) 22:41:30.42
    
- ワイルドカードの指定が短いファイル名の方にも効いてしまう問題って
 Win7あたりで解消したんだっけ?
- 
      30デフォルトの名無しさん2013/07/27(土) 10:27:32.35 ?2BP(0)
    
- ではpc内のデータをすべて削除する場合はどうしたら?
- 
      31デフォルトの名無しさんsage2013/07/27(土) 12:14:00.07
    
- iso2bin.exe isoをbin 形式に変換するファイルを見つけたんですが
 使い方は、
 コマンドプロンプト → cd c:¥場所 → iso2bin track03.bin track01.iso
 コマンドプロンプを呼び出さず簡略化したいんですけどどうすればいいですか?
 D&D しても無理みたいです・・・orz
- 
      32デフォルトの名無しさんsage2013/07/27(土) 13:12:17.75
    
- バッチファイル経由でD&D する
- 
      33デフォルトの名無しさんsage2013/07/28(日) 16:46:39.69
    
- 
      >>29
 仕様は解消したりしないよ
 自分が短いファイル名を作るからだろ。自業自得ってもんだ。
 作らなきゃいいんだよ。
- 
      3417sage2013/07/28(日) 17:02:49.22
    
- ちょっと記述が間違ってたので一応訂正しときます。
 Win7ではSchtasksで作成したタスクはファイルとして作成されないようです。
 "%systemroot%¥tasks"フォルダも
 "%systemroot%¥system32¥tasks"フォルダも見ましたが自分が作成したタスクは見当たりません。
 "dir /s/b C:¥*.job"ってコマンド叩いても出てきません。
 コマンドで"Schtasks /query"を叩くともちろん出てきます
 そういう仕様に変わったのかな?まあ"Schtasks /query"で確認できるので困りませんが。
- 
      35デフォルトの名無しさんsage2013/07/28(日) 17:03:40.77
    
- 
      ↑は>>17ではなく>>18でした。すみません。
    
- 
      36デフォルトの名無しさんsage2013/07/28(日) 17:14:02.95
    
- forコマンドで文字列置換はできないのでしょうか?
 下記の<望む結果>を得たいのですが
 下のコマンドでも駄目でした。
 
 for /f %i in ('type test.txt') do echo %i:*:=%
 
 
 <test.txtの内容>
 ID:100
 名称:あああ
 価格:5000
 ID:200
 名称:いいい
 価格:8000
 
 <望む結果>
 100
 あああ
 5000
 200
 いいい
 8000
- 
      37デフォルトの名無しさんsage2013/07/28(日) 21:24:17.98
    
- for /f "delims=: tokens=2" %i in ('type test.txt') do echo %i
- 
      3836sage2013/07/29(月) 01:05:50.44
    
- 
      >>37
 でけましたーーーっ!!
 おありがとうございます!
 このように書くのですね。
 勘違いして遅延展開とかいうのを調べてました・・・(^_^;)
- 
      39デフォルトの名無しさん2013/07/31(水) 13:20:09.51
    
- すみません。教えてください。
 
 
 
 中身↓
 
 @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デフォルトの名無しさんsage2013/07/31(水) 13:52:52.02
    
- ファイルを指定する所にこんなの
 "file:%‾1"
- 
      41デフォルトの名無しさんsage2013/07/31(水) 16:40:42.73
    
- 
      >>40
 ありがとうございました!
 おかげさまでうまく行きました!
- 
      42デフォルトの名無しさんsage2013/07/31(水) 16:59:45.16
    
- 
      >>41
 いいってことよ
- 
      43デフォルトの名無しさんsage2013/08/04(日) 15:02:32.34
    
- バッチファイルから文字列をエコーしてファイルに流し込んで
 スクリプトを作成・実行ということをしているのですが、
 リダイレクト先のファイル行頭にスペースができてしまいます。
 
 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デフォルトの名無しさんsage2013/08/04(日) 15:13:20.70
    
- 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デフォルトの名無しさんsage2013/08/04(日) 15:38:17.83
    
- 
      >>44さんできました!
 echo;Set regEx = New RegExp>>%‾n0.vbs
 として解決しました。ありがとうございます。
 
 リダイレクト方法はいくつかあるようですね。
 本来ならカッコで囲んでひとまとめにするがシンプルなのでしょう。
 (
 echo;ほげ
 echo;ほげ
 )>"%‾n0.txt
 
 この方法は今回はバッチの前後の関係から制約があるため、このような方法でやってました。
 お答えいただきまして、素早い対応ありがとうございました。
- 
      4643sage2013/08/04(日) 16:40:57.42
    
- 
      >>44さんへ
 質問時に書き込んだ方法ですが、まるっきりの自己流だったようです。
 参考にしたサイトを見直してみたら、全然違ってました。昔の記憶をたよりに適当に書いてたようです。
 混乱させてすみませんでした。
 
 ちなみにこのサイトです。
 「全般/ファイルディスクリプタとリダイレクト - CMD.EXE TIPs」
 URLが長いので上のキーワードで検索してください。有名どころですが一応。では失礼します。
- 
      47デフォルトの名無しさんsage2013/08/04(日) 19:34:25.18
    
- 
      >>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デフォルトの名無しさんsage2013/08/04(日) 19:35:40.05
    
- 
      > つまり>>44はechoの直後にセミコロンとスペースが続いてからSetがあるように
 >>43と間違えた
- 
      49デフォルトの名無しさんsage2013/08/04(日) 19:46:45.63
    
- echo.>hoge.txt とか echo;>hoge.txt
 ってやったら空改行が出力されるのと同じ原理なのかな
- 
      50デフォルトの名無しさんsage2013/08/04(日) 20:27:29.78
    
- >%‾n0.vbs echo;Set fso = CreateObject("Scripting.FileSystemObject")
 だな
- 
      51デフォルトの名無しさんsage2013/08/04(日) 22:59:08.63
    
- いつからかコマンドプロンプトで日本語が■■■って表示されるようになっちゃったんですけど
 どうやって直せばいいんですか?
 ググって出てくるコードページを変えたりフォントを変えるのを試しても戻りませんでした
 XPです
- 
      52デフォルトの名無しさんsage2013/08/05(月) 04:37:36.99
    
- 
      >>51
 cmd.exeを再インストールするか諦めてCygwinとか使えばいいんじゃ?
 後はWin再インスコ
- 
      53デフォルトの名無しさんsage2013/08/05(月) 04:54:05.79
    
- 
      >>51
 レジストリ
 HKEY_CURRENT_USER¥Console
 を削除してみろ
 念のためバックアップしてからね
- 
      54デフォルトの名無しさんsage2013/08/18(日) 10:50:05.72
    
- = を含む文字列を = を含む文字列で置換するのに良い方法無いでしょうか?
 事前にIF使った総当りで入れ替えておく方法は何とかできたのですが
 下記の記述方で使えそうなエスケープなどあればと思いまして。
 
 
 :: A=B を B=A に置換
 set test=%test:A=B=B=A%
- 
      55デフォルトの名無しさんsage2013/08/18(日) 13:55:19.72
    
- 
      >>53
 遅くなりましたが
 この方法で復活しました
 ありがとうございました!
- 
      56デフォルトの名無しさんsage2013/08/18(日) 20:22:21.99
    
- BをCに蛙
 AをBに蛙
 CをAに蛙
- 
      57デフォルトの名無しさんsage2013/08/18(日) 20:31:28.88
    
- 
      >>56
 つまり、ループ内で遅延展開を用いた入れ替えをやれってことっすね!
 
 >>54
 vbsでregexpしちゃいなよ
- 
      58デフォルトの名無しさんsage2013/08/19(月) 02:53:58.72
    
- 頭が遅延してんの?
- 
      59デフォルトの名無しさんsage2013/08/19(月) 06:00:05.97
    
- 
      >>56-57
 レスどうもです、やっぱ無理ですかぁ
- 
      60デフォルトの名無しさんsage2013/08/19(月) 06:25:29.73
    
- power shellの話ははどこで話せばよいの?
 ざっと見たけどスレがないみたいなんだけど…
- 
      61デフォルトの名無しさんsage2013/08/19(月) 21:50:14.01
    
- Windows PowerShell Part4
- 
      62デフォルトの名無しさんsage2013/08/28(水) 23:25:21.40
    
- Javaみたいなコンパイルに失敗したらecho %errorlevel%で1って出力されるような言語で
 
 わざとエラーがでるコードTest.javaを用意して
 batファイルに
 javac Test.java
 echo %errorlevel%
 って書いてコマンドプロンプトから実行しても%errorlevel%が表示されません
 batファイルを実行した後に、手入力でecho %errorlevel%て打つと1って表示されます
 どうやってbatファイルからエラーレベルを出力できますか?
- 
      63デフォルトの名無しさんsage2013/08/29(木) 01:13:42.16
    
- うそでしょう
- 
      64デフォルトの名無しさんsage2013/08/29(木) 03:12:21.55
    
- echo %erorlevel%
 とか
- 
      65デフォルトの名無しさんsage2013/08/29(木) 04:34:12.99
    
- 
      >>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デフォルトの名無しさんsage2013/08/29(木) 04:48:47.80
    
- 
      >>65
 呼び出し元プロセスの環境変数は普通変えれんぞ。
 というかタスク作ってしまったら何も情報伝わらないし、その方法意味あるんか?
 
 なんとなく、
 〜(
 javac Test.java
 echo %errorlevel%
 )
 ってなってるとか、Typoがあるとか、そういうのの方が怪しい気がする。
 一番確実な対処はIF ERRORLEVEL 1とかの擬似環境変数ではない組み込み機能使って判定する方法だと思う。
- 
      67デフォルトの名無しさんsage2013/08/29(木) 05:07:02.44
    
- 
      >>66
 寝ぼけてたね
 確かに意味が無いな
 これはインストーラなどでPATH環境変数が変化した場合に有効な手段だった
- 
      6867sage2013/08/29(木) 05:39:08.45
    
- 寝ぼけてたけど、間違ったのは
 動作確認のために、コントロールパネルのシステムからユーザー環境変数を追加設定してやってたため
 ↓
 この場合環境変数の設定値が反映されるにはcmd.exeを起動しなおさないと反映されないので
- 
      69デフォルトの名無しさんsage2013/08/29(木) 09:13:27.67
    
- 
      >>68
 なるほど・・・現在の環境ではなくユーザの環境を読ませる一手間か
 start /Iもatもユーザの環境を読み直さないし、runasはスマートカードかパスワード入力が必要になってしまうんだな
 タスクはrunasと同等だし環境読み直すのも理解できるけど、エクスプローラからcmd起動したときとかはどういう挙動してんだろうコレ?
- 
      70デフォルトの名無しさんsage2013/08/29(木) 10:16:28.24
    
- すいませんsetlocal EnableDelayedExpansionで取得できました
 いまいちどうして取れたかわかりませんが
- 
      71デフォルトの名無しさんsage2013/08/29(木) 11:50:48.02
    
- 今時なぜコマンドプロンプトなんですか?
 powerShellを使わない理由はなぜでしょうか?
- 
      72デフォルトの名無しさんsage2013/08/29(木) 13:11:42.03
    
- 
      >>71
 コマンドプロンプトで足りるような用途にまで
 PowerShellを使わなきゃならん理由は何だ?
 まさか、自慢話を始めようとしてるのではないだろうな?
- 
      73デフォルトの名無しさんsage2013/08/29(木) 17:17:49.98
    
- 
      >>70
 うそでしょう
- 
      74デフォルトの名無しさんsage2013/08/29(木) 22:54:22.66
    
- 
      >>73
 66で指摘されてるようなやり方してたんじゃね。
 「すいませんsetlocal EnableDelayedExpansion(して、%errorlevel%を!errorlevel!にしたら)で取得できました」
 だと普通によくあるミス。
- 
      75デフォルトの名無しさんsage2013/08/29(木) 23:46:04.67
    
- 
      >>74
 すいません書き忘れてました
 そづえす%から!にも書き換えてます
- 
      76デフォルトの名無しさんsage2013/08/30(金) 00:18:49.86
    
- findstrで実行結果にファイル名を出さない方法はありますでしょうか?
 
 findstr "あああ" "C:¥test.txt"
 
 とファイルを完全に指定すれば実行結果は
 
 あああいいい
 いあああいい
 いいあああい
 
 のようになって、ファイル名は出ずに一致した行の内容だけが表示されます。
 しかし
 
 findstr "あああ" "C:¥*.txt"
 
 のようにワイルドカード指定にすると実行結果には
 
 C:¥test.txt: あああいいい
 C:¥test.txt: いあああいい
 C:¥test.txt: いいあああい
 
 のように一致した行の内容だけでなく、その行が含まれているファイル名まで表示されてしまいます。
 これをファイル名は出さないように出来ないでしょうか?
- 
      77デフォルトの名無しさんsage2013/08/30(金) 00:37:21.63
    
- for %i in ("C:¥*.txt") do @findstr "あああ" "%i"
- 
      78デフォルトの名無しさんsage2013/08/30(金) 01:04:42.61
    
- 
      >>76
 forfiles /?
- 
      79デフォルトの名無しさんsage2013/08/30(金) 02:12:22.49
    
- 
      >>70
 %〜%はその文字列を含むコマンドの実行前に展開されます。
 何らかの書き方が原因で、javacの実行からエラーレベル取得までが1つ(1行)のコマンドとして解釈されてしまったのでしょう。
 ()で括るとかもその一つ。&で繋ぐのもそれに含まれるっけ?
- 
      80デフォルトの名無しさんsage2013/08/30(金) 15:31:41.07
    
- type "C:¥*.txt" | findstr "あああ"
- 
      81デフォルトの名無しさんsage2013/08/30(金) 16:01:29.88
    
- call echo %%errorlevel%%
- 
      8276sage2013/08/30(金) 22:05:42.92
    
- 
      >>77、>>80
 ありがとうございます!
 どちらでも出来そうですね。
 来週会社で試してみますね。
- 
      8376sage2013/08/31(土) 08:34:39.52
    
- 
      >>78
 すみません、見落としてました。
 このコマンドは知りませんでした。
 
 forfiles /m "C:¥*.txt" | findstr "あああ"
 
 とすれば処理できそうですね。
 ただPCがWinXPなのでこのコマンド自体がありません…
 でも勉強になりました。
- 
      84デフォルトの名無しさんsage2013/09/01(日) 10:52:35.80
    
- findstrで一文字違いまで検索結果に含めたい時スマートな記述無いでしょうか?
 「いちごぱんつ」を検索して「いちのぱんつ」とか「いちごぱんだ」とかも同時に拾いたいのです
- 
      85デフォルトの名無しさんsage2013/09/01(日) 11:53:35.40
    
- ない
 
 いちごぱんつ
 *ちごぱんつ
 い?ごぱんつ
 いち?ぱんつ
 いちご?んつ
 いちごぱ?つ
 いちごぱん*
- 
      86デフォルトの名無しさんsage2013/09/01(日) 12:01:14.09
    
- findstrは複数文字列のOR検索するのに、
 パイプを使わない表記方法(二重引用符で囲んでスペース区切り)
 があるのがUNIX系のgrepコマンドより便利だよね
- 
      87デフォルトの名無しさんsage2013/09/01(日) 23:14:25.16
    
- おお、それでOR検索してくれるのか
 一行で済むならおkですありがとう
- 
      88デフォルトの名無しさんsage2013/09/07(土) 21:02:07.49
    
- echo %test%
- 
      89デフォルトの名無しさんsage2013/09/07(土) 21:44:23.13
    
- 
      >>85
 > *ちごぱんつ
 これ正規表現として構文エラーだろw
 まあこれに限らずどれも正規表現じゃなくてワイルドカードとして記述してるみたいだが
 findstrじゃワイルドカードは使えないだろwww
- 
      90デフォルトの名無しさんsage2013/09/08(日) 13:50:51.90
    
- dir /s /b "C:¥windows" >> ".¥a.txt"
 
 で更新中の.¥a.txtを
 
 findstr "hoge" ".¥a.txt"
 
 で検索してもエラーが起こることは絶対にないですよね?
- 
      91デフォルトの名無しさんsage2013/09/08(日) 14:41:10.54
    
- command.comじゃないんだからw
- 
      92デフォルトの名無しさんsage2013/09/08(日) 18:48:49.51
    
- forコマンドの/dオプションってどういう時に使うんだ?
 ↓のはのように書けば事足りると思うが?
 /rオプションもいまいち使いどころがわからない。
 
 for /d %i in ("c:¥temp¥*") do @echo %i
 
 for /f %i in ('dir /s /b /ad c:¥temp') do @echo %i
- 
      93デフォルトの名無しさんsage2013/09/08(日) 20:50:40.92
    
- テキストファイルが1つあり、そのファイルの奇数行目の内容だけを表示することって可能でしょうか?
- 
      94デフォルトの名無しさんsage2013/09/08(日) 22:01:56.01
    
- 
      >>92
 それいうとfor /Dに限らずforデフォルト動作もそうだし、
 dir /Sは再帰だからfor /Dと動作違う気がするんだが、
 まぁそれはそれとして置いとこう。
 の欠点
 ・単純にコマンドが長い
 ・パイプ動作なのでcmd /U環境でないとUnicode文字が使えない
 ・/Sだとフルパスで冗長だし/-Sだと相対パス的に美味しくない
 
 >>93
 可能だけど、処理が複雑化する予定があるなら別の言語を併用したほうが良い
 エスケープ周りで破綻してから再移植とかくっそダルいよ
- 
      95デフォルトの名無しさんsage2013/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デフォルトの名無しさんsage2013/09/09(月) 15:54:39.20
    
- 
      >>92
 for /r root %i in (.)
 
 
 >>94
 えらく詳しいのー感心感心
 
 隠しはどうする?
 
 
 >>95
 空行はどうする?
 find /n /v "" data.txt
 で行番号を振って、奇数行だけ
- 
      97デフォルトの名無しさんsage2013/09/09(月) 16:22:43.22
    
- 
      >>96
 すげぇ上から目線で重箱つついてるが、そんなんで人生大丈夫か?
 
 >隠しはどうする?
 隠しを列挙したいってケースより普通にfor /Dで済むケースのほうが多いから基本問題なし
 そうしなきゃ駄目な時は諦めて、欠点を潰すか無視をしてfor /Fを使えばいい
 一々全部の欠点例外を潰した万能定型文で…みたいな事はアホらしいからやりたくない
 妥協が許されないならハナから汎用言語でも使っとかないと只の苦行だわ
 
 >空行はどうする?
 それも使えない文字の一例にすぎないだろ
 行番号を消す処理も必要になるし、その手の対策の積み重ねも複雑化を招く
- 
      9892sage2013/09/09(月) 21:15:46.13
    
- 
      >>94-95
 ご回答ありがとうございます。
 なるほど、は色々短所が目立ちますね。
 実行速度も比較するのが馬鹿らしくなるほど>>>>>>>>でした。
 ちなみに>>93も私ですw
 これも前途多難な感じなので他の方法を考えます。
 なんか話が高度になってきたのでこの辺で…
- 
      99デフォルトの名無しさんsage2013/09/11(水) 16:23:50.79
    
- set の文字列置換で文字列中に含まれる=自体を置換(削除)したいのですがどうしたらよいでしょうか?
 
 set a=abc=def
 set a=%a:==%
 
 とやるとエラーになりますんで…
- 
      10054sage2013/09/11(水) 17:10:40.49
    
- お、俺じゃないからね!
- 
      101デフォルトの名無しさんsage2013/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デフォルトの名無しさんsage2013/09/11(水) 18:26:47.00
    
- for /f "delims== tokens=1,2" %i in ("%a%") do set b=%i%j
- 
      103101sage2013/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" 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デフォルトの名無しさんsage2013/09/12(木) 22:31:25.95
    
- 
      通りすがりだが>>102のでバッチリできたぞ?
 これ>>54にも使えるんじゃね?
- 
      105デフォルトの名無しさんsage2013/09/12(木) 23:23:43.17
    
- 
      >>104
 取り敢えずそれで良いとしても、EOL指定とか空行とか非置換行とかメタ文字とか…
 最終的には別言語併用出来るようにしたほうが楽な可能性があるって事は留意しておいても良いと思う。
- 
      106デフォルトの名無しさんsage2013/09/13(金) 14:01:17.61
    
- ある実行中のバッチファイル自身の名前は %0 で得ることが出来ますが、
 実行中のバッチファイルを呼出したバッチファイルの名前を知る方法はありますか?
 具体的にやりたいのは shebang の再現です。
 
 例えば以下のように始まる perl スクリプトの拡張子を bat にしておきます。
 
 #!/usr/local/bin/perl
 ここに perl スクリプトの内容
 
 そして #!.bat という名前のこんな感じのバッチファイルをパスが通った適当なところに置いておきます。
 
 %* ほにゃらら & exit /b
 
 こうすることでおおざっぱにではありますが schebang っぽくできると思うのですが、
 このほにゃららのところをどうすればよいか思い付きません。
- 
      107デフォルトの名無しさんsage2013/09/14(土) 05:01:55.71
    
- 男は黙って D:/Perl/bin/perl.exe ほにゃらら.pl
 
 いっそのことCygwinでも入れちゃえば
- 
      108デフォルトの名無しさんsage2013/09/14(土) 08:44:32.38
    
- 
      >>107
 Cygwin も Msys も導入済みです。
 だからそれらを使わないときでもそれに挙動を合わせたいというのが動機のひとつです。
 
 また、 Perl を例に挙げましたが実際に使う言語処理系は他のものがメインです。
 処理系起動時のオプションでないと切替えられない要素があるのですが、
 個別に拡張子を割当てるのが煩雑になるというのが関連付けと PATHEXT を使わない理由です。
 
 バッチファイルでやりたいのでバッチファイルスレで質問してるつもりなんですが、
 他の方法を使わない理由をいちいち全部挙げてからでないと回答が出ないもんなんですか?
- 
      109デフォルトの名無しさんsage2013/09/14(土) 09:00:40.41
    
- 全部挙げてもでないかもよ
- 
      110デフォルトの名無しさんsage2013/09/14(土) 10:01:01.37
    
- プログラム類ってのは目的を達成するための手段にすぎないのだから、特定の手段に拘るだけ無駄というか。
 ダメ文字の件とか色々あるし、ドンピシャなテクニックが見つからない・思いつかないなら素直に手を変えるべき。
 
 ハッカー文化的なものだが、バッチファイルってのは手軽な分、そういう手段は問わない傾向がより強い印象。
- 
      111108sage2013/09/14(土) 11:44:58.17
    
- ちょっと煽り気味でしたね。 すいません。
 一応 C/C++ や JScript もそこそこ使えるつもりですが、呼出し元のプロセスが cmd.exe であることはわかっても、
 あるバッチファイルを呼出したバッチファイルが何かということを調べる方法は見付かりませんでした。
 そんなわけで「バッチファイルの機能」でどうにかなる可能性の方がまだ高いだろうと考えました。
 要するに手段に拘っているわけではなく、色々と検討した結果としてバッチファイルに望みがあると思っているのです。
- 
      112デフォルトの名無しさん2013/09/14(土) 12:28:33.75
    
- 呼出し元から特定の引数渡すとかあるだろうになあ
- 
      113108sage2013/09/14(土) 12:31:13.55
    
- 
      >>112
 要件は >>106 で述べた通りです。
 可能であれば shebang 風 (完全に互換とまでは言わずとも) にしたいのです。
- 
      114デフォルトの名無しさんsage2013/09/14(土) 13:47:04.98
    
- 
      >>113
 ttp://scripting.cocolog-nifty.com/
 出来たかどうかは忘れたけど、ここでバッチの呼び出し元がどうのこうのの記事を読んだ気がする
- 
      115デフォルトの名無しさんsage2013/09/14(土) 13:54:41.57
    
- 1.bat
 
 call 2.bat "%‾0"
 
 2.bat
 
 echo 呼び出し元:%‾1
 exit /b
- 
      116108sage2013/09/14(土) 14:04:49.20
    
- 
      >>114
 今回の件に役立ちそうな情報は見付かりませんでした。
 
 
 でも、面白い記事が多いですね。 紹介ありがとうございます。
- 
      117デフォルトの名無しさんsage2013/09/14(土) 14:11:23.69
    
- 
      >>108
 wshでWMI介して親プロセスのコマンドラインを取得
 互換性ほしいなら他にないと思う
- 
      118デフォルトの名無しさんsage2013/09/14(土) 14:31:30.89
    
- 
      バッチファイルで現在や親のプロセスIDを調べる。: Windows Script Programming
 http://scripting.cocolog-nifty.com/blog/2007/01/id_548f.html
 これをプロセスIDからコマンドラインに変えればいいじゃね?
- 
      119デフォルトの名無しさんsage2013/09/14(土) 14:36:01.77
    
- 昔のtlist.exeはppidを出してたから、これ使えばいいよ
- 
      120108sage2013/09/14(土) 15:17:15.13
    
- 
      既に >>111 で述べましたが、それらの方法で得られるのはあくまでも cmd.exe を呼出したプロセスであり、
 cmd.exe 内で実行されたバッチファイルの呼出し元ではありません。
- 
      121デフォルトの名無しさんsage2013/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
- 
      122108sage2013/09/14(土) 17:05:15.57
    
- 
      >>121
 すばらしい。
 このスレ的にはアレですが、解決策ありがとうございます。
- 
      123デフォルトの名無しさんsage2013/09/14(土) 22:14:15.91
    
- 
      おいおい
 
 >>108
 > バッチファイルでやりたいのでバッチファイルスレで質問してるつもりなんですが、
 > 他の方法を使わない理由をいちいち全部挙げてからでないと回答が出ないもんなんですか?
 
 こんなこといってたくせにそれかよ
- 
      124108sage2013/09/14(土) 23:13:28.98
    
- 
      >>123
 出来ない理由を覆されたので問題ないです。
- 
      125デフォルトの名無しさんsage2013/09/15(日) 01:55:19.47
    
- 
      >>121
 バイナリのインストールを必要としない方法ではほぼWSHしか無いが、WMI呼べるならなんでも良いだろう。
 一時ファイルにスクリプト吐いてdebugコマンドで必要な実行可能バイナリ生成して実行、とかも不可能ではない。
 >>123
 111で反省してたように見えたのに、なんつうかデフォでそういう人なんかね?
- 
      126デフォルトの名無しさん2013/09/15(日) 05:59:54.41
    
- 自分で考えようともしない馬鹿だからどーせすぐ死ぬだろ
- 
      127デフォルトの名無しさんsage2013/09/15(日) 06:00:10.27
    
- debugって32bitだけじゃないの
- 
      128デフォルトの名無しさんsage2013/09/15(日) 06:56:29.77
    
- 
      >>127
 debugは16bit時代の遺物だからなぁ…
 テキスト化したCOMファイル…もダメか。
 まだ手はあると思うけど、出てこない。
- 
      129デフォルトの名無しさんsage2013/09/15(日) 11:48:12.32
    
- 現在ログインしているユーザーのユーザーフォルダを表すパスって ‾ ですよね?
 cd ‾ でそのユーザーのユーザーフォルダにいけると思ったんですができませんでした
- 
      130デフォルトの名無しさんsage2013/09/15(日) 11:52:40.77
    
- cd %USERPROFILE%
- 
      131デフォルトの名無しさんsage2013/09/15(日) 12:02:53.19
    
- 
      >>130
 /dオプション付けた方が安全だよ
 pushdならオプション不要だけど
 
 cd /d %USERPROFILE%
 pushd %USERPROFILE%
- 
      132デフォルトの名無しさんsage2013/09/15(日) 14:41:32.93
    
- 
      >>129
 節子それUnix/Linuxの話や
 cmd.exeでは上の通り環境変数を参照するのが良いかと
 %homepath%とかもある、俺は何となく字面的にこっちが好きだから使ってるだけだが
- 
      133デフォルトの名無しさんsage2013/09/15(日) 15:19:04.82
    
- @rem = '--*-Perl-*--
 @perl -x -S %0 %*
 @goto :eof
 @rem ';
- 
      134デフォルトの名無しさんsage2013/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デフォルトの名無しさんsage2013/09/16(月) 19:56:19.54
    
- 
      >>134
 for /Fを使ってSourceとDestを環境変数に突っ込んで後で出力する。
 set /Pのプロンプト文字列(改行されない)を使うって手もあったと思うが、そこまで拘るならバッチ以外も想定したい所。
- 
      136134sage2013/09/16(月) 20:03:51.75
    
- 
      >>135さん、レスありがとうございます。
 for /Fコマンドで環境変数にSourceとDestをそれぞれ設定後に出力、という手順でできるんですね。
 forコマンドは使ったことないので、ヘルプで調べながら挑戦してみます。
 回答いただきありがとうございました。
- 
      137デフォルトの名無しさんsage2013/09/17(火) 22:03:09.60
    
- いいってことよ
- 
      138デフォルトの名無しさんsage2013/09/19(木) 06:01:56.22
    
- start X
 start Y
 start Z
 のように複数のショートカットをまとめて起動するbatファイルを作成したのですが
 これらを一斉にアクティブ、最小化、閉じるなど管理する方法はないでしょうか
 
 起動しているものはインターネットブラウザなどです
- 
      139デフォルトの名無しさんsage2013/09/19(木) 08:08:39.01
    
- 
      >>138
 終了や強制終了は出来るけど、それ以上の操作をしたいならWSHとかもしくは操作自動化マクロとか使ったほうが良さげ。
 そもそもGUIはコマンドプロンプトで操作するものじゃないし。
- 
      140デフォルトの名無しさんsage2013/09/19(木) 08:38:19.46
    
- 
      >>139
 開いた複数のウインドウをすべて終了できるのでしたら十分です
 素人質問で申し訳ないですが、どのように記述するとよいでしょうか
- 
      141デフォルトの名無しさんsage2013/09/19(木) 09:11:50.93
    
- 
      連投すいません
 いろいろ調べてみましたがどうやら検討違いな質問だったようです
 ですがWSHを使うという情報が手に入っただけで大きな成果でした
 >>139さんありがとうございました
- 
      142デフォルトの名無しさんsage2013/09/19(木) 13:10:48.73
    
- 最小化
 start shell:::{3080F90D-D7AD-11D9-BD98-0000947B0257}
 閉じる
 taskkill /im X & taskkill /im Y & taskkill /im Z
- 
      143デフォルトの名無しさんsage2013/09/19(木) 15:56:29.64
    
- 
      >>142
 解決しそうです、ありがとうござます
- 
      144デフォルトの名無しさんsage2013/09/22(日) 19:32:24.35
    
- 「for /F」って「for /f」でも動くと思うんだけど
 前者の書き方をする人が圧倒的に多いよね。なんでだろ?
- 
      145デフォルトの名無しさんsage2013/09/22(日) 19:44:50.79
    
- 圧倒的かどうかは知らんが /? 見ると大文字だし
 コマンドによってはスイッチの大文字と小文字の区別があるものもあったりしたような
 コマンドではなく cuiアプリだったかも知れんが。
 あと、スイッチをわかりやすくする為とかじゃないの?
 俺はラベルと環境変数名だけ大文字にしてる。
- 
      146デフォルトの名無しさんsage2013/09/22(日) 19:46:38.21
    
- 
      >>144
 for /? での表示が /F になってるからでしょ。
 オプション文字はたまに大文字/小文字区別することあるから...
- 
      147デフォルトの名無しさんsage2013/09/22(日) 19:47:44.54
    
- リロードせずに書いたら、被ってた... orz
- 
      148デフォルトの名無しさんsage2013/09/23(月) 03:06:20.15
    
- まあどのコマンドもヘルプ見るとオプションは大文字だけど
 大抵は小文字でも動くし小文字で書く人も多い。
 でもforに限ってはなぜか大文字で書く人が多めな感じはするね。
- 
      149デフォルトの名無しさんsage2013/09/23(月) 03:11:40.02
    
- 
      >>144
 そのオプションの大文字小文字の区別有無は知らないけど、
 forコマンドの%%1文字変数は大文字小文字が区別されるから(震え声)
- 
      150デフォルトの名無しさんsage2013/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デフォルトの名無しさんsage2013/09/25(水) 09:45:01.39
    
- for () だと変数は逐次更新はされないから、やるなら do call :sub %%A みたいに使わないとダメなんじゃないっけ
- 
      153デフォルトの名無しさんsage2013/09/25(水) 10:38:37.03
    
- 
      >>151
 >パラメータは変数のように部分抽出できない為?
 できない為。
 >3行目と4行目が正しく実行されませんでした。
 %環境変数%の展開はコマンドを読んだ時点で行われる。
 「for %%i in (*) do ([改行]〜中略〜[改行])[改行])」というコマンドを解釈した時点で「%B:‾54%」が展開されてしまう。
 setlocalコマンドかネストしたcmd.exeで遅延展開を有効にして%環境変数%の代わりに!環境変数!形式を利用するか、
 callで飛んで処理したりコマンド自体にcallを付ける等で環境変数の展開が毎回行われるようにしなければならない。
- 
      154デフォルトの名無しさんsage2013/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
 )
- 
      155151sage2013/09/25(水) 12:25:58.64
    
- 
      >>153
 ありがとうございました。
 callで:subに飛ばして解決できました。
 
 >>154
 54は固定長でROBOCOPYのログなんでファイル名までがそんくらいだったんです。
 
 ありがとうございました。
- 
      156デフォルトの名無しさんsage2013/09/26(木) 12:50:23.27
    
- コマンド1 引数
 コマンド2 引数
 って書いてもコマンド2が実行されません
 
 コマンド1 引数 & コマンド2 引数
 って書くとコマンド2は実行されますが
 コマンドの量が多くなると可読性が失われるので困ってます
 
 アドバイスお願いします
- 
      157デフォルトの名無しさんsage2013/09/26(木) 13:43:32.61
    
- 具体的に書けよ。
 
 どう考えても書いたコマンドに問題があるとしか思えん。
- 
      158デフォルトの名無しさんsage2013/09/26(木) 14:57:15.67
    
- もしコマンド1がbatとかならcallで呼ぶ
- 
      159デフォルトの名無しさんsage2013/10/02(水) 02:33:34.10
    
- ipconfigコマンドを実行するとネットワークカードのIPアドレスを表示出来ますが
 LANケーブルを抜いた状態だと例え固定IPを設定していてもIPアドレスが表示されません。
 LANケーブルが抜けていてもIPアドレスを表示できるコマンドはないでしょうか?
- 
      160デフォルトの名無しさんsage2013/10/02(水) 02:42:23.00
    
- 詳細忘れたけどnetshで見れなかったっけ
- 
      161159sage2013/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//612-614
 
 > setlocal enabledelayedexpansion
 っていうのを入れないとただの文字として扱われてたからいるよね。
 
 なんていうか、
 <イレル 「考えすぎでしょうか」
 人がすんなりできる事をいちいち詰まってドツボに嵌る人生なんだなって。
- 
      163デフォルトの名無しさんsage2013/10/08(火) 21:25:21.54
    
- すまん、よく分からんのだが
 %の展開を2回するのを遅延展開というのか?
- 
      164デフォルトの名無しさんsage2013/10/08(火) 21:47:56.12
    
- 
      >>163
 2回というか、2重?
 
 遅延展開は %%変数%% でも !変数! でもいいらしい。
 「!」が使えるのはNT系だけど、いまどき 9x で新規バッチなんて作らないだろうし。
 
 ちなみに今 call と %%変数%% でやってみたらできました。
 
 %%変数%% を使う場合でも
 > setlocal enabledelayedexpansion
 ってのを入れないといけなかったんですね。
- 
      165デフォルトの名無しさんsage2013/10/08(火) 21:51:55.29
    
- > %%変数%% を使う場合でも
 > > setlocal enabledelayedexpansion
 > ってのを入れないといけなかったんですね。
 そんなことはない
 あと全角キモいからやめろ
- 
      166デフォルトの名無しさんsage2013/10/08(火) 21:56:12.27
    
- 
      >>165
 でも、エラーになるんですけど。ちなみにWindows7です。
 
 call 使わなかったら %変数% っていう文字として処理されるし。
- 
      167デフォルトの名無しさんsage2013/10/08(火) 21:57:06.50
    
- call %%hoge%% のパターンは遅延展開とは言わん
- 
      168デフォルトの名無しさんsage2013/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デフォルトの名無しさんsage2013/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デフォルトの名無しさんsage2013/10/08(火) 22:10:15.72
    
- 遅延展開は見えないが %多段展開は echo on で見えるだろ
- 
      171162sage2013/10/08(火) 22:22:17.12
    
- 
      >>169
 >>168 さんのは動きました。
 
 すいません。
 もしかしたら別のところで引っかかってたのかも。
 ファイル名の後ろにつなげようとして %%‾nS とか使ったときに、
 変更前のファイル名のほうでやっちゃってエラーが出たりしたので、それと混同したのかも。
 
 「!」の方はそれだけだと文字扱いでしたが。
 
 「<イレル」は校正のやり方
 今ちょっと微妙にマイナーなライトノベル作家のスレに常駐してるので。
 ちょっとしたジョーク。
- 
      172デフォルトの名無しさんsage2013/10/08(火) 22:33:22.21
    
- 
      >>171
 アチコチの情報を漁るのも良いけど、ヘルプをまずちゃんと読んだほうが良い
 体系的な知識が得られるので
 それから、コマンドヘルプも活用できる
 今回の遅延環境変数(!)の話なら
 set /?
- 
      173デフォルトの名無しさんsage2013/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デフォルトの名無しさんsage2013/10/09(水) 00:01:34.13
    
- 
      >>173
 解説ご苦労様と言いたい所ですが169さんは質問者じゃないと思いますよーwww
- 
      175デフォルトの名無しさんsage2013/10/09(水) 00:26:11.37
    
- 
      >>174
 ・・・ああ、色々盛大に勘違いしてたorz
- 
      176デフォルトの名無しさんsage2013/10/09(水) 11:15:09.65
    
- 
      >>168
 call echo %^A%
 ってやればプロンプト入力でもいける
- 
      177デフォルトの名無しさんsage2013/10/12(土) 02:48:38.73
    
- とあるファイルの、フルパスでなく、属する直上のフォルダ名を取得する方法を教えてくだちい
- 
      178デフォルトの名無しさんsage2013/10/12(土) 03:23:16.89
    
- for %%A in ("%‾1¥..") do echo %%‾nxA
 pause
- 
      179デフォルトの名無しさんsage2013/10/12(土) 03:40:49.43
    
- おおすごい!
 ¥..の部分で階層一つ上げてるってわけですかね?
 
 サンキュウベリーマッチョ!
- 
      180デフォルトの名無しさんsage2013/10/12(土) 15:44:17.94
    
- for %%A in ("%‾dp1¥.") do echo %%‾nxA
 pause
- 
      181デフォルトの名無しさんsage2013/10/23(水) 00:20:20.38
    
- set rtn = %errorlevel%
 exit rtn
 
 ↑のようなコードを見たことあるんだけど、2行目は「exit %rtn%」になるんじゃないの?
- 
      182デフォルトの名無しさんsage2013/10/23(水) 00:32:50.68
    
- なことはない
- 
      183デフォルトの名無しさんsage2013/10/23(水) 00:45:33.68
    
- 今試したけど、それ無効(errorlevel値に影響しない)になってると思われる
 batのerrorlevelは別にexitで値を返さなくても返されるので
 まあ意図したようには動作するけど
 
 dir z: (存在しないドライブ名)
 set abc=9
 exit abc と exit %abc%
 で試せば分かると思う
- 
      184181sage2013/10/23(水) 02:02:48.29
    
- 
      >>183
 試してみたらやはり「exit %abc%」の書き方が正解みたいですね。
 自分が見たサンプルはたまたまうまくいってただけっぽい…
 勉強になりました。ありがとうございます。
- 
      185デフォルトの名無しさんsage2013/10/23(水) 02:08:18.01
    
- いや、だからexitに数値指定なしだとbatでのerrorlevel値がそのまま帰るんだよ
 多分exitは数値じゃなかったらパラメタは無効にするんだと思う
 だから
 set rtn = %errorlevel%
 exit rtn
 この2行と
 exit
 とは等価となってる
- 
      186デフォルトの名無しさんsage2013/10/23(水) 03:22:37.39
    
- 等価って書いたけど間違っているかも知れない
 exitだけだと
 受け側がbat以外のプログラムだったら復帰値として
 errorlevel値が帰らないかもしれない(未確認)
- 
      187デフォルトの名無しさんsage2013/10/31(木) 10:53:34.17
    
- cleanmgr /c c: /sageset:1
 cleanmgr /c d: /sageset:2
 
 これをbatファイルから実行しても1行目しか実行されません
 CドライブとDドライブのディスクノクリーンアップが出来ればOKなんですが
 何か良い方法ありませんか?
- 
      188デフォルトの名無しさんsage2013/10/31(木) 13:30:06.76
    
- バッチファイルはその行の処理が終了しないと次の行に行かないので
 この場合Cのクリーンアップが終了するまでDのクリーンアップは起動しない。
 そしてcleanmgrは複数同時起動しないのでCとDのクリーンアップを同時に行うのは無理。
 ちなみにわかってるとは思うけどsagesetはオプション設定で実際のクリーンアップはsagerunね。
- 
      189デフォルトの名無しさんsage2013/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デフォルトの名無しさんsage2013/10/31(木) 14:52:42.78
    
- バッチの問題じゃなくてソフトの問題だってレスしてくれてるじゃないの。諦めよう
- 
      191デフォルトの名無しさんsage2013/10/31(木) 15:44:51.93
    
- わかりました
- 
      192デフォルトの名無しさんsage2013/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デフォルトの名無しさんsage2013/10/31(木) 17:04:28.22
    
- 
      >>192
 それtaskkillが実行される時はcleanmgrが終了した時だから意味なくない?
- 
      194デフォルトの名無しさんsage2013/11/04(月) 07:58:59.84
    
- Windowsのコマンドラインで、文字列の最後尾に0x00のNULL文字を追加した文字列を
 任意の変数にセットする方法を教えて下さい
 
 abcd0x00 abcdの後に0x00が1つの合計5文字
- 
      195デフォルトの名無しさんsage2013/11/04(月) 09:17:14.82
    
- バッチファイルでバイナリ文字列扱うとか無謀すぎると思う
 変態という名の神々が戯れにやる類の仕事ではなかろうか
- 
      196デフォルトの名無しさんsage2013/11/04(月) 09:53:28.74
    
- 常識ある組織なら、然るべきスクリプト言語を使わせるだろう。
 「Windows標準でないからNG」とか喚くような所なら、さっさと辞めるが吉。
- 
      197デフォルトの名無しさんsage2013/11/04(月) 10:52:17.85
    
- Windows標準ならWindows Script Hostがある
- 
      198デフォルトの名無しさんsage2013/11/04(月) 14:23:05.50
    
- 
      >>194
 未検証だけどバイナリエディタで0x00の1バイトファイル作っておいて、
 typeコマンドで当該ファイルを変数に流し込めばいけるかも
- 
      199デフォルトの名無しさんsage2013/11/04(月) 16:18:35.24
    
- 
      >>198
 「バイナリエディタはWindows標準でないから使用はNG」とw
- 
      200デフォルトの名無しさんsage2013/11/04(月) 22:31:52.59
    
- 真面目にやるならdebugコマンドだが、最近のWindowsには付属してないんだよなぁ・・・
- 
      201デフォルトの名無しさんsage2013/11/05(火) 05:31:31.99
    
- 
      >>200
 command.com削除されたの?
- 
      202デフォルトの名無しさんsage2013/11/06(水) 00:43:53.39
    
- 
      >>201
 16ビットのエミュレーション機能が消えて同時に消えたとか聞いた気が。
 ちゃんと調べたりしたわけじゃないんで間違ってたらすまん。
- 
      203デフォルトの名無しさんsage2013/11/06(水) 07:43:02.29
    
- スクリプトは使用したくないのであれば下記のバッチファイルを使用する。
 
 @echo off
 empty.exe *
 
 ファイル(F) --> 名前を付けて保存(A)をクリックする。
 ファイル名(N) で 必ず ダブルコーテーション でファイル名をくくってください。
 
 バッチファイルは
 
 "メモリ開放.bat"
 
 
 ってあるんですけど、「必ず ダブルコーテーション でファイル名をくくってください」
 ってのは何で?他のサイトだと普通にempty.batとかで保存していいみたいなんだけど
- 
      204デフォルトの名無しさんsage2013/11/06(水) 08:34:57.76
    
- 拡張子が.bat.txtにならないようにだろ
 ていうかそのサイトで聞け
- 
      205デフォルトの名無しさんsage2013/11/06(水) 22:00:57.93
    
- メモリ開放!
- 
      206名無しののVBS2013/11/09(土) 05:27:27.39
    
- ””って拡張子修正用と言ってたような気がする
- 
      207デフォルトの名無しさんsage2013/11/10(日) 12:23:41.42
    
- vimのコマンド作って便利になった
- 
      208デフォルトの名無しさんsage2013/11/13(水) 00:21:19.77
    
- <"C:¥TEST1.bat"の内容>
 C:¥TEST2.bat
 notepad
 
 <"C:¥TEST2.bat"の内容>
 mspaint
 
 
 上記2つのファイルがある時にコマンドプロンプトから"C:¥TEST1.bat"と入力してエンター押すと
 ペイントは起動するのですが、メモ帳が起動しません。
 メモ帳も起動させたい場合はどのように記述すればよいのでしょうか?
- 
      209デフォルトの名無しさんsage2013/11/13(水) 00:29:29.94
    
- 
      >>208
 batからbatを起動すると制御が起動したbatに移動し元には戻ってこない(ジャンプってこと)
 
 mspaintが終了するまでnotepadを起動しなくて良いのなら
 call test2.bat
 
 同時に起動するなら
 start test2.bat
- 
      210デフォルトの名無しさんsage2013/11/13(水) 00:59:19.52
    
- 
      >>209
 制御が戻ってこないとは知りませんでした…
 callでバッチリうまくいきました。
 ありがとうございます!
- 
      211デフォルトの名無しさんsage2013/11/14(木) 00:20:01.44
    
- callとcmd /c、startとcmd /kはどう違うの?
- 
      212デフォルトの名無しさんsage2013/11/14(木) 00:29:35.43
    
- メインメモリの空き容量が・・・
- 
      213デフォルトの名無しさんsage2013/11/17(日) 16:52:32.11
    
- 気にしない
- 
      214デフォルトの名無しさんsage2013/11/19(火) 22:18:06.13
    
- シェルスクリプトのスレ誘導してくれ
- 
      215デフォルトの名無しさんsage2013/11/20(水) 09:23:01.58
    
- 
      >214
 ↓悪いが、ここから適当に見て回ってもらうしかない。
 【最強CUI】PowerShell -Part 1
 ttp://toro.2ch.net/test/read.cgi/tech//
 VBScriptについて必死に話し合うスレ
 ttp://toro.2ch.net/test/read.cgi/tech//
 [JavaScript] スクリプト言語34 [Perl,Python,PHP]
 ttp://toro.2ch.net/test/read.cgi/tech//
 ECMAScript デス 4
 ttp://toro.2ch.net/test/read.cgi/tech//
 【JavaScript】スクリプト バトルロワイヤル40【pl,rb,php,py】
 ttp://toro.2ch.net/test/read.cgi/tech//
 コマンドプロンプト
 ttp://toro.2ch.net/test/read.cgi/win//
 お前ら、wsh使ってますか? Part8
 ttp://toro.2ch.net/test/read.cgi/win//
 Windows PowerShell Part4
 ttp://toro.2ch.net/test/read.cgi/win//
- 
      216デフォルトの名無しさんsage2013/11/20(水) 17:39:56.64
    
- 
      シェルスクリプトってバッチファイルよりは強力だしスレ無いわけが・・・
 で、shだと誤爆が多そうだしcshで探したらこんなのが。
 C shell 撲滅委員会
 http://toro.2ch.net/test/read.cgi/unix//
 
 それはさておき、まぁ当然だけどUNIX板いくだけで一発だな。
 
 シェルスクリプト総合 その22
 http://toro.2ch.net/test/read.cgi/unix//
- 
      217デフォルトの名無しさんsage2013/11/20(水) 23:17:41.18
    
- 
      >>215 >>216 やっぱりここで聞いてよかった  ありがとな
    
- 
      218デフォルトの名無しさんsage2013/11/29(金) 04:55:52.45
    
- 
      http://zion009.blog98.fc2.com/blog-entry-50.html
 こちらをバッチにしてD&Dするとtsファイルが0キロバイトで出力されます
 私が間違っているのでしょうかサイト側のミスなのでしょうか
- 
      219デフォルトの名無しさんsage2013/11/29(金) 06:24:38.80
    
- 
      >>218
 まずvlcに直接喰わせたときに、そのファイルはちゃんと出力されるのか?
 話はそれからだ
- 
      220218sage2013/12/05(木) 10:45:55.06
    
- 今更ながらコピーしたのをサクラでペーストし、後ろの半角スペースを削除したら正常に出力されるようになりました
- 
      221デフォルトの名無しさんsage2013/12/05(木) 22:58:16.73
    
- 教えてください
 既定のzipの関連付けは確か
 
 >assoc .zip
 .zip=CompressedFolder
 
 だったと思うんだが、いつの間にか
 
 >assoc .zip
 拡張子 .zip のファイルの関連付けが見つかりません
 
 になってしまっていた。しかし、
 
 >start a.zip
 
 で圧縮(zip)フォルダが起動する。
 なぜだ?
- 
      222デフォルトの名無しさんsage2013/12/05(木) 23:13:19.79
    
- てめえの既定など知らんわ
 そもそも関連付けはマシーンではなくペルソナにメガ進化している
- 
      223デフォルトの名無しさんsage2013/12/05(木) 23:30:56.75
    
- .zip=CompressedFolder はWindows8の既定
- 
      224デフォルトの名無しさんsage2013/12/06(金) 00:04:52.50
    
- .cabや.lzhも同じような…
 assocは何の意味があるのか
- 
      225デフォルトの名無しさんsage2013/12/07(土) 15:01:02.16
    
- コマンドでビープ音を出すことは出来ますか?
 可能ならスピーカーがミュートになっていても音を出したいのですが
 無理ならスピーカーからでも良いので何らかの音が出せれば良いです。
- 
      226デフォルトの名無しさんsage2013/12/07(土) 15:16:00.81
    
- 
      >225
 例:コマンドプロンプト画面で以下のように打ち込むと、Cドライブのルートフォルダに"Beep1.bat"ができる。
 それを実行するとビープ音が一回鳴る。
 (※「^G」と表記した箇所では、実際には[Ctrl]+[G]を押す事。これによりアスキーコード7が入力される)
 
 echo @echo ^G > C:¥testBeep.bat
- 
      227226sage2013/12/07(土) 15:26:39.33
    
- 例として挙げたファイル名をうっかり書き間違えた。orz
 とにかく"C:¥testBeep.bat"なら"C:¥testBeep.bat"を実行すればOKって事で
 
 アスキーコード7は元々ビープ音を鳴らす為の制御コードだが、PCによっては
 ヘッドホンを繋いでるとヘッドホンからしか聴こえない場合もあるから注意。
 こればかりは実際どうしようもない。
- 
      228デフォルトの名無しさんsage2013/12/07(土) 22:15:40.57
    
- Windows7以降はビープ鳴らせないんじゃなかったっけ
- 
      229デフォルトの名無しさんsage2013/12/08(日) 00:27:54.07
    
- コマンドプロンプトでCtrl+Gじゃなくて普通にキーボードから「^G」って打ってエンター押したら
 いきなりIEが立ち上がってGoogleで"undefined"を検索した状態になってすげえびっくりした。
 なんなんだこりゃ?
- 
      230デフォルトの名無しさんsage2013/12/08(日) 05:21:11.98
    
- 
      私のWindows7(Pro)64bitでは、ちゃんと>>226の方法でビープ音が鳴るよ。
 [Ctrl]+[G]を2回続けた場合はビープ音も2回鳴る。
- 
      231デフォルトの名無しさんsage2013/12/08(日) 05:52:09.63
    
- すみません、スクリプト初心者で色々と試行錯誤の上、ちょっとハマってしまったので教えて頂けないでしょうか。
 
 やりたいことは以下の処理が出来るバッチファイル(check.bat)を作りたいのです。
- 
      232231sage2013/12/08(日) 05:55:24.55
    
- (1)A)のコマンドを実行し、その結果に「kdb106.dll」という文字列があれば(2)の処理に進む、無ければ何もせずバッチ処理終了
 ↓
 (2)B)のコマンドを実行し、その結果に「PCAT_106KEY」という文字列があれば(3)の処理に進む、無ければ何もせずバッチ処理終了
 ↓
 (3)「check.bat」と同じディレクトリにある「update.bat」を実行し、処理終了。
 ※「update.bat」はちゃんと動くものが用意されています
- 
      233デフォルトの名無しさんsage2013/12/08(日) 06:32:28.13
    
- (1)set a = A | findstr kdb106.dll
 if %errlvl%
 (2)set b = B | 略
 (3)update.bat
 
 こんな感じだけど記述は適当です
 何にハマったのか気になります
 どこまで出来たのか気になります
 たぶん何もしてなくて丸投げなんだろう
 と思いますがいかがですか
- 
      234デフォルトの名無しさんsage2013/12/08(日) 06:33:34.38
    
- (cmd && cmd)ってbatで出来たっけshellだけだっけ
- 
      235231sage2013/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で特定の文字列があるかどうかをやりたいのですが、
 うまく変数に入ってくれないのです。すみません。。。
- 
      236231sage2013/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デフォルトの名無しさんsage2013/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デフォルトの名無しさんsage2013/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デフォルトの名無しさんsage2013/12/08(日) 08:24:01.85
    
- あと、そもそも環境変数に複数行データを格納することは出来ない
- 
      240231sage2013/12/08(日) 08:35:19.32
    
- 
      >>237さん
 
 情報ありがとうございます!!
 errorlevelで判別し、分岐処理させることが出来ました。
 これでうまく作れそうです。
 本当にありがとうございました!!
- 
      241231sage2013/12/08(日) 08:40:10.36
    
- 
      >>238-239
 
 追加情報もありがとうございます。
 微調整するようにしますね!
- 
      242デフォルトの名無しさんsage2013/12/08(日) 10:11:55.42
    
- 
      >>230
 ビープとはビープスピーカー(PC本体に付いてる奴)を鳴らすってことであって
 音声出力のスピーカーから鳴る奴は違う。
- 
      243デフォルトの名無しさんsage2013/12/08(日) 13:25:43.57
    
- 
      >>228>>242
 マザボにビープスピーカーが無い場合、XP以前でもサウンドスピーカーで代用ビープが鳴ってなかったか?
- 
      244デフォルトの名無しさんsage2013/12/08(日) 15:11:24.99
    
- 代用ビープってなんかワロタw
 昔飲んだ代用コーヒーを思い出した…
- 
      245デフォルトの名無しさんsage2013/12/10(火) 16:30:03.46
    
- ファイルのタイムスタンプの時間の変更方法を教えてください。
 日付ですと、以下のように一旦変数に入れて戻すことで可能ですが、時間の場合この方法は使いづらいのです。
 
 set NOWDATE=%DATE%
 date 2000-01-01
 copy /B "hoge.txt" +
 date %NOWDATE%
 
 外部ツールを使わない方法を模索しております。よろしくお願いいたします。
- 
      246デフォルトの名無しさんsage2013/12/10(火) 22:44:13.91
    
- scriptかpowershell
- 
      247245sage2013/12/10(火) 23:15:11.36
    
- 
      >>246
 スクリプトですね、調べてやってみたいと思います。
 レスありがとうございました。
- 
      248デフォルトの名無しさんsage2013/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デフォルトの名無しさんsage2013/12/14(土) 11:20:53.30
    
- 非常に基礎的なことだと思うのですが・・・
 
 
 @echo off
 start /wait b.bat
 echo %time% >a.txt
 exit
 
 
 @echo off
 echo %time% >b.txt
 ping -n 3 localhost >NUL
 exit
 
 で、b.txtが出力された約2秒後にa.txtも出力される事がわかりました。
 要は、あるバッチを実行し、別のバッチを呼び出しそのバッチ処理が終わればまた元にバッチに戻り処理をするという
 形にしたいのです。(シャットダウンスクリプト)
 
 このa,bをグループポリシーのシャットダウンスクリプトに仕込むと、
 何故か既定の15分のタイムアウトまでシャットダウンプロセスで止まってしまい、
 結果のtxtファイルも出力されません。
 ちょっとわかる方いらっしゃいましたらアドバイス頂けないでしょうか?
- 
      250デフォルトの名無しさんsage2013/12/14(土) 12:07:14.89
    
- シャットダウン中ってプロセスの起動制限無かったっけ?
 startの代わりにcallじゃいかんのか?
- 
      251249sage2013/12/14(土) 14:59:03.80
    
- 
      >>250
 ありがとうございます。
 
 
 @echo off
 call b.bat
 echo %time% >a.txt
 exit
 
 
 @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デフォルトの名無しさんsage2013/12/14(土) 15:38:47.70
    
- 
      >>251
 念のために確認するけど
 a.txtとかb.txtって実際にはフルパス指定してる?
 それか、先頭に
 pushd %‾dp0
 を書いてみれば?
- 
      253252sage2013/12/14(土) 15:54:57.38
    
- 上のレスは無視してくれ
 カレントはscriptの位置になってるようだ
 アクセス権の問題かとも思ったけどSYSTEMはフルになってるし(まあ念のために確認してみて)
 でもscriptフォルダに余計なファイルを書くことはお勧めできないので
 別に用意してそっちに書くようにすてはどうか?
 ちなみにlogoff scriptでexeを起動するなんてことは
 俺はやっているしログファイルも作成してるんで出来ないことはないはず
- 
      254252sage2013/12/14(土) 15:57:28.16
    
- ↑
 logoff scriptはshutdown scriptと読み替えてくれ
- 
      255デフォルトの名無しさんsage2013/12/14(土) 16:03:39.04
    
- a→b→a としたいなら、
 bに
 exit /B
 を付けてaに処理が戻るようにしてみては。
- 
      256デフォルトの名無しさんsage2013/12/14(土) 16:08:45.97
    
- exit /?
 を参照ね。
 終了コードを付加することで、戻ったバッチ側で判定して分岐なんかの処理もできる。
- 
      257249sage2013/12/14(土) 16:10:10.68
    
- 
      >>255
 ありがとうございます!!
 とりあえず、
 
 
 @echo off
 pushd %‾dp0
 start /wait b.bat
 echo %time% >a.txt
 exit
 
 
 @echo off
 pushd %‾dp0
 echo %time% >b.txt
 ping -n 3 localhost >NUL
 popd
 exit
 
 で、ちゃんとカレントディレクトリにa.txt、b.txtをシャットダウンスクリプト時に
 吐いてくれるようになりました!!!
 
 ちょっとexit /Bも試してみるようにしますね。
 ちなみに、各バッチのSYSTEMの権限はフルでした。
- 
      258249sage2013/12/14(土) 16:28:01.79
    
- ちなみに start /waitでb.bat開始せず、callする場合は
 これで行けました!
 アドバイス頂いたようにb.bat側のexitに/Bをつけるのがポイントのようです。
 
 また、絶対パスを指定せず、カレントディレクトリでやる場合
 「pushd %‾dp0」も付けておくことが必要だとわかりました。
 ありがとうございました!!
 
 
 @echo off
 pushd %‾dp0
 call b.bat
 echo %time% >a.txt
 exit
 
 
 @echo off
 pushd %‾dp0
 echo %time% >b.txt
 ping -n 3 localhost >NUL
 popd
 exit /B
- 
      259デフォルトの名無しさんsage2013/12/14(土) 23:07:19.91
    
- 
      で、 >>249 が動かない理由は解決した?
 
 もしかしてフルパスで↓だと終わらないぞ
 start /wait "c:¥b.bat"
- 
      260デフォルトの名無しさんsage2013/12/15(日) 00:53:06.53
    
- 
      >>249
 状況から見てb.batが見つからないからエラーが出て止まってるだけだろ
 試しにa.bat内のsart /wait c.bat
 に変えて通常実行してみりゃ、
 'c.bat'がみつかりません。とかのメッセージボックスが出て止まったままになるしさ
- 
      261デフォルトの名無しさんsage2013/12/15(日) 01:26:41.08
    
- vol c: | findstr /C:シリアル番号
 で出てきたシリアル番号だけを抜き出して表示したいのですが
 どうすりゃ良いか教えてください
- 
      262デフォルトの名無しさんsage2013/12/15(日) 01:57:08.69
    
- for /F "tokens=3" %i in ('vol c: ^| findstr /C:シリアル番号') do @echo %i
- 
      263249sage2013/12/15(日) 04:16:05.52
    
- 
      >>259-260
 
 アドバイスありがとうございます!!
 よくよく見てみたらおかしかったです。
- 
      264デフォルトの名無しさんsage2013/12/15(日) 11:15:41.61
    
- batでプログラムを作っているのですが、
 start...
 start...
 で別のプログラムをいくつか同時起動してそれらが全てが自動終了したときに
 次の処理に進みたいのですが、こんな判定ってできますか?
- 
      265デフォルトの名無しさんsage2013/12/15(日) 11:35:21.71
    
- どっかに動作中を示すファイル作っておいて定期的に存在のチェック
 って方法をやってるけど、そういう用途のコマンドとかコンソールアプリあるなら俺も知りたいな
 
 まぁ、そこまでやるなら...って話はもちろんわかるけども。
- 
      266デフォルトの名無しさんsage2013/12/15(日) 12:34:59.25
    
- notepad | notepad | more
- 
      267デフォルトの名無しさんsage2013/12/15(日) 12:58:15.28
    
- 横だけどこれってどういう仕組みなの?
 パイプが出力を次のコマンドに渡すやつだってことはわかるけど、
 notepadは何も渡さないとして、なんでmoreで止まるの?
- 
      268デフォルトの名無しさんsage2013/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デフォルトの名無しさんsage2013/12/15(日) 13:51:51.51
    
- 
      >>266、>>268
 ありがとうございます!
 やりたいことがこれで出来そうです。
- 
      270デフォルトの名無しさんsage2013/12/15(日) 14:04:03.23
    
- 待つんじゃなくて、終わったプロセスに呼んでもらったほうがイインジャネ?
 2回実行されたら次へ進むって。
- 
      271デフォルトの名無しさんsage2013/12/15(日) 14:08:19.98
    
- それだと終了した複数プロセスから同時に呼ばれたらどうする?
- 
      272デフォルトの名無しさんsage2013/12/15(日) 18:54:34.59
    
- 
      >>262 ありがとう
 ついでにこれも教えてください
 「ABC-DEF」の「-」をなくして「ABCDEF」と表示させたいです。
- 
      273デフォルトの名無しさんsage2013/12/15(日) 21:12:09.65
    
- 
      バッチファイルにしちゃったからコマンドプロンプトから直接叩くときは
 %%iを%iにしなきゃいけないと思います。冗長でごめんなさい。
 
 http://pastebin.com/F7XHgKzq
- 
      274デフォルトの名無しさんsage2013/12/15(日) 22:29:46.95
    
- 
      >>268
 x exist
 o not exist
 
 >>265
 .batでやってるなら晒してよw
 
 >>269
 出来た?見タイヨー見たいなー見たいねー。
- 
      275デフォルトの名無しさんsage2013/12/15(日) 22:45:17.68
    
- 
      >>274
 使う処理をcallで色々呼びまくってて
 もはやどことどこが使われてるか分からないほどだから無理
 
 後実際には、sleepをユニークな名前でコピーしてサブプロセス終了時に殺す方法をとってる
- 
      276デフォルトの名無しさんsage2013/12/15(日) 22:54:36.24
    
- なるほど、さくっと想像できない。それほどまでにあれなのか。ありがとう。
 まあ、ちょろっとやっつけでやったものってのは得てして肥大化してよくわからなくなるよな。
- 
      277デフォルトの名無しさんsage2013/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デフォルトの名無しさんsage2013/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デフォルトの名無しさんsage2013/12/16(月) 15:50:22.93
    
- 
      バッチから非同期に起動したアプリの終了を待ち合わせる。
 ttp://scripting.cocolog-nifty.com/blog/2008/07/post_fd67.html
- 
      280デフォルトの名無しさんsage2013/12/16(月) 15:52:16.41
    
- 
      バッチで、複数のコマンドを並列実行して、直後に一括して待ち合わせる。
 http://scripting.cocolog-nifty.com/blog/2008/07/post_f6bf.html
- 
      281デフォルトの名無しさんsage2013/12/16(月) 15:59:02.74
    
- for /F "skip=1 tokens=3,4 delims=- " %i in ('vol c:') do @echo %i%j
- 
      282デフォルトの名無しさんsage2013/12/17(火) 00:13:36.36
    
- 
      >>278>>281 ありがとー
 明日色々やって気に入ったの使ってみる!
- 
      283デフォルトの名無しさんsage2013/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やログを採ろうとすると速度がおそくなるせいなのかエラーが出ない)
- 
      284283sage2013/12/19(木) 13:07:11.57
    
- あれから再びエラーでとまったから無視してください
- 
      285デフォルトの名無しさんsage2013/12/19(木) 18:09:12.80
    
- あほなことやってるw
- 
      286デフォルトの名無しさんsage2013/12/20(金) 03:27:22.89
    
- 
      >>283
 find "キーワードA" "入力ファイル" | find "キーワードB" > "出力ファイル"
 これならまだ分かるが、
 find "キーワードA" "入力ファイル" | find "キーワードA" > "出力ファイル"
 何故こんな事をしたんだ?さっぱり意味が分からん。
- 
      287デフォルトの名無しさんsage2013/12/20(金) 16:30:26.02
    
- >start /b を併用してるバッチで
 そんなもん使うもんじゃねーw
- 
      288デフォルトの名無しさんsage2013/12/21(土) 01:57:51.25
    
- 
      >>287
 横から聞くけどじゃあどうやるの?
- 
      289デフォルトの名無しさんsage2013/12/21(土) 02:25:55.67
    
- 横から聞くけど何をやりたいの?
 
 バックグラウンドで走らせるほどfindに時間がかかるの?
- 
      290デフォルトの名無しさんsage2013/12/21(土) 03:04:22.36
    
- 283自体にしても時間掛かる処理の合間にfind走らすとかは幾らでも考えられるし、そこ拘る所じゃなくね?
 287のレス見るとstart /b自体使いどころ無いって言いたげに見えるから他の定番があるのかと思ったんだが。
- 
      291283sage2013/12/21(土) 11:14:47.60
    
- 
      無駄話のタネになってしまって申し訳ない
 
 >>286
 挙げたのはサンプルだから適当に書いただけで実際は後者しかやらない
 findを重ねてるのは単純にそれしか絞込みの方法を知らない為、お勧めがあれば知りたい
 
 start /b を使ってるのは>>290の言う様に時間のかかる処理をしてるから
 数万から十数万行の複数個あるログから特定のデータを取り出して
 判定やらなにやらした結果を書き出すため複数コアに分担作業をさせている
 分担が等分だと終了タイミングがずれ遊びの時間が増えるから
 不等分且つ終わり際を細かくしてる関係上ウィンドウがポコポコ出てくるのを避けたい為
- 
      292デフォルトの名無しさんsage2013/12/22(日) 19:25:16.32
    
- 巨大なテキストファイルをメモ帳で開いてCtrl+Hで出てくるダイアログで置換を行うとものすごく時間がかかってしまいます。
 コマンド、もしくはWindowsの標準機能でもっと高速に行うことって出来るのでしょうか?
- 
      293デフォルトの名無しさんsage2013/12/22(日) 20:50:13.51
    
- 
      >>292
 基礎解説 演習方式で身につけるチェック式WSH超入門:
 第11回 WScriptオブジェクトを利用する(2) (1/5)
 ttp://www.happy2-island.com/vbs/cafe02/capter00115.shtml
 
 でできるんじゃね?
- 
      294デフォルトの名無しさんsage2013/12/23(月) 01:05:58.29
    
- 
      >>292
 ここに来たってことはもしかしてもしかするとコマンドでの回答をお求めですね!
 ずばり ? でしょう!または help !千里の道も一歩から。
- 
      295デフォルトの名無しさんsage2013/12/23(月) 13:16:13.24
    
- WSHもそれなりに時間かかるし
 grep置換出来るツールでやるのが一番早いがな。
- 
      296デフォルトの名無しさん2013/12/23(月) 14:30:19.14
    
- メモ帳で作業するのやめたら?
- 
      297デフォルトの名無しさんsage2013/12/23(月) 14:37:41.40
    
- どうしてもツールを入れたくないなら
 ファイルを小さく分割するのがお手軽かもしれない
- 
      298デフォルトの名無しさんsage2013/12/23(月) 14:42:37.90
    
- それ、手間が増えるだけじゃねぇの
- 
      299デフォルトの名無しさんsage2013/12/23(月) 17:17:46.88
    
- A 松
 B 竹
 C 梅
 
 という内容の「ランク.txt」がある時、
 
 findstr "B" "ランク.txt"
 
 を実行すると
 
 B 竹
 
 と表示されますが、これを変数に入れることって出来ますか?
 
 set rank=findstr "B" "ランク.txt"
 
 とかやってもダメでした。
- 
      300デフォルトの名無しさんsage2013/12/23(月) 18:59:57.13
    
- 環境変数ってそういうものじゃない
 レジストリとかシステム設定に書き込むような使い方
 
 やりたいことがわからないけど
 ファイルに突っ込むか 標準入力を受け付ける別のコマンドに渡すか
 どっちかになると思う
 findstr "B" "ランク.txt" > workfile.log
 findstr "B" "ランク.txt" | coolcommand.exe
- 
      301デフォルトの名無しさんsage2013/12/23(月) 19:20:59.33
    
- 標準出力に出るならとりあえずforで良いんでは
- 
      302デフォルトの名無しさんsage2013/12/23(月) 20:20:28.95
    
- cmd.exeはforでunixのshellのバッククオートのような事ができる
 for /?でヘルプ
- 
      303デフォルトの名無しさん2013/12/24(火) 02:52:10.89
    
- どしても.batでやりたいと言うなら止めはしないが
 かなり使いにくいからスクリプト言語にできるのならスクリプトでやることをおすすめします
- 
      304デフォルトの名無しさんsage2013/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%
- 
      305299sage2013/12/24(火) 21:22:41.02
    
- 
      >>300
 出来ればバッチファイル1つのみで実現したいのです。
 
 >>301-302
 for/?を見ましたが難しいコマンドですね…
 
 >>304
 ありがとうございます!最初の2行でバッチリできました。
 tokensを使うとそれぞれの項目を分けて取得することも出来るんですね。参考になります。
- 
      306デフォルトの名無しさんsage2013/12/24(火) 23:41:18.24
    
- 確かにヘルプは無知相手には敷居が高い表現が多いが日本語だからモニターに穴が開くほど繰り返し読めば理解に至るはずだけどここで聞いた方が早いのも確かだし有益だしそこから学び次回いこう応用時などにヘルプを利用すればいいか
- 
      307デフォルトの名無しさんsage2013/12/25(水) 00:17:46.38
    
- 日本語のハードルが高いようだ
- 
      308デフォルトの名無しさんsage2013/12/25(水) 11:05:18.76
    
- for /F の eol オプションとか普通の感覚だと、ん?て感じだしな。
 てか何の略なのかいまだにわからん。
- 
      309デフォルトの名無しさんsage2013/12/25(水) 11:11:56.86
    
- ぐぐりゃそれらしいものにすぐあたるがな
- 
      310デフォルトの名無しさんsage2013/12/25(水) 17:04:09.49
    
- eolの意味も分からずに、よくもまぁプログラミングなんぞしてるな
- 
      311デフォルトの名無しさんsage2013/12/25(水) 17:10:17.58
    
- 単なる英単語で構成された指示書程度深く理解する必要も無かろ
 パフォーマンスを求めるようなハードを理解しなきゃならんプログラムでもあるまいし
- 
      312デフォルトの名無しさんsage2013/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デフォルトの名無しさんsage2013/12/26(木) 03:58:22.88
    
- このeol指定ってEOLではなくて実際はコメント行(≠行内コメント)指定で、
 誤解を生むというか説明間違ってるってスクリプトの偉い人が書いてたような。
- 
      314デフォルトの名無しさんsage2013/12/26(木) 13:01:42.25
    
- 英語詳しくないけど line って単純に 行 って意味だけじゃ無いし誤訳なだけなんでしょな
- 
      315デフォルトの名無しさんsage2013/12/26(木) 15:34:15.81
    
- 訳も微妙だけど誤訳じゃなくて英文の時点で説明が間違ってるというか、
 元の意図は説明のとおりで実際のところは実装が間違ってるだけにしか見えない。
 
 一般的なコメント文字(仮に「;」とする)は普通「コード;コメント」「;コメント」「空白文字;コメント」って使うけど、
 これを機能として表記すると「行の終わりを意味する文字」だからfor /?の説明のeolと完全に一致するよ。
 
 日本語説明、英語説明、一般的なコメント文字、どれを基準に考えても実装が間違ってる。
- 
      316デフォルトの名無しさん2013/12/26(木) 16:05:23.64
    
- その行の処理対象の終端だろ
 それ以降の無視をやらないのか?
- 
      317デフォルトの名無しさんsage2013/12/26(木) 16:21:52.93
    
- 「コード;コメント」だと普通にコメント部分もトークンに入ってくるよ。
 EOLというよりSOCL(start of comment line)とか呼びたいくらい。
- 
      318デフォルトの名無しさんsage2013/12/26(木) 21:29:22.77
    
- 
      >>316
 だよな。
 何が問題なのかさっぱりわからん。
- 
      319デフォルトの名無しさんsage2013/12/26(木) 21:49:59.60
    
- 
      >>318
 デフォは「;」がeolだからコレが途中に入った文字列を処理してみ。
 平然と「;」以降も入ってくるから。
- 
      320デフォルトの名無しさんsage2013/12/26(木) 23:25:15.50
    
- Erase One Line
- 
      321デフォルトの名無しさんsage2014/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デフォルトの名無しさんsage2014/01/02(木) 04:02:28.33
    
- 
      >>321 これか?
 http://orangeclover.hatenablog.com/entry/20090903/
 
 setlocal enabledelayedexpansion
 if {%1} == {%2} (
 path !normal_test_home!¥bin;!path!
 ) else (
 path !error_test_home!¥bin;!path!
 )
 endlocal & path %path%
 
 でいいんじゃね
- 
      323321sage2014/01/02(木) 05:18:49.92
    
- 
      どうもダブルクォーテーションは関係なかったようで。
 
 ttp://anago.2ch.net/test/read.cgi/software//877
 
 start コマンドで名前を指定できるのを省略して動いてたからいいかと思ってたら
 Windows 8.1 では省略不可で動かなくて。
 コマンド窓が開くだけで終わるからいろいろやってていろんなエラーが出てたという。
 
 あ
 Windows7のときはダブルクォーテーションが必要なかったから名前とプログラムの区別がついてて省略できたけど、
 Windows8のときは Program Files(x86) に置いたからダブルクォーテーションが必要になって名前と判断されちゃったのか。
 
 じゃあ、Windowsの仕様が変わったんじゃなくて自分がヘマしてただけだったんだな。
- 
      324デフォルトの名無しさんsage2014/01/02(木) 07:50:31.22
    
- 
      >>322
 それが理由なら
 if x%1 == x%2
 の方が良くね?
- 
      325322sage2014/01/02(木) 11:40:46.75
    
- 
      >>324 その部分はリンク先と同じにした。お好きにどうぞ
 つうか %1 %2 に ! 文字があると副作用があるかも知れないので対策が必要
- 
      326デフォルトの名無しさんsage2014/01/02(木) 18:11:43.69
    
- 貧弱なパーザだニャー
- 
      327デフォルトの名無しさんsage2014/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デフォルトの名無しさんsage2014/01/05(日) 10:10:41.06
    
- 
      http://social.msdn.microsoft.com/Forums/en-US/f54f95df-cee7-4ea6-9998-031d03b4c714/how-to-programmatically-pass-parameters-to-an-schtasks-job
    
- 
      330デフォルトの名無しさんsage2014/01/06(月) 07:55:31.15
    
- 開始オプション欄はコマンドでは入りません
 セキュリティ対策なのか一種のバグです
 面倒ですが、ここだけはリモートでGUIを開いて直接入力する必要があります
- 
      331デフォルトの名無しさんsage2014/01/07(火) 23:26:20.42
    
- そのbatはクライアントがログオンした時のHomeディレクトリに置けば(コピーするとか)良いと思うけど?
- 
      332デフォルトの名無しさんsage2014/01/08(水) 07:39:11.19
    
- では、そのBATをHomeディレクトリに置くにはどうするのでしょう?
- 
      333デフォルトの名無しさんsage2014/01/12(日) 22:49:24.15
    
- テキストファイルの内容を1行毎に空行を追加して表示するにはどうすればよいですか?
 for使えば出来そうなんだけど思いつかない…
 
 <test.txt>
 あああ
 いいい
 ううう
 
 ↓
 
 あああ
 
 いいい
 
 ううう
- 
      334デフォルトの名無しさんsage2014/01/12(日) 23:01:28.95
    
- echo %%A&echo.
- 
      335デフォルトの名無しさんsage2014/01/12(日) 23:14:56.20
    
- 元のファイルの空行が消えてもいいのか?
- 
      336デフォルトの名無しさんsage2014/01/13(月) 02:49:23.62
    
- 改行コードを無理矢理力業で変数に入れる方法があったけど忘れた
- 
      337デフォルトの名無しさんsage2014/01/13(月) 18:02:43.40
    
- wsh使え
- 
      338デフォルトの名無しさんsage2014/01/14(火) 01:23:46.51
    
- @if (0)==(0) echo off
 cscript //nologo /e:jscript "%‾f0" 
    goto :eof
 @end
 var stdin=WScript.StdIn;
 while(!stdin.AtEndOfStream) {
 var data=stdin.ReadLine();
 if (data!="") { WScript.StdOut.WriteLine(data+"¥r¥n"); }
 };
- 
      339デフォルトの名無しさんsage2014/01/14(火) 23:28:46.25
    
- app1.exe "%1" | find "hoge"
 のような処理の時、app1.exeのerrorlevelの取得方法を教えて下さい。
- 
      340デフォルトの名無しさんsage2014/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デフォルトの名無しさんsage2014/01/15(水) 01:00:47.91
    
- また、そういうことじゃなくってapp1.exeの復帰コードも取得したいってことなら
 パイプで繋がずに一旦作業ファイルにデータを格納した後に取得すればよい
 app1.exe>tmpfile.tmp
 set app1_rc=%errorlevel%
 find "hoge" tmpfile.tmp
- 
      342339sage2014/01/15(水) 11:34:16.05
    
- 
      >>340-341さん、レスありがとうございます。
 わかりづらい説明ですみません、質問の趣旨は341の方でした。
 一つ前のアプリの終了コードの取得方法がわからずお尋ねした次第です。
 
 一時ファイルに書き出す方法で解決しました。
 ワンライナーでやりたかったため以下のようにしました。
 (app1.exe "%1" &>"tmpfile.tmp" echo %errorlevel%)| find "hoge"
 夜分遅くにありがとうございました。
- 
      343339=342sage2014/01/15(水) 11:40:00.59
    
- なんか文字化けしてますね?
 (app1.exe "%1" &>"tmpfile.tmp" 以下略〜
 半角アンパサンド記号で繋いでます。
- 
      344デフォルトの名無しさんsage2014/01/15(水) 16:58:29.87
    
- くっさ
- 
      345340sage2014/01/15(水) 16:59:45.44
    
- 
      >>342
 トリッキーであまりお勧めできないですが、どうしても中間ファイルなしで1行で書きたければ
 app1.exe|find "hoge"&set app1_rc=%errorlevel%
- 
      346340sage2014/01/15(水) 17:15:22.05
    
- 上記取り消し
 これでいけるかと思ったんだけどダメだな
- 
      347デフォルトの名無しさんsage2014/01/15(水) 21:04:28.28
    
- 
      >>346
 %%は行の解釈時に展開されるからな。
 !!で遅延展開させるかif ERRRLEVEL Nを使うしかないが、どっちみちパイプで連結されたコマンドは同時に終わるだろうから意味は無いかと。
- 
      348デフォルトの名無しさんsage2014/01/17(金) 19:30:39.66
    
- (app1.exe "%1" & ( call echo %%%%errorlevel%%%% >&2 ) )| find "hoge"
- 
      349デフォルトの名無しさんage2014/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
- 
      350349sage2014/01/24(金) 14:28:34.85
    
- net localgroup "administrators" "hoge¥domain users" /addにすればいいじゃんって言うのはわかってるんですが、
 一応、今後作成するかもしれないローカルアカウントにも対応したいってことでお願いします。
- 
      351デフォルトの名無しさんsage2014/01/24(金) 14:53:06.46
    
- それがバッチファイルに関する質問ではない Windows板に行け
 より良い方法はお前をクビにして、もっとスキルのある派遣を雇う事だ
- 
      352デフォルトの名無しさんsage2014/01/24(金) 15:08:40.64
    
- 
      >>349のような能無しは社史編纂室に異動させるべき
    
- 
      353デフォルトの名無しさんsage2014/01/25(土) 13:21:59.88
    
- コマンドプロンプトでコマンド打ってると、挿入モードから上書きモードに
 勝手に切り替わってしまうことありませんか?
 そのたびにInsertキーを押して挿入モードに戻していますが、何が原因なんだろ?
- 
      354デフォルトの名無しさんsage2014/01/25(土) 16:55:44.48
    
- ない
- 
      355デフォルトの名無しさんsage2014/01/25(土) 21:36:32.94
    
- > 何が原因なんだろ?
 Insertキーを押したのが原因
- 
      356デフォルトの名無しさんsage2014/01/25(土) 23:13:51.13
    
- コマンドプロンプントンのショートカットキー一覧でも眺めてみるしかない
- 
      357デフォルトの名無しさんsage2014/01/26(日) 11:55:26.71
    
- ぷろぷんとん?
- 
      358デフォルトの名無しさんsage2014/01/26(日) 12:22:21.70
    
- 折りたたみ自転車
- 
      359デフォルトの名無しさんsage2014/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デフォルトの名無しさんsage2014/01/31(金) 23:39:33.68
    
- test.txtにあらかじめ書き込んでおけば?
- 
      361デフォルトの名無しさんsage2014/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デフォルトの名無しさんsage2014/02/01(土) 08:22:54.35
    
- 
      >>361
 ありがとうございます!
 期待通りに作動してくれて欲しかったバッチを完成することができました!
- 
      363デフォルトの名無しさんsage2014/02/01(土) 17:31:52.66
    
- for /f "tokens=*" %%i in (test.txt) do call :sub "%%%%i"
- 
      364デフォルトの名無しさんsage2014/02/01(土) 22:28:30.87
    
- >abcd&rmdir /s /q c:
 こーいうのいんじぇくしょんって言うの?
- 
      365デフォルトの名無しさんsage2014/02/02(日) 09:34:22.08
    
- 
      >>364
 インジェクションそのものだな。
 コマンドインジェクションとかシェルインジェクションとか呼ばれてたはずだ。
 
 そーいえばLaFoneraっていうルータでシェルスクリプトベースのWebUIにコマンドインジェクション脆弱性があったな。
 ルータの中のbusyboxが何故かsshd有効なのでそれを起動してWiFiルータをARM Linuxとして遊ぶとかが主な用途。
- 
      366デフォルトの名無しさんsage2014/02/02(日) 13:50:25.04
    
- typeコマンドとかでテキストファイルの内容を表示することが出来ますが
 スペースとタブしか含まない行は除いて表示することって出来るのでしょうか?
- 
      367デフォルトの名無しさんsage2014/02/02(日) 19:02:02.16
    
- cmd /f:off
 findstr /v /r /c:"^[(スペース)(タブ)]*$" foo.txt
 exit
- 
      368デフォルトの名無しさんsage2014/02/03(月) 06:03:11.24
    
- for /f "delims=N" %I in ('cmd /u /c echo 三') do findstr /r /c:"[^ %I]" test.txt
- 
      369デフォルトの名無しさんsage2014/02/03(月) 21:01:47.89
    
- forってDOSのころから変態だったけどNTになって変態を超えたよね
- 
      370366sage2014/02/03(月) 23:42:25.65
    
- 
      >>366
 ありがとうございます。望みどおりの動作でした。
 
 >>367
 「三」が「TAB文字+N」とは知りませんでした。
 逆CLASSってこんな使い方をするんですね。勉強になりました。
- 
      371デフォルトの名無しさんsage2014/02/04(火) 08:35:12.20
    
- set sequence=月火水木金土日
 set today=%sequence:‾3,1%
 echo 今日は%today%曜日です。
 
 ここのオフセット数3に変数使いたいのですがどうやったらいいでしょうか
- 
      372デフォルトの名無しさんsage2014/02/04(火) 11:20:09.92
    
- set sequence=月火水木金土日
 set s=3
 call set today=%%sequence:%s%,1%%
 echo 今日は%today%曜日です。
- 
      373デフォルトの名無しさんsage2014/02/04(火) 11:21:16.69
    
- チルダが抜けてた
 call set today=%%sequence:‾%s%,1%%
- 
      374デフォルトの名無しさんsage2014/02/04(火) 18:04:07.11
    
- おお!ありがとうございます
 変数内変数ていつもはset /aで外側の%省略してたんだけどこういう手もあるのですね
- 
      375デフォルトの名無しさんsage2014/02/06(木) 00:35:35.65
    
- 
      バッチファイル向け統合開発環境だとさ
 http://www.forest.impress.co.jp/docs/review/20140204_633694.html
- 
      376デフォルトの名無しさんsage2014/02/06(木) 01:39:51.77
    
- echo onでいいんじゃね?
- 
      377デフォルトの名無しさんsage2014/02/06(木) 04:09:41.12
    
- :L1
 pause
 goto L1
 
 ↑のバッチファイル作って実行するとEnter押してもバッチが終わらなくて無限ループするけど
 pauseで止まってる時にバッチファイル開いて3行目を消してからEnter押すとバッチが終了する。
 これってpauseでEnter押した時はバッチファイルを再読み込みしてるって事なのかな?
- 
      378デフォルトの名無しさんsage2014/02/06(木) 07:47:42.59
    
- 一行毎に読み込んでる
 処理の長いバッチファイルを実行中に書き換えると予期しないことがおきる
- 
      379デフォルトの名無しさんsage2014/02/07(金) 01:18:32.48
    
- 
      >>378
 この仕様地味にうざいんだよなぁ…
 記事読んでないけど>>375のとかでそれが回避できるならそれだけでも割と価値がある
- 
      380デフォルトの名無しさんsage2014/02/07(金) 06:03:48.40
    
- 最大メモリ640KiBのスクリプトだから
- 
      381デフォルトの名無しさんsage2014/02/07(金) 08:12:37.19
    
- まあメモリーが少ない時代からのソフトだから 数KB でも節約したかったんだろうな
 でも、それで困ったことはないが...
- 
      382デフォルトの名無しさんsage2014/02/07(金) 19:20:37.63
    
- ディスクキャッシュ効かせると恐ろしく速度上がるよな
- 
      383デフォルトの名無しさんsage2014/02/07(金) 22:56:08.06
    
- 逆に実行中に自身を書き換えさせていくことで変態的なことができるのか
 
 
 自分にはまったく思いつかないが
- 
      384デフォルトの名無しさんsage2014/02/08(土) 10:20:20.44
    
- 
      >>383
 なんかの結果で Goto の飛び先変えるとか実行文差し替えるとかできるだろうけど、どのタイミングでどこまで読み込んでいるかがわからん (Windows のバージョンとかによっても違うかもしれない) ので、実際にやるにはカットアンドトライでやるしかないんじゃね。
- 
      385デフォルトの名無しさんsage2014/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デフォルトの名無しさんsage2014/02/08(土) 11:37:24.51
    
- やっぱあれ行単位じゃなくてByteなのか
 前にテストしながら編集してたとき
 何かキー押したら明らかに行の途中の処理が動いてびびった
- 
      387デフォルトの名無しさん2014/02/08(土) 15:47:33.14
    
- surface pro2(Windows8.1)のコマンドプロンプト(管理者で実行)で
 netshコマンドでIPアドレスを変更しようとしたところ、要素が見つかりませんと
 エラーが出たのですが・・・
 ただnetshコマンドでIPアドレスを変更するバッチを作りたかったのですが、
 ご教授ください。
- 
      388デフォルトの名無しさんsage2014/02/08(土) 16:02:03.04
    
- 
      >>387
 PowerShell じゃねーの?
- 
      389デフォルトの名無しさんsage2014/02/08(土) 20:17:44.14
    
- 
      >>387
 netsh ?
 とかやって操作方法を確認すれば?
- 
      390デフォルトの名無しさんsage2014/02/08(土) 20:49:11.32
    
- バッチファイルでパーセントエンコード (URL エンコード/Web エンコード)
 を行うにはどうしたら良いでしょうか?
- 
      391デフォルトの名無しさんsage2014/02/08(土) 22:11:25.20
    
- wsh
 powershell
- 
      392デフォルトの名無しさんsage2014/02/09(日) 12:09:13.27
    
-  ¥¥pc1¥share¥test.txtと
 ¥¥pc2¥share¥test.txtを
 15分毎に比較して違いがあったら
 のファイルをのファイルに上書きコピーしたいのですが
 どのようなバッチを書けばよいのかわかりません。
 schtasksというコマンドで実現出来るのでしょうか?
 ネットワークに負荷がかかるので違いが無い場合は
 コピーしないようにしたいのですが?
- 
      393デフォルトの名無しさんsage2014/02/09(日) 12:27:46.52
    
- fc file1 file2 || copy /y file1 file2
 をタスクマネージャーで15分毎に実行する
- 
      394デフォルトの名無しさんsage2014/02/09(日) 12:53:33.01
    
- アーカイブ属性が付くか日付が更新されるならxcopyでいいんじゃね?
- 
      395デフォルトの名無しさんsage2014/02/09(日) 13:11:35.81
    
- 
      >>392
 > ネットワークに負荷がかかるので
 
 比較するためにどうせファイル読み出すんなら、毎回コピーすればいいんじゃ...
 更新日時とか見れば?
- 
      396デフォルトの名無しさんsage2014/02/09(日) 14:05:52.03
    
- ま、比較はネットワーク負荷ゼロでできると思い込んでるお花畑君だからね
- 
      397392sage2014/02/09(日) 14:57:44.77
    
- 
      >>393
 すみません、書き方が悪かったです。
 が更新されたらにコピーしたいのです。
 つまり内容を見る必要はなくて更新日時がとで違ったらコピーしたいのです。
- 
      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デフォルトの名無しさんsage2014/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デフォルトの名無しさんsage2014/02/11(火) 20:36:57.80
    
- 変則的なコマンド書くと落ちる
 ifの連続でerrorlevelが同じ値を出力され続けて参考にならない
 阿久津って相変わらず面白くない記事を書くね
- 
      404デフォルトの名無しさんsage2014/02/11(火) 20:42:32.67
    
- 
      >>403
 > 変則的なコマンド書くと落ちる
 > ifの連続でerrorlevelが同じ値を出力され続けて参考にならない
 
 必死で難癖つけましたってか (w
- 
      405デフォルトの名無しさん2014/02/11(火) 23:17:33.22
    
- 本人乙
- 
      406デフォルトの名無しさんsage2014/02/12(水) 08:03:29.86
    
- 自演認定カッケー (w
- 
      407デフォルトの名無しさんsage2014/02/12(水) 11:10:41.82
    
- ガキ共は一目で分かるな
- 
      408デフォルトの名無しさんsage2014/02/12(水) 23:31:01.64
    
- システム環境変数のPathの末尾に「;C:¥test¥hoge.exe」を追加したら
 コマンドプロンプト画面で"hoge"と入力してエンター押すだけでhoge.exeが実行出来るようになりました。
 ただ「ファイル名を指定して実行」画面から"hoge"と入力してOK押しても「'hoge'が見つかりません」
 などと表示されてhoge.exeが実行出来ません。
 「ファイル名を指定して実行」画面からもコマンドプロンプト画面と同様に実行出来るようにするには
 どうすればよいのでしょうか?
 スレチですみません。どこで聞けばよいかわからなかったので…
- 
      409デフォルトの名無しさんsage2014/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デフォルトの名無しさんsage2014/02/13(木) 01:08:35.66
    
- ガキって平日の真っ昼間に、にちゃんやってる奴のことかな?
- 
      411デフォルトの名無しさんsage2014/02/13(木) 06:58:26.11
    
- 
      >>408
 Pathを実行ファイル単位で追加する人、初めて見たかも
- 
      412デフォルトの名無しさんsage2014/02/13(木) 07:22:14.58
    
- Pathってそんなこと(ファイル単位)できたんかえ?
- 
      413デフォルトの名無しさんsage2014/02/13(木) 10:01:12.03
    
- 
      >>411
 PATHじゃねーだろよく見ろよ知ったかぶりしないで。
- 
      414409sage2014/02/13(木) 11:18:38.74
    
- 
      >>408
 App Pathsが定番だと思ってレスしたけど、パス通ってればApp Paths設定しなくても起動するはずだけどな。
 環境変数は設定後に起動したプロセス(の子プロセス?)にしか反映されなかったりするから、設定したら再起動。
 
 あと411-412が言ってるように普通はファイル名まで入れず、必要なディレクトリまでのパスだけ設定する。
 実行ファイルをパスに指定した場合にファイル名を指定して実行で探しに行くのかどうかは知らない。
- 
      415デフォルトの名無しさんsage2014/02/13(木) 11:24:50.12
    
- すまんなんか間違えてた
- 
      416デフォルトの名無しさんsage2014/02/13(木) 11:46:58.19
    
- HKLMだと再起動するまででHKCUはプロファイルの再読込で済むんじゃなかったけ?
- 
      417デフォルトの名無しさんsage2014/02/13(木) 12:26:59.37
    
- 
      >>416
 レジストリ(App Pathsとか)は対象アプリケーションが値のコピーを保持して無ければ即反映されるよ。
 レジストリハイブだったかを直接操作した場合はしらんけど、レジストリエディタでローカル操作ならそう。
 
 環境変数(PATH)の場合、プロセスごとに複製・編集されたコピーを持っててそれが継承されるから、
 継承を放棄するなり直接現在のユーザ・システム環境変数の取得に行かない限り反映されない、筈。
 
 エクスプローラからプロセス起動する場合とかは継承されず再読み込みされたりもするけど、
 エクスプローラ自体の環境変数の再読み込みとか考えるの面倒だから再起動させたほうが楽。
- 
      418デフォルトの名無しさんsage2014/02/13(木) 15:06:19.66
    
- 
      >>399
 普通に実行した状態で
 ...
 mycommand || startide
 ...
 みたいになにか致命的な失敗したらIDE起動して変数インスペクトできたら
 便利なんだけどな
 
 rubyだとIRB.startで簡易デバッガみたいの立ち上がってよかった
 
 今はテキストエディタのアウトラインモードにコードの断片書いていって
 カーソル行のある部分の断片だけを即実行できるようなマクロ作って
 ちょっとしたテストなんかをやってるせいであまりIDEは必要としてないけど
 
 mycommand || goto fatalerror
 
 :fatalerror
 echo デバッグしろ
 start visualbat "%‾f0"
 goto :eof
 とか仕込んどくとちょっと便利かね
- 
      419408sage2014/02/13(木) 21:10:27.60
    
- 
      >>414
 今日試しました。
 App Pathsへのキー追加で[ファイル名を指定して実行]画面からも
 EXE名だけで実行出来るようになりました。ありがとうございます!
 ちなみに環境変数Pathに追加したのは「;C:¥test」であり、EXE名は余分でした…
 それとシステム環境変数Pathに追加後に再起動をしてませんでした。そのせいかも…
 その点については明日また試してみます。
 どうもありがとうございました。
- 
      420419sage2014/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デフォルトの名無しさんsage2014/02/14(金) 22:30:35.93
    
- 
      >>420
 「;C:¥¥test;C:¥SakuraEditor」を追加・再起動して環境変数を正しく追加できていれば、
 App Pathsへのキー追加は不要だよ。
 
 ファイル名の指定と実行から「メモ帳」で以下を試すと引数のファイルで開くでしょ。
 notepad "C:¥abc.txt"
 サクラエディタでも同様な原理のはずだけど。
- 
      422420sage2014/02/14(金) 23:11:01.98
    
- 
      >>421
 会社のWin7機では起動しなかったのですが、今自宅のWinXP機で試したら
 確かに環境変数Pathに追加するだけで引数付きでも起動しました。
 うーん、原因がわかりませんね。
 いい加減この話題が長引いてるんでこの辺にしときます…
- 
      423デフォルトの名無しさんsage2014/02/15(土) 10:20:32.09
    
- doskeyコマンドって日常的に使ってる人いるの?
 使いどころがよくわからない。
- 
      424デフォルトの名無しさんsage2014/02/15(土) 14:15:20.25
    
- 
      >>423
 Win9xの頃は常用してたなあ
 こことか見て解る通り、今のコマンドプロンプトなら当たり前の機能が無かったから
 
 http://pf-j.sakura.ne.jp/program/dos/doscmd/doskey.htm
- 
      425デフォルトの名無しさんsage2014/02/15(土) 16:33:26.63
    
- 
      >>423
 使いどころはマクロ定義(alias機能)
- 
      426デフォルトの名無しさんsage2014/02/15(土) 17:36:38.77
    
- KI-Shellを知っているやつは相当なオヤジ
- 
      427デフォルトの名無しさんsage2014/02/15(土) 23:34:08.90
    
- history.comしか知らない
- 
      428デフォルトの名無しさんsage2014/02/16(日) 00:56:25.51
    
- Vzだけで十分だった
- 
      429デフォルトの名無しさんsage2014/02/17(月) 23:15:55.37
    
- なんかオモロいことない?
- 
      430デフォルトの名無しさんsage2014/02/18(火) 01:31:18.30
    
- call %0
 
 限界に挑戦しようぜ!
 俺は704回
- 
      431デフォルトの名無しさんsage2014/02/18(火) 21:58:34.35
    
- 
      >>430
 どういう意味?
- 
      432デフォルトの名無しさんsage2014/02/19(水) 00:27:48.34
    
- 再起呼び出し
- 
      433デフォルトの名無しさんsage2014/02/19(水) 00:28:18.89
    
- × 再起
 
 ○ 再帰
- 
      434デフォルトの名無しさんsage2014/02/20(木) 21:12:55.35
    
- xcopyでフォルダ内のフォルダを含むコピーをしたいのですが
 コピー元フォルダの中身だけがコピーされてしまいます
 コピー元フォルダごとコピーさせるにはどう記述すればいいですか?
 
 xcopy C:¥hoge¥hage D:¥backup /e
 この例で言うとhageフォルダの中身じゃなくhageフォルダごとコピー先にコピーさせたいんです
- 
      435デフォルトの名無しさんsage2014/02/20(木) 21:30:33.13
    
- xcopy C:¥hoge¥hage D:¥backup /e /i
 とか
- 
      436デフォルトの名無しさん2014/02/21(金) 02:29:48.79
    
- robocopy使うといいよ
- 
      437デフォルトの名無しさんsage2014/02/21(金) 05:50:04.69
    
- 
      >>435 ハゲが足りない
 xcopy c:¥hoge¥hage d:¥backup¥hage /e /i
- 
      438デフォルトの名無しさんsage2014/02/21(金) 13:20:39.73
    
- 回答ありがとうございます
 コピー先にもhageフォルダ作るしかないですかぁ
 robocopy試してみます
- 
      439デフォルトの名無しさんsage2014/02/21(金) 21:30:02.10
    
- だから /i にすると作成されるんだよ
- 
      440デフォルトの名無しさんsage2014/02/22(土) 00:09:31.29
    
- そういうことか理解しました
- 
      441デフォルトの名無しさんsage2014/02/23(日) 16:04:03.91
    
- 今日自宅PCでバッチコマンドの研究にいそしんでたんだが、手だけ寒い…
 んで今ドンキで指切り手袋買ってきたらあったかくて捗るようになったw
 チラ裏スマソ…
- 
      442デフォルトの名無しさんsage2014/03/01(土) 00:33:51.41
    
- Windows7でバッチファイル作ってるんだけど質問
 echoを使ってファイルにリダイレクトで出力をしてるときに、ファイルがパーミッション不足
 なんかで書き込めなかったときは、"アクセスが拒否されました"ってエラー表示が出るけど、
 エラー表示を一切非表示にしたいんだ
 
 例: echo hogehoge > hoge.txt
 
 上の例で>NUL の挿入場所がわるいと、ファイル自体出力されなくなるし どういう書式で書けば
 いいかな? echoを使ったリダイレクトでエラーのみ非表示って不可能?
- 
      443デフォルトの名無しさんsage2014/03/01(土) 00:41:54.65
    
- echo hogehoge > hoge.txt 2> NUL
 
 とか無い頭でやってみたけど、全滅('A`)
- 
      444デフォルトの名無しさんsage2014/03/01(土) 02:40:22.17
    
- 2> NUL (> hoge.txt echo hogehoge)
- 
      445デフォルトの名無しさんsage2014/03/01(土) 06:28:53.14
    
- 
      >>444
 ありがとう
 
 見事に解決したよ
- 
      446デフォルトの名無しさんsage2014/03/01(土) 07:33:42.66
    
- …
 まあ質問者が満足したんならいいか
- 
      447デフォルトの名無しさんsage2014/03/01(土) 14:25:04.61
    
- もはや式の意味がさっぱりだけど
 なんか問題あるの
- 
      448デフォルトの名無しさんsage2014/03/01(土) 21:08:31.96
    
- 
      >>446
 ん、>>444ってなにか問題あるの?
- 
      449デフォルトの名無しさんsage2014/03/01(土) 21:32:08.33
    
- ()の必要性
- 
      450デフォルトの名無しさんsage2014/03/01(土) 21:48:43.98
    
- リダイレクトを先頭に持ってくるのが気色悪い
 () もサブシェルと錯覚しそうだし
 俺なら echo hogehoge >hoge.txt 2>NUL と書くな
- 
      451デフォルトの名無しさんsage2014/03/01(土) 22:08:18.03
    
- 
      >>450
 それではエラーはそのまま出るぞ
- 
      452デフォルトの名無しさんsage2014/03/01(土) 22:16:01.32
    
- 
      >>451
 実際に試したのか?
- 
      453デフォルトの名無しさんsage2014/03/01(土) 23:49:33.58
    
- 
      >>452
 当たり前だろ。
 
 お前は実際試しもしないで色々言ってたのか?
 どうしようもないな。
- 
      454デフォルトの名無しさんsage2014/03/02(日) 01:27:07.81
    
- 
      >>452みたいな奴がテスターだったら恐ろしいな。
 既に消化したケースと似たケースはことごとくはしょりそうw
- 
      455デフォルトの名無しさんsage2014/03/02(日) 09:32:31.43
    
- 試すもなにも、hoge.txtに読み取り属性でも付けてやるだけじゃん。
 恥の上塗りっすなあw
- 
      456デフォルトの名無しさんsage2014/03/02(日) 10:15:30.74
    
- 
      >>450
 > () もサブシェルと錯覚しそうだし
 
 はあ?
- 
      457デフォルトの名無しさんsage2014/03/02(日) 12:23:02.46
    
- これってechoのエラー出力じゃなくてリダイレクトのエラー出力なんだから
 カッコが必要って事だよね?
- 
      458デフォルトの名無しさんsage2014/03/02(日) 15:21:55.39
    
- 
      (echo hogehoge> hoge.txt) 2>nul
 
 これでもいい…よね?
 というか>444の (> hoge.txt がその後ろのechoより
 前に書いて正しく動く理屈が分からん…
- 
      459デフォルトの名無しさんsage2014/03/02(日) 15:27:21.39
    
- あ、書く順番が違うだけで結局意味は同じになるという事なのかな?
- 
      460デフォルトの名無しさんsage2014/03/02(日) 16:32:22.38
    
- echo 0 0 0>hoge.txt
 >hoge.txt echo 0 0 0
- 
      461デフォルトの名無しさんsage2014/03/02(日) 18:44:53.53
    
- (echo 0 0 0)>hoge.txt
- 
      462デフォルトの名無しさんsage2014/03/03(月) 00:48:46.69
    
- atコマンドで例えば10時にタスク登録すると9時59分55秒ぐらいに実行されたりするんだけど、仕様ですか?
- 
      463デフォルトの名無しさんsage2014/03/03(月) 01:58:30.60
    
- 知らないけど条件判定して成立するまで待機とか誤差の範囲がある程度ならそのぶん遅延させればいいよ
- 
      464デフォルトの名無しさんsage2014/03/04(火) 14:55:38.42
    
- 余裕を見てるんだろ
- 
      465デフォルトの名無しさんsage2014/03/15(土) 08:38:01.76 ID:W3vaEoS8
    
- ワイルドカードってトランプのジョーカーのことなんだね。知らんかった。
- 
      466デフォルトの名無しさん2014/03/20(木) 23:40:42.82 ID:w7dI4Sn/
    
- 特定のアプリケーションを手前に表示することってできますか?(常に手前にするではないです。)
 例えば最小化表示されているchrome.exeを最大化する、みたいな感じです。
- 
      467デフォルトの名無しさんsage2014/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デフォルトの名無しさんsage2014/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デフォルトの名無しさんsage2014/03/21(金) 19:29:01.33 ID:WeV/6DnU
    
- ipconfig /release
 ipconfig /renew
 を自動実行してくれるバッチファイルスクリプト書いてください
- 
      470デフォルトの名無しさんsage2014/03/21(金) 19:31:16.12 ID:WeV/6DnU
    
- ただ並べるだけでした、申し訳ありませんでした
- 
      471デフォルトの名無しさんsage2014/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デフォルトの名無しさんsage2014/03/21(金) 21:53:03.47 ID:ooHkrVzN
    
- またこいつか
- 
      473デフォルトの名無しさんsage2014/03/21(金) 23:04:54.72 ID:gHlpyOHO
    
- 
      >>467
 WSHですか。ちょっと試してみます。どうもです。
- 
      474デフォルトの名無しさんsage2014/03/23(日) 01:24:23.43 ID:Yn0Mpkgh
    
- 
      >>466
 外部ツール使っていいならNirCmdのwin activate使うのが簡単かな
 http://www.nirsoft.net/utils/nircmd.html
- 
      475デフォルトの名無しさんsage2014/04/07(月) 17:41:30.62 ID:/Fly5Za8
    
- バッチファイルでホットキーを実行したいのですが方法が判りません。
 
 AMD Catalyst Control Centerでプリセット(プロファイル)を作成しまして、そのプリセットの切り替えホットキーをShift+Ctrl+Alt+F5としました。
 バッチファイル実行時にプリセットを切り替えたいのですが、どの様にすれば良いのでしょうか
- 
      476デフォルトの名無しさんsage2014/04/07(月) 21:32:45.26 ID:KC6iYSmv
    
- バッチでは無理
- 
      477デフォルトの名無しさんsage2014/04/07(月) 22:11:32.06 ID:UEzLVZ4u
    
- 
      >>475
 よっしゃーできたでー
 遠慮なく俺を使えーー
 ttp://www1.axfc.net/u/3217389.zip
- 
      478デフォルトの名無しさんsage2014/04/08(火) 03:18:39.56 ID:1rLcmbOn
    
- This program cannot be run in DOS mode.
- 
      479デフォルトの名無しさんsage2014/04/08(火) 17:05:44.73 ID:/pM0b3ID
    
- マルウェアを検出しました
- 
      480デフォルトの名無しさんsage2014/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デフォルトの名無しさんsage2014/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デフォルトの名無しさんsage2014/04/20(日) 18:34:44.72 ID:47OpZGct
    
- すみません、自己解決しました。
 """"hoge"""=123"
 
 で検索できました。
- 
      484デフォルトの名無しさん2014/04/20(日) 20:07:42.26 ID:47OpZGct
    
- ついでにもうひとつお願いします。
 
 
 AAA1BBB
 CCC2DDD
 EEE3FFF
 
 というファイルがあり、
 CCCとDDDに囲まれている文字列をfindstrで検索し、
 その囲まれている数字を変数に入れたい場合、どう書けばいいでしょうか?
- 
      485デフォルトの名無しさんsage2014/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デフォルトの名無しさんsage2014/04/21(月) 07:02:01.25 ID:q161FfOy
    
- 横だけど/xって使ったこと無いな。
 「findstr /x "CCC.*DDD"」 = 「findstr "^CCC.*DDD$"」
 ってことなのかな?
- 
      488デフォルトの名無しさんsage2014/04/21(月) 08:45:51.67 ID:FhRn8cH8
    
- findstr /?も使ったことないのか?
- 
      489デフォルトの名無しさんsage2014/04/22(火) 23:18:41.06 ID:cvlcjJ6r
    
- dir /s >aaa.txt
 現在のディレクトリ以下の構成をテキストに書き出せますが
 
 これでヘッダの部分と各ファイルの作成時間が不必要なので無くした状態のものがほしいのですが
 やり方をおしえてください
- 
      490デフォルトの名無しさんsage2014/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//889-890
- 
      491デフォルトの名無しさんsage2014/04/23(水) 02:20:39.63 ID:hRkJQMCF
    
- Powershell便利だけど、大抵のところにはインストールされてないから意味ないんだよね
 結局バッチコマンド駆使するのがもっとも汎用的なテクニックになっちゃう
- 
      492デフォルトの名無しさんsage2014/04/23(水) 02:21:48.58 ID:xfxk/aUG
    
- @(for /r %%F in (*) do @(echo %%‾tF %%‾aF %%‾zF %%‾fF))>>aaa.txt
- 
      493デフォルトの名無しさんsage2014/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デフォルトの名無しさんsage2014/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デフォルトの名無しさんsage2014/04/23(水) 18:10:28.46 ID:kg2Y+R/t
    
- さらに訂正
 
 文字"&"と"^"はフォルダ・ファイル名として許されてないと思ってたが、指定できるようなので
 set a=%a:^=^^^^%
 set a=%a:&=^^^&%
 を
 :disp
 の下に挿入する
- 
      496デフォルトの名無しさんsage2014/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デフォルトの名無しさんsage2014/04/23(水) 22:37:59.47 ID:Btqa34NG
    
- 
      >>493-496
 492の方法で大体何とかなるんだからいい加減諦めたら?
 そういうアプローチも一つの手段だけど、ながったるい
- 
      498デフォルトの名無しさんsage2014/04/27(日) 21:38:25.23 ID:WnTGK1be
    
- アプローチの仕方次第で変えられる訳ね
 cmdは奥が深いわ
- 
      499デフォルトの名無しさんsage2014/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デフォルトの名無しさんsage2014/04/28(月) 21:43:09.02 ID:01Y5aoNq
    
- 1>nul 2>nul
- 
      501499sage2014/04/28(月) 22:55:55.78 ID:dKlvDiul
    
- 
      >>500さん、レスありがとうございます。
 それですと、起動している場合の出力まで捨てられてしまうため都合が悪いのです。
 エラー出力のみ抑止できる方法を探しております。
- 
      502デフォルトの名無しさんsage2014/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デフォルトの名無しさんsage2014/04/29(火) 01:11:47.71 ID:2qRMolya
    
- tasklist|find "appname.exe"&&tasklist /FO CSV /NH /FI "IMAGENAME eq appname.exe"
- 
      504デフォルトの名無しさんsage2014/04/29(火) 01:53:50.07 ID:cSOiqp2/
    
- Win7でtasklistコマンド打ってみたけど、
 どうもそのエラーメッセージは標準出力に出してるようだ
 ふつうにfindやfindstrでフィルタできる
- 
      505499sage2014/04/29(火) 09:40:56.77 ID:phxhUks1
    
- 
      499です、皆さんレスありがとうございます。
 
 >>502さん、なるほどfind側でerrorlevel取るんですね。
 tasklistでは取り方がわからなかったので参考になります。
 
 >>503さん、見つかった場合に次のコマンド実行ですね、参考になります。
 
 >>504さん、標準出力なんですね。どおりで表示の抑止がされないはずですね。
 findやfindstrでフィルタしたいと思います。
 
 表示の抑止は無理のようですので、皆さんからご提示いただいた案で行いたいと思います。
 夜分遅くに対応していただきありがとうございました。
- 
      506デフォルトの名無しさんsage2014/05/12(月) 00:47:54.43 ID:y0XlS5ot
    
- 
      質問させていただきます
 
 YouTubeの動画IDがファイル名になっているファイル(例:動画ID.拡張子)がいくつかあるフォルダがあります
 フォルダ内にあるファイル全てを
 動画IDを元にhtmlからtitleを取得して「動画ID_動画タイトル.拡張子」に一括変更したいのですが
 そのようなことは実現可能でしょうか?
 
 以下のURLで例を挙げますと
 
 
 jNQXAC9IVRw.mp4というファイルがあります
 これをhtmlの「Me at the zoo - YouTube」から「Me at the zoo - YouTube」を取得し
 「jNQXAC9IVRw_Me at the zoo - YouTube.mp4」というファイル名に変更したいです
 
 
 まずどんな手段で実現できそうなのかすら分からなかった為一番初めにこちらのスレで質問させていただきました
 バッチファイルで出来ることの範囲外でしたら何か他の手段で実現できそうな方法を助言していただけたらと思います
 よろしくお願いいたします
- 
      507デフォルトの名無しさんsage2014/05/12(月) 02:17:57.44 ID:OSTAWnZg
    
- 自分でやるとするならいくつかのツール、curl、yagrep、onigsed、nkf32 を組み合わせる。
 
 ファイル名を for とかで適当に取得 & 動画URL生成
 curl で動画URLにアクセス、
 grep (yagrep) でタイトル抜き出し、nkf32 で SJIS化、
 sed (onigsed) でファイル名に使えない文字などを適当に置換 & ファイル名を生成
 リネーム
 
 上であげたツール4つと正規表現のちょっとした知識があればこんな感じで概ね可能かと。
 他の手段(バッチじゃない何か)使えるひとならもっとスマートにできると思う、
 試さずに書いているので何か変だったらごめん。
- 
      508デフォルトの名無しさんsage2014/05/12(月) 15:58:45.34 ID:c15PXCNt
    
- telnetとか使って無理やりいたすのがお前らのJOBじゃないのか!?
- 
      509デフォルトの名無しさんsage2014/05/12(月) 16:44:30.55 ID:VDtB2Dlh
    
- JScriptやらRubyやらを使えば良いんちゃう
- 
      510デフォルトの名無しさんsage2014/05/12(月) 17:58:34.90 ID:y9Wttb40
    
- 
      >>507
 そのメソッドでスクレイパー書いたことあるけど、辛かった
- 
      511デフォルトの名無しさんsage2014/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デフォルトの名無しさんsage2014/05/12(月) 18:35:50.65 ID:lu6e4KQq
    
- 
      fs = null;
 sh = null;
 
 function GetYoutubeTitle(Id) {
 var http = WScript.CreateObject("Msxml2.XMLHTTP");
 http.Open("GET", ""+Id, false);
 http.Send(); // 送信
 var re = new RegExp("(.*?)","i");
 http.responseText.match(re);
 return RegExp.$1;
 }
- 
      513デフォルトの名無しさんsage2014/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デフォルトの名無しさんsage2014/05/12(月) 21:29:34.26 ID:co2+qduL
    
- 
      >>510
 それはなんとも乙。
 本体というか >>507 の 根っこは「pixiv」や「小説を読もう」 とかのを拾ってくる用バッチ
 だったので個人的にモチベーションは高くて辛くは無かったかなw
- 
      515510sage2014/05/12(月) 22:07:09.17 ID:y9Wttb40
    
- 
      >>514
 ・・・俺も小説家になろうのダウンローダ書いてたけど、なんでこんなところで被るのかと。
 ちなみに出来が悪くて今はAndroidアプリに丸投げ中だけどコッチも出来が微妙という…
 やる気が出たらnode.jsで一から書き直すんだ、俺。と言ってはや2ヶ月……
- 
      516デフォルトの名無しさんsage2014/05/12(月) 22:07:19.86 ID:KlfPZvfD
    
- 
      >>511-513
 ありがとうございます!!
 できました!凄いです!感動しましいた!
 
 最初こちらの環境では「msxml3.dll: アクセスが拒否されました。」というエラーにより実行できなかったのですが
 http.Open("GET", ""+Id, false);
 のhttpをhttpsに書き換えたら一応動きました
 
 
 >>507さんもありがとうございました!
- 
      517デフォルトの名無しさんsage2014/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デフォルトの名無しさんsage2014/05/12(月) 23:36:41.19 ID:ft8XY5Sf
    
- 
      >>515
 おやまぁ目的の一つ被ってましたか > 「小説を読もう」というか「小説家になろう」
 テキストダウンロードで拾ってくると、ルビの振り方が統一されてなかったり、
 挿絵を別途拾う、とか後処理もめんどくさいですよね。
 
 node.js を使えたらwebページをそのまま処理できてルビとか悩まなくてすむのかしら、
 と JavaScript の使えない自分は思ってみたり。
 
 
 スレチごめんなさい
- 
      519デフォルトの名無しさんsage2014/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デフォルトの名無しさんsage2014/05/14(水) 14:06:05.60 ID:aKf3CI71
    
- あまりに酷いbatに全員ドン引き
 初心者過ぎる質問に更にドン引き
- 
      522デフォルトの名無しさんsage2014/05/15(木) 00:07:46.45 ID:N7Q6KVTa
    
- リネームもしないで移動させるだけなら
 全部消して一行書くだけだからなぁ…
- 
      523デフォルトの名無しさんsage2014/05/15(木) 02:48:01.95 ID:3O8Jckao
    
- 元のバッチ見てないから分からんが、リネームなしだと最後の行が駄目臭いんだが。
 とりま後ろから二行目を
 move /-y "%filename:‾1,-4%.mp4" "%MP4folder%¥%FolderName%"
 かな。
- 
      524デフォルトの名無しさんsage2014/05/16(金) 02:02:45.87 ID:+KKtBldE
    
- 動画のエンコードバッチで『バッチの中で複数のバッチを実行する』という事をしています
 
 録画終了後、バッチファイル1でリネーム&フォルダBへ移動
 フォルダBへ移動後、バッチファイル2を実行しリネームしたファイルを読み込み、エンコード開始
 
 こうするとフォルダBのエンコードバッチが同じフォルダにあるリネームされた動画ファイルを読みに行くのですが
 フォルダAに動画ファイルが無いという旨のエラーが出て終了してしまいます。
 
 フォルダBでバッチファイル2に動画を直接ドラッグアンドドロップすると正常に動くのですが
 バッチで同じことをしようとする場合には何か特別な事をしなければいけないのでしょうか。
- 
      525デフォルトの名無しさんsage2014/05/16(金) 02:26:40.76 ID:+gdxFKDb
    
- 
      >>524
 フォルダAっていうのはいったい何だ。
 
 echo onで実行過程を見ればすぐ問題は解決する気がするが。
 どうせカレントディレクトリが違うって程度だろう
- 
      526デフォルトの名無しさんsage2014/05/16(金) 03:26:58.99 ID:+KKtBldE
    
- 
      >>525
 記入不足でした、フォルダAは録画ファイルとバッチファイル1が置いてあるフォルダです。
 bat弄り始めて2日のビギナーですみません、カレントディレクトリを移すコマンドというのを試してみます。
- 
      527デフォルトの名無しさんsage2014/05/17(土) 08:29:08.67 ID:7hm1D3vf
    
- 録画云々ってことは別ドライブに移動させるとかしてそうな気がするんだけど、
 ディレクトリだけじゃなくてドライブも違うのに、カレントドライブ変更し忘れた、とかありそう。
 もしそうならCDコマンドに/Dオプション付けてフルパス指定するとかでどうぞ。
- 
      528デフォルトの名無しさんsage2014/05/17(土) 12:13:50.74 ID:BiK471B/
    
- cd /dはUNCパスには無力だから、自動でネットワークドライブ割り当ててくれる
 pushdの方がいいよ
- 
      529デフォルトの名無しさんsage2014/05/17(土) 14:50:29.76 ID:TPyMjFFn
    
- pushd使ってpopdしないで放置してって何回もやったらドライブどうなるの?
- 
      530デフォルトの名無しさんsage2014/05/18(日) 12:23:35.53 ID:utpaGJWH
    
- CMD.exeの/Sオプションってどういう時に使うの?
 イマイチ使いどころがわからない…
- 
      531デフォルトの名無しさんsage2014/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デフォルトの名無しさんsage2014/05/18(日) 13:16:29.16 ID:vCR91VC7
    
- for %%i in (*.ts) do call c:¥B¥enc.bat "%%i"
 
 enc.batそのものにファイルを次々にエンコするように書く(実行に引数不要)とかもあり。
- 
      533デフォルトの名無しさんsage2014/05/18(日) 14:26:50.09 ID:fAlXIwAd
    
- 
      >>532
 迅速なご返答ありがとうございます。
 こちらの記述でさっそく試してみます。
- 
      534デフォルトの名無しさんsage2014/05/18(日) 15:17:01.31 ID:fAlXIwAd
    
- 
      >>532
 無事TS毎の実行ができました。ありがとうございます。
 
 恐縮なのですが、もう一点質問させてください。
 無事エンコード環境が整ったと思ったのですが、一点問題が出てきました。
 私の環境だと録画ファイルを別ドライブへコピーして保存しています。
 
 copy c:¥録画¥*ts c:¥TS¥
 
 このコピーの際に、別途録画中のファイルがあると、それも一緒にコピーが実行されてしまいbatが固まってしまいました。
 録画中(使用中)のファイルはbat処理の対象にしない方法等はありますでしょうか。
 宜しくお願い致します。
- 
      535デフォルトの名無しさんsage2014/05/18(日) 15:27:24.31 ID:lJKMM0WQ
    
- forfiles /d -1とかやればいいんじゃね
- 
      536デフォルトの名無しさんsage2014/05/18(日) 15:39:39.71 ID:vCR91VC7
    
- 
      >>534
 録画ツールで録画終了時に何かさせるって事出来るだろ。
 tvrockかedcbか何使ってるか知らんが。
 
 録画終了直後に今録画したばかりのファイルを一つずつ
 保存用フォルダに移動させりゃいいだろ。
 そうすると録画フォルダには録画中のファイルしか
 存在しないことになり、一々区別の必要は無くなる。
- 
      537デフォルトの名無しさんsage2014/05/19(月) 22:44:50.28 ID:v7YGBcxx
    
- 
      どなたか>>530をお願いします…
    
- 
      538デフォルトの名無しさんsage2014/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デフォルトの名無しさんsage2014/05/21(水) 08:43:21.34 ID:JTjlvF/q
    
- このスレでコメント行を # とか... ひっとらえろ!
- 
      540デフォルトの名無しさんsage2014/05/21(水) 09:25:58.57 ID:ZkjZOJnO
    
- ::ヒャー
 echo ニゲロー
- 
      541デフォルトの名無しさんsage2014/05/21(水) 10:23:03.20 ID:FKaEHAnJ
    
- まぁバッチファイルにPower Shellとか書くだけなら書けるしなぁ。スレ主によるとJScript,Perlまで含まれるらしいからなんでもありだろ
- 
      542デフォルトの名無しさんsage2014/05/21(水) 11:01:59.88 ID:t9OqPpuo
    
- #.exeを作ってPathにいれときゃOk
- 
      543デフォルトの名無しさんsage2014/05/21(水) 22:24:16.50 ID:gR5PAME8
    
- バッチファイル 埋め込み 言語名とかでやると
 幾つかのスクリプトはやり方が出てくるね、もちろんjsもperlも出てくる
- 
      544デフォルトの名無しさんsage2014/05/22(木) 15:25:48.42 ID:jxaWow30
    
- ひっとらえろ→ヒットラーエロ→総統エロ→機密漏えい→きみ、えろい
- 
      545デフォルトの名無しさんsage2014/05/26(月) 06:37:11.07 ID:YzA3p+bh
    
- cmd.exe /c start "" "myprog.exe"
 とほぼ同等の機能を持つ
 shellexecute.exe myprog.exe
 みたいな標準かsysinternalレベルの準標準?のコマンドラインツールないですか
 
 cmdでもいいんですけど一瞬窓が見えるのがかっこ悪い…
- 
      546デフォルトの名無しさんsage2014/05/26(月) 07:41:59.81 ID:UJEeKjCa
    
- 呼び出し元がバッチファイルならstartの/MINオプション
 SysinternalsにもShellRunasとかpsexecがあったような
 それか、wscriptで小さいプログラム書くのもいいと思う
 
 あと、そもそもプラットフォームがコンソールになってる実行ファイル
 (いわゆるコマンドラインツール)の場合はOS側でコンソール出すぞ?
- 
      547デフォルトの名無しさんsage2014/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デフォルトの名無しさんsage2014/05/27(火) 22:22:34.54 ID:0lDTI3dH
    
- Unicode文字列の引数を使いたいのなら、バッチファイルの代わりにVBScriptファイルを//uオプション付で使うのが無難だと思う
- 
      550デフォルトの名無しさんsage2014/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デフォルトの名無しさんsage2014/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デフォルトの名無しさんsage2014/05/28(水) 18:25:10.93 ID:P9eKilM/
    
- あ〜!なるほどなるほど!ああ〜!なるほどー!
 
 ところでサイズの計算は
 imagesize+imagesize/20 じゃなくて
 imagesize-imagesize/22 でした。
- 
      554デフォルトの名無しさんsage2014/05/28(水) 22:07:20.42 ID:lbZqXReU
    
- 以前数値を分割して多数桁の計算をするバッチ例がアップされたような
- 
      555デフォルトの名無しさんsage2014/05/30(金) 01:00:45.77 ID:C7l1omU2
    
- dir /s /b > FileList.txt
 みたいなコマンドでファイル一覧を取得してるんだけど、あまりにも長いパスだと出力されないことがあるみたいです。
 これってコマンドの制限でしょうか?
 あとパスに半角の括弧とかがあると取得に失敗することがあるようです…
- 
      556デフォルトの名無しさんsage2014/05/30(金) 03:33:22.71 ID:COuvcjgg
    
- 
      >>555
 ttp://windows.microsoft.com/ja-jp/windows/file-names-extensions-faq#
 260文字までじゃなかったでしたっけ?
- 
      557片山博文MZ悪魔崇拝 ◆T6xkBnTXz7B0 2014/06/04(水) 17:19:20.90 ID:qVJRsv3N
    
- 二つのファイルのどちらが新しいかを判定するコマンドはありませんか?
- 
      558デフォルトの名無しさん2014/06/04(水) 17:29:48.92 ID:qVJRsv3N
    
- あげ
- 
      559デフォルトの名無しさんsage2014/06/04(水) 18:10:42.52 ID:PnC/MSMb
    
- 
      >557
 そんなコマンドは無いが、以下のコマンドを使えばコピー元の日付がコピー先の日付より新しいファイルだけをコピー可。
 
 xcopy コピー元ファイル コピー先ファイル /d
- 
      560デフォルトの名無しさんsage2014/06/04(水) 19:56:30.93 ID:T/e1Kqo3
    
- 
      >>557
 replaceコマンドもあるよ
 
 単純に日付を比較したいなら
 @echo off
 set timeA=%‾t1
 set timeB=%‾t2
 set timeA=%timeA:‾0,-6%
 set timeB=%timeB:‾0,-6%
 set timeA=%timeA:/=%
 set timeB=%timeB:/=%
 echo %timeA%
 echo %timeB%
 if %timeA% neq %timeB% goto next
 set timeA=%‾t1
 set timeB=%‾t2
 set timeA=%timeA:‾-5%
 set timeB=%timeB:‾-5%
 set timeA=%timeA::=%
 set timeB=%timeB::=%
 echo %timeA%
 echo %timeB%
 :next
 if %timeA% equ %timeB% echo %fileA%と%fileB%は同じ
 if %timeA% gtr %timeB% echo %fileA%が%fileB%より新しい
 if %timeB% gtr %timeA% echo %fileB%が%fileA%より新しい
- 
      561デフォルトの名無しさんsage2014/06/04(水) 20:09:25.03 ID:T/e1Kqo3
    
- 訂正
 %fileA% → %1
 %fileB% → %2
- 
      562デフォルトの名無しさんsage2014/06/04(水) 21:03:42.32 ID:O3v0nml9
    
- notepad "C:¥My Documents¥hoge.txt"
 notepad "C:¥My Documents¥hoge2.txt"
 
 ↑の2行をコマンドプロンプトにペーストした場合はhoge.txt、hoge2.txtの両方がメモ帳で開くのに
 この2行をbatファイルに保存して実行するとhoge.txtしか開かない…
 でもhoge.txtを閉じるとhoge2.txtが開く。
 2つを同時に開くにはどうすれば…
- 
      563デフォルトの名無しさんsage2014/06/04(水) 21:09:38.46 ID:dQZWfFG0
    
- start なにか.exe
- 
      564デフォルトの名無しさんsage2014/06/04(水) 21:09:53.94 ID:CbH0LAtj
    
- start
- 
      565デフォルトの名無しさんsage2014/06/04(水) 22:35:26.88 ID:2zFg5JG5
    
- pushdはバッチ終わったら勝手に元に戻るようにして欲しかった
- 
      566562sage2014/06/04(水) 22:42:41.49 ID:O3v0nml9
    
- 
      >>563-564
 同時に開くようになりました。ありがとうございます!
- 
      567デフォルトの名無しさんsage2014/06/05(木) 02:33:00.20 ID:vJJ3Yq9J
    
- 
      >>565
 popdも対で使えよ
- 
      568デフォルトの名無しさんsage2014/06/05(木) 07:32:26.92 ID:hkOGLRHa
    
- 
      >>557
 nmake使えよ。どうせ入ってるだろ。
- 
      569デフォルトの名無しさんsage2014/06/06(金) 07:24:22.17 ID:Q/+IBvSM
    
- mountvol, mklink では GUID を指定してリンクできるが
 mountvol の /L で表示される GUID が使えることがなかなか分からなかった。
 
 リンク時にドライブ文字を使うと、ドライブ文字を消したときにリンクが途切れるんだよね。
 それで ID を指定する方法で自動でやれないか探してたんだけど・・・
 
 GUIではディスクの管理からパーティションを右クリックしてプロパティを表示すると、
 セキュリティタブにオブジェクト名として表示されたりするが、
 ドライブ文字が割り当てられてるとそっちしか表示されない。
 
 BCDEDIT でおなじみの GUID だが、どっから持ってくるのか分からなかった。
 diskpart の UNIQUEID はディスクの ID しか取れない
 diskpart の SetID、DetailID のそれっぽいのは種類であって一意のIDではなかった。
 
 一旦ドライブ文字を割り当てて 「 mountvol T: /L 」とかすれば簡単に取得できた。
 
 
 あと、
 echo コマンド1 ^m^j コマンド2 | diskpart
 で改行コードを送れば複数のコマンドが使えるかと思ったけどそんなことはなかった。
- 
      570デフォルトの名無しさんsage2014/06/08(日) 09:19:25.99 ID:KZyWKYcC
    
- 特定のフォルダ内にあるテキストファイルを移動&bat処理したいと考えています。
 
 フォルダ1にテキストファイルが存在する場合にsagyou1.batを実行
 【フォルダ2に移動、移動先に置いてあるsagyou2.batファイルの実行】
 という処理をさせたいと思っております。それで以下のbatを作成しました。
 
 ■環境
 ・作業フォルダ
 フォルダ1(move.bat、sagyou1.bat) ←TXTファイルが置かれる。
 フォルダ2(sagyou2.bat) ←TXTファイルが移動され処理が実行される。
 
 sagyou1.batの中身↓
 ------------------------------------
 call C:¥フォルダ1¥move.bat
 
 pushd C:¥フォルダ2
 call C:¥フォルダ2¥sagyou2.bat
 popd
 ------------------------------------
 
 move.batの中身↓
 ------------------------------------
 move C:¥フォルダ1¥*.txt C:¥フォルダ2
 ------------------------------------
 
 ここで質問なのですが、フォルダ1に複数のtxtが存在する場合に
 txtファイルをまとめてではなく、1つずつ順番に移動&sagyou2.batを実行とさせるにはどうすれば良いでしょうか。
 1つずつ作業を行い、フォルダ1にtxtファイルが無くなれば終了とさせたいです。
 
 宜しくお願い致します。
- 
      571デフォルトの名無しさんsage2014/06/08(日) 09:36:25.63 ID:lOS3/hXP
    
- sagyou2をファイル名を引数として受け取り1ファイルを処理するよう
 書き換えた上で
 
 for %%i in (*.txt) do (
 move "%%‾dpnxi" "C:¥フォルダ2"
 pushd "C:¥フォルダ2"
 call sagyou2.bat "%%‾nxi"
 popd
 )
- 
      572デフォルトの名無しさんsage2014/06/08(日) 10:07:54.61 ID:apznQ67y
    
- 書き換えなくても move pushd call del popd の繰り返しでいいんでない?
- 
      573デフォルトの名無しさんsage2014/06/08(日) 10:58:05.85 ID:lOS3/hXP
    
- 削除していいもんなのかわからんだろ。
- 
      574デフォルトの名無しさんsage2014/06/08(日) 10:59:26.79 ID:lOS3/hXP
    
- というよりテキストとsagyou2の関連性が全く書かれてないからその辺わからんな。
- 
      575デフォルトの名無しさんsage2014/06/08(日) 11:06:31.32 ID:apznQ67y
    
- あぁそうか、出来るだけ簡単にと思ったんだわ
 del なら move よりも type や copy で複製しないとあれか
 for 使えば重複実行は心配しなくていいし(実行中に新たに増えると管理が面倒だけど)
- 
      576デフォルトの名無しさんsage2014/06/08(日) 19:24:12.63 ID:Hy6dbraR
    
- cmd /c rd /s / c:¥
- 
      577デフォルトの名無しさんsage2014/06/08(日) 19:31:53.34 ID:7VHXqNDN
    
- まだこんなの書くバカがいたのか
- 
      578デフォルトの名無しさんsage2014/06/08(日) 20:06:56.33 ID:lOS3/hXP
    
- qが無いからエラーになるだけじゃね?
- 
      579デフォルトの名無しさんsage2014/06/09(月) 00:17:05.79 ID:M2FDrQlR
    
- 
      >>576
 VMwareの仮想OS下でコップの中の嵐で楽しんでみたけど結構消えなくて残るよね
 消すなら消すでちゃんときれいに消せよと思った
- 
      580デフォルトの名無しさんsage2014/06/09(月) 02:46:54.46 ID:+aXF6mrh
    
- Unixの場合はファイル開いてる状態だとファイルノードの参照カウントがちゃんと増えるから、
 ディレクトリツリーからファイルノードへの参照だけ消して見た目はまっさらに出来るらしいね。
- 
      581デフォルトの名無しさんsage2014/06/15(日) 23:30:13.82 ID:VzDE569m
    
- for文を使用して、batファイルでiniファイルを読み込むのは出来たのですが
 iniファイルの中身に
 ----------
 txt=C:¥test.txt
 
 csv=C:¥test.csv
 ----------
 上記のような指定したテキストファイルやcsvファイルを
 さらに読み込むことは出来るのでしょうか?
 
 iniファイルの中身だけが表記されてしまいます
- 
      582デフォルトの名無しさんsage2014/06/16(月) 04:23:28.80 ID:LGYHjFZ1
    
- 
      >>581
 for /f "tokens=1,2 delims==" %%a in (iniファイル) do call :readfile%%a "%%b"
 goto :eof
 :readfiletxt
 start notepad.exe "%‾1"
 goto :eof
 :readfilecsv
 start notepad.exe "%‾1"
 goto :eof
- 
      583デフォルトの名無しさんsage2014/06/16(月) 05:13:49.05 ID:MvWKj145
    
- 
      >>581
 @echo off
 set c=0
 call :sub "iniファイル"
 goto :eof
 :sub
 setlocal
 if not exist "%‾1" goto :eof
 echo:
 echo === %‾1 ===
 for /f "usebackq tokens=*" %%i in ("%‾1") do (
 for /f "tokens=1,2 delims==" %%j in ("%%‾i") do (
 if "%%k" neq "" call :sub2 %%k
 )
 echo %%i
 )
 set /a c-=1
 if c geq 0 call :sub %%p%c%%%
 endlocal
 goto :eof
 :sub2
 for /f "tokens=*" %%x in ("%‾1") do set p=%%‾x
 if not exist "%p%" goto :eof
 call :sub3 "%‾1"
 if %flag% equ 0 goto :eof
 set p%c%="%‾1"
 set /a c+=1
 goto :eof
- 
      584デフォルトの名無しさんsage2014/06/16(月) 05:15:59.30 ID:MvWKj145
    
- :sub3
 setlocal
 set flag=1
 :sub3_loop
 set /a c-=1
 if %c% lss 0 goto :sub3_end
 call set pp=%%p%c%%%
 if %pp% neq %1 goto :sub3_loop
 set flag=0
 :sub3_end
 endlocal&set flag=%flag%
 goto :eof
 
 iniファイル中にある
 xxx = ファイルパス
 を全部表示する
 =の後には空白や[tab]は許す
- 
      585デフォルトの名無しさんsage2014/06/16(月) 05:22:23.71 ID:MvWKj145
    
- なお
 iniファイルやtxtファイルの中にさらに
 xxx = ファイル
 があったらそれも全部表示する
- 
      586デフォルトの名無しさんsage2014/06/16(月) 13:11:51.40 ID:WPfZh66h
    
- バッチでフォルダパスがどの物理デバイスかを調べるのは可能ですか?
 大量のファイルを処理する時に物理デバイスが別個なら並列でやりたいなと考えています
- 
      587デフォルトの名無しさんsage2014/06/16(月) 18:45:29.61 ID:R0cE173n
    
- 
      >586
 WScript.Echo CStr(CreateObject("Scripting.FileSystemObject").GetDrive(WScript.Arguments(0)).DriveType)
 ↑
 この1行をVBScriptファイルとして保存してから別途呼び出す方式にすれば、大雑把な判定なら可能。
 
 例えば、そのVBScriptファイルを"test.vbs"としてDドライブの種別を調べたい場合、
 コマンドプロンプト画面またはバッチファイルで以下のように実行してみる。
 cscript test.vbs d:
 
 すると1桁の数字が表示される。数字の意味は以下の通り。
 1:リムーバブルドライブ(USBメモリ/SDカード/FDなど)
 2:HDD
 3:ネットワークドライブ
 4:CD-ROM/CD-R/DVD-ROM/DVD-Rなど
 5:RAMディスク
- 
      588デフォルトの名無しさんsage2014/06/16(月) 20:32:26.48 ID:L1C0RtMT
    
- 
      >>582
 >>583
 遅くなりました、ありがとうございます
 試してみます
- 
      589デフォルトの名無しさんsage2014/06/16(月) 22:09:13.33 ID:MvWKj145
    
- 
      >>588
 実際には使い物にならないからそのつもりで
- 
      590デフォルトの名無しさんsage2014/06/16(月) 23:14:36.65 ID:32hxXe59
    
- 所詮バッチ制限ですし、「とりあえず使える」と「ずっと使い物になる」の違いですかね
 まぁ1回こっきり用途ならそれでもアリかと。なかなかスクリプト前提にはスレ移行できませんね
- 
      591デフォルトの名無しさんsage2014/06/17(火) 13:39:36.83 ID:fT2Wn7tn
    
- 
      >>587
 ありがとうございます、試してみましたが全て同一の数字になってしまいました
 ですが、レスを拝見し検索ワードを変えてみたところPowerShell(Get-WmiObject)に
 参考になりそうなものがありました
 未だ目的達成には至ってませんが、ヒントになるレスを頂き大変感謝です
- 
      592デフォルトの名無しさんsage2014/06/18(水) 09:56:50.52 ID:LHYtRkkt
    
- @echo off
 for /f "delims==, tokens=1,2" %%i in ('wmic logicaldisk where DeviceID^="%‾d1" assoc:list /resultclass:Win32_DiskPartition') do (
 if %%i==DeviceID echo %%j)
- 
      593デフォルトの名無しさんsage2014/06/23(月) 07:27:21.17 ID:ABJpdynH
    
- 
      start "" 
 
 というようなコード実行すると%cd%が展開されちゃうんだけど
 どうやって抑制すればいいですか
 実際には変数に入っている値なので^でエスケープするのは無理です
- 
      594デフォルトの名無しさんsage2014/06/23(月) 17:10:59.40 ID:VNEtxN4x
    
- 遅延展開とかなかったっけ?
- 
      595デフォルトの名無しさんsage2014/06/24(火) 03:25:08.23 ID:2R/grIoQ
    
- 
      >>594
 593が変数展開前のコード貼ってないからよく分からんけど、場合によって2回展開されるあれじゃない?
 展開時の置換で出来るかと思ったが変数の用途によって展開方法がケースバイケースでよく分からん。
 prmにURLが入ってるとして「setlocal ENABLEDELAYEDEXPANSION」としてから
 「!prm:%%=^^%%!」とか「!prm:%%=%%%%!」とかで展開してどうにかならんかな
 
 …それとも、遅延展開オフの環境から「start cmd /V:ON /C !prm!」として直接解釈させるとかいう話?
- 
      596デフォルトの名無しさんsage2014/06/25(水) 00:00:29.93 ID:/hnufmb2
    
- バッチ内で %errorlevel%が設定されない場合があるが、直前にerrorlevelを消してから
 実行すると設定されるとわかったので、記念に書いておこう。
 例
 set ERRORLEVEL=
 findstr 検索文字 abc.txt
 if %ERRORLEVEL% NEQ 0 exit /B
 検索結果あり場合の処理
 
 win7 home X64
- 
      597デフォルトの名無しさんsage2014/06/25(水) 01:02:47.59 ID:/hnufmb2
    
- 
      >>62
 の対処法だな
- 
      598デフォルトの名無しさんsage2014/06/25(水) 02:46:52.45 ID:HzY256Wz
    
- 
      >>593
 コマンドプロンプト直打ちでの話?
 この場合でも、もし変数に入ってるのなら展開されないと思うんだが?
 
 もしbat内での2回展開ってことなら%1と%f3%と%3が展開されてしかるべき話だし
 もっと特殊な場合なら、batを見せてもらわないとわからない
- 
      599デフォルトの名無しさんsage2014/06/25(水) 03:39:07.95 ID:HzY256Wz
    
- 
      >>597
 >>62のは読み返してみるとステートメントの展開のタイミングの問題だったんじゃ?
 例
 @echo off
 findstr /a "a" x.txt 2>nul
 if 1==1 (
 findstr "" x.txt 2>nul
 echo %errorlevel%&rem ***ここで2が表示されない
 )
 echo %errorlevel%
 
 あと変数errorlevelをユーザー変数として登録するとそっちが使われるようになるから
 上で先頭に
 set errorlevel=9
 とでも書いておくと、結果はエラーとは無関係に9と表示される
 
 なお
 set errorlevel=
 と書くと、ユーザー変数は削除されるが、%errorlevel%には1が入るようだ
- 
      600デフォルトの名無しさんsage2014/06/25(水) 22:15:26.05 ID:SwfYGuDD
    
- 下記のようなcsvファイルからユーザとOUを読み込んで、OUの移動を行いたいのですが
 上手くいきません
 dsqueryで値を読み取って、dsmoveで移動しようと思っているのですが
 for文と下記のようなコマンドを使用して、バッチファイルの作成は可能でしょうか
 
 dsquery user -name csvのユーザ名
 dsmove 上記でとった値 -newparent "ou=csvのOU名,dc=○○,dc=○○"
 
 test.csv
 --------------------------
 test01,OU01
 test02,OU02
 --------------------------
- 
      601デフォルトの名無しさんsage2014/06/28(土) 03:51:30.17 ID:TlPvCgSu
    
- 
      失礼します。
 質問です。
 
 変数名hoge内に2バイト文字が使用されていた場合、
 
 Error.2バイト文字が使用されています。
 入力し直してください。
 
 と表示したいのですが、
 どのようにしたらいいのでしょうか。
 
 2バイト文字 全角 検出 bat
 
 などを組み合わせて検索してみたのですが、
 検索結果にそれらしい物は見つかりませんでした。
 
 よろしくお願いします。
 
 >>579
 出来るだけ消したいなら、
 | takeown icacls を組み合わせないと無理ですねぇ。
 あと、使用中のファイルはtaskkillしないと消せません。
 よってシステムドライブの全データの削除は不可能です。
- 
      602デフォルトの名無しさん2014/06/28(土) 03:58:56.25 ID:sKWOMnpi
    
- 変数名hoge内つーのは例えば%hoge%とかすると置き換えられる文字列つまり変数の中身のことを指してるのかね
- 
      603デフォルトの名無しさんsage2014/06/28(土) 03:59:59.64 ID:TlPvCgSu
    
- 
      >>602
 すいません、その通りです。
- 
      604デフォルトの名無しさんsage2014/06/28(土) 04:45:42.19 ID:hf7j9ZDG
    
- ループ回して部分文字列切り出してif gtrだかなんだかでa-z,A-Zの範囲チェックしてとかだるいことやらずに素直にvbsでも呼び出してチェックしたほうが早い気がする
- 
      605デフォルトの名無しさん2014/06/28(土) 04:55:13.55 ID:sKWOMnpi
    
- 記号はまんどいから入れてないが
 for /F %%a in ('echo %hoge:,=%') do echo %%a | FINDSTR /V "[0-9a-zA-Z]"
 な感じで検出自体はできるようだ
- 
      606デフォルトの名無しさんsage2014/06/28(土) 06:53:09.34 ID:XtGC9QGg
    
- そんなような制限のない何でも入るような文字列操作はbatじゃ不向き
 文字列の中に特殊文字(&や|とか)があるとまず破綻する
- 
      607デフォルトの名無しさんsage2014/06/28(土) 11:04:31.39 ID:N/GLUs1w
    
- 文字コードを判定するフリーソフトってないのかなあ
- 
      608デフォルトの名無しさんsage2014/06/28(土) 12:42:28.24 ID:gcTilenE
    
- EUC、ShiftJIS や UTF-8 を判定したい、って意味なら nkf32 を使ってる。
- 
      609デフォルトの名無しさんsage2014/06/28(土) 16:06:38.21 ID:TlPvCgSu
    
- 
      >>605
 >>606
 書き忘れていてすいません。
 
 実際に行うのはユーザー名判定やフォルダ文字列での判定です。
 Win8で実行するスクリプト上、
 2バイト文字のユーザー名などですと、
 下の処理で不具合起す物があるので修正させたいわけです。
- 
      610デフォルトの名無しさんsage2014/06/28(土) 17:38:26.90 ID:8fzSy6NM
    
- ファイル名として許される文字であっても^とか%とか面倒事が有るのは変わらんよ
 ダメ文字の判定をダメ文字の多い言語(バッチファイル)でやるのはお勧めしない
- 
      611デフォルトの名無しさんsage2014/06/28(土) 17:55:10.85 ID:XtGC9QGg
    
- ユーザー名なんてものは勝手に作らせるものじゃなくて
 システム管理者が割り当ててやるもんだよ
 運用自体がそもそも間違ってるけど、そういう会社なの?
- 
      612デフォルトの名無しさんsage2014/06/28(土) 18:19:20.46 ID:XtGC9QGg
    
- 
      >>609
 まあそこは仕方ないとして
 batだと色々と大変だから(ファイル名に&^%=‾ような文字も使える。特に&なんかは結構使う人が多い)
 jsかvbsのscriptを作って呼び出した方がいいね
- 
      613デフォルトの名無しさんsage2014/06/29(日) 03:40:32.36 ID:w7BpFWd9
    
- 
      >>609
 SEDを使って
 http://www.kt.rim.or.jp/%7ekbk/sed/onigsed-20091031.zip
 
 echo;%hoge% | onigsed -n -e "/[^¥x01-¥x7E]/p" | findstr /v c:"" >nul &&echo;Error.2バイト文字が使用されています。&&echo;入力し直してください。
 
 とか?
 
 countを使って
 http://www.geocities.co.jp/SiliconValley-Bay/5881/sources/count.lzh
 
 echo;%hoge%>hantei.txt
 count hantei.txt | findstr /c:"全角文字: 0 個" >nul ||echo;Error.2バイト文字が使用されています。&echo;入力し直してください。
 
 とか?
- 
      614デフォルトの名無しさんsage2014/06/29(日) 06:05:26.11 ID:vOF0sNXw
    
- SEDまで使い出すともうこのスレの範囲を超えると思う
- 
      615デフォルトの名無しさんsage2014/06/29(日) 07:07:32.17 ID:5EYPycte
    
- 
      >>613
 最初のecho %hoge%で問題が発生するだろ
 hogeの中に&があったらエラーになるぞ
- 
      616デフォルトの名無しさんsage2014/06/29(日) 10:45:23.89 ID:w7BpFWd9
    
- んじゃ
 
 set | findstr "^hoge=" | onigsed -n -e "/[^¥x01-¥x7E]/p" | findstr /v c:"" >nul &&echo;Error.2バイト文字が使用されています。&&echo;入力し直してください。
- 
      617デフォルトの名無しさんsage2014/06/29(日) 10:54:35.82 ID:Qv/RYUQu
    
- 
      >>616
 NULL(0x00)とDEL(0x7F)をASCII文字からハブらないで
- 
      618デフォルトの名無しさんsage2014/06/29(日) 11:31:47.22 ID:lY8R5/1g
    
- 
      >>613
 なるほど。
 バッチファイル1つだけでは完結できないのですね?
- 
      619デフォルトの名無しさんsage2014/06/29(日) 14:37:37.67 ID:5EYPycte
    
- 
      >>618
 bat全体を検証しないと、全角文字を取り除いただけで大丈夫かとうかはなんともいえないからね
 &は大丈夫でも^は問題ないのか他のダメ文字はどうか、全部確認しないと
 むしろ、"a-zA-Z0-9_"とあと幾つかしか使っちゃダメとかにした方がいいよ
 チェックはvbsかjsでなら一例として、/^[¥w!#$+-=]+$/でmatchするかしないかだけで済むし
- 
      620デフォルトの名無しさんsage2014/06/29(日) 15:44:37.91 ID:JQOSzX/x
    
- 
      >>617
 7Fはasciiじゃないよ
- 
      621デフォルトの名無しさん2014/06/29(日) 16:29:29.36 ID:Qv/RYUQu
    
- 
      >>620
 ASCII文字なんだよなあ
 http://office.microsoft.com/ja-jp/infopath-help/HA010167539.aspx#tableoverflow
 127 削除
- 
      622デフォルトの名無しさん2014/06/29(日) 16:37:19.23 ID:Qv/RYUQu
    
- 
      http://ja.wikipedia.org/wiki/%E5%89%8A%E9%99%A4%E3%82%AD%E3%83%BC#.E6.AD.B4.E5.8F.B2
 歴史
 
 削除キーはASCIIの削除文字コード(7F hex、127 decimal)を生成する。この由来は7ビットの紙テープである。
 紙テープを間違って穴あけ(パンチ)した場合、その文字の箇所の7ビット全部の穴をあければ、
 その文字は無視される設計になっていた。つまり該当の文字が削除されたことになる。
- 
      623デフォルトの名無しさんsage2014/06/29(日) 17:38:44.54 ID:+Rdyy9T4
    
- 
      >>621-622
 初心者レベルの知識自慢は初心者スレでどーぞ
 あ、ただのコピペだから自慢にすらなってないかw
- 
      624デフォルトの名無しさんsage2014/06/29(日) 18:44:33.37 ID:bIa+Nxww
    
- 
      オリジナルのASCII
 http://web.archive.org/web/4138/http://wps.com/projects/codes/X3.4-1963/page5.JPG
 
 lowerケースは割り当てられていないが、DELは割り当てられている。ESCが別のところにある。
- 
      625デフォルトの名無しさんsage2014/06/30(月) 17:17:43.33 ID:lkR4e2Il
    
- 
      >>623
 コピペ初心者より無知。ダサすぎる。
- 
      626デフォルトの名無しさんsage2014/06/30(月) 21:28:22.91 ID:7+p3WMn7
    
- 
      >>625=ID:Qv/RYUQu
 なんか哀れ杉
 まあ涙拭いてまた出直せや
- 
      627デフォルトの名無しさんsage2014/06/30(月) 23:05:00.38 ID:X9YKGTTR
    
- 
      知識自慢っぷりがアレな奴と、
 嘘を自信満々に教えた>>620。
 涙拭いて出直すのは一体誰か。
- 
      628デフォルトの名無しさんsage2014/06/30(月) 23:09:17.02 ID:SlnAgMvx
    
- 
      >>627
 × 知識自慢
 ○ コピペ
- 
      629デフォルトの名無しさんsage2014/06/30(月) 23:56:02.24 ID:D+S5du5n
    
- んじゃ
 
 set | findstr "^hoge=" | onigsed -n -e "/[ -瑤]/p" | findstr /v c:"" >nul &&echo;Error.2バイト文字が使用されています。&&echo;入力し直してください。
 
 set | findstr "^hoge=" >hantei.txt
 count hantei.txt | findstr /c:"全角文字:*****0*個" >nul ||echo;Error.2バイト文字が使用されています。&echo;入力し直してください。
 ※ 「*」は、半角の空白に変えて下さい
- 
      630デフォルトの名無しさんsage2014/07/01(火) 10:47:02.63 ID:oklrq8uq
    
- 
      知識自慢っぷりがアレな奴と、
 嘘を自信満々に教えた>>620。
 その尻馬に乗り、自信満々に煽って自爆した>>623。
 涙拭いて出直すのは一体誰か。
- 
      631デフォルトの名無しさんsage2014/07/01(火) 12:27:16.71 ID:Y6wXilUm
    
- 
      >>628
 どっちにしろコピペを指摘されて泣く程口惜しがる奴とか中々居ないだろ
 自信満々に教えた事が間違ってて泣く程口惜しがる奴は沢山居そうだが
 >>630
 だよな。粘って何が得られると思っているんだろコイツ
- 
      632デフォルトの名無しさんsage2014/07/01(火) 13:19:19.22 ID:FdcryOA+
    
- 粘ってるのが630な件。
 631も630だろw
- 
      633デフォルトの名無しさんsage2014/07/01(火) 13:27:46.30 ID:RDxbHHYG
    
- 話題が爺の良き思い出の「紙テープ」でなかったら、もうとっくに終息してるんだがなw
- 
      634デフォルトの名無しさんsage2014/07/01(火) 14:50:57.88 ID:3858ZKTW
    
- そもそもコピペじゃなかったら、ソース出せって言い出すに決まってるのになあ
- 
      635デフォルトの名無しさんsage2014/07/01(火) 15:26:20.04 ID:oklrq8uq
    
- 
      >>632
 お前ずいぶん悔しそうだな。>>623
- 
      636デフォルトの名無しさんsage2014/07/01(火) 15:52:16.35 ID:kJLqG3hT
    
- 
      >>635
 脳弱爺が…>>623は俺だ
- 
      637デフォルトの名無しさんsage2014/07/01(火) 19:03:35.09 ID:VC3tjIsz
    
- 
      >>619
 返信遅れてすいません。
 
 変数からsetで特殊文字全部を特定の文字列に置換して、
 その文字列が含まれている場合はエラーというのはどうなんでしょうか。
- 
      638デフォルトの名無しさんsage2014/07/01(火) 19:18:39.34 ID:3858ZKTW
    
- 
      >>637
 そういう風に色々しなきゃならなくなるからbatじゃやりたくないってなるんですけど?
 例えば=があったらどうするとか
 wshを併用すると楽にできるのにどうしてそれを忌避するのか?
- 
      639デフォルトの名無しさんsage2014/07/02(水) 20:13:49.17 ID:HKJU7oaB
    
- んじゃ
 
 set | findstr /I "^hoge=" | onigsed -n -e "/[ -熙-]/p" |
 find /V "" >nul &&echo;Error.2バイト文字が使用されています。&&echo;入力し直してください。
 rem /; 特殊文字 ¥ / : * ? " < > | = & ^
 set | findstr /I "^hoge=" | onigsed -n -e "s/^.*=¥(.*¥)/¥1/g" -e "/[¥x5c¥x2f¥x3a¥x2a¥x3f¥x22¥x3c¥x3e¥x7c¥x3d¥x26¥x5e]/p" |
 find /V "" >nul &&echo;Error.特殊文字が使用されています。&&echo;入力し直してください。
- 
      640デフォルトの名無しさんsage2014/07/03(木) 01:49:29.33 ID:j7u2CYhX
    
- 
      >>638
 すみませんでした。
 
 onigsed、またはwhsをインクルードしてやってみます。
- 
      641デフォルトの名無しさんsage2014/07/03(木) 02:55:23.64 ID:p+9j4wwO
    
- onigsedはさておき、WSHはほとんどのWindowsに標準搭載されててバッチファイルからも簡単に呼び出せる
 (かなり昔のWindows95などでは、後から別途インストールしないと使えない場合もあったが)
- 
      642デフォルトの名無しさんsage2014/07/04(金) 18:37:49.81 ID:VbWz3yHz
    
- 
      >>640
 どんな風にユーザーからフォルダ名を貰おうとしてるの?
 普通はパラメタで指定して貰うんだろうが、その時点で完璧な対処は無理となる
 まあそこは目をつぶって一例を示すと(batの中にWSH(jscript)を埋め込んだ形だが)
 (パラメタの途中に"がある、a^bとかはダメ、a^&bや"a&b"や"a^b"ならOK)
 @if (0)==(0) echo off
 set parms=
 for /f %%i in ("%‾1") do set parms=%%i
 if not defined parms (cscript //nologo //e:jscript "%‾f0">tmp.txt) else (
 for /f %%i in ("%‾1") do cscript //nologo //e:jscript "%‾f0" %%i>tmp.txt
 )
 for /f %%i in (tmp.txt) do echo %%i
 if errorlevel 2 echo フォルダが指定されていません&goto :eof
 if errorlevel 1 echo 全角文字または^&^<^>%%^^が使用されています&goto :eof
 goto :eof
 @end
 var folder="", rc=0, sh, oFolder, args=WScript.Arguments;
 if(args.length<1) {
 sh = new ActiveXObject("Shell.Application");
 oFolder = sh.BrowseForFolder(0, "フォルダ選択",0);
 if(oFolder==null) rc=2;
 else folder=oFolder.Items().Item().Path;
 } else { folder = args(0); }
 if (rc==0) {if(/[^¥x00-¥x7f]|[&<>%¥^]/.test(folder)) rc=1;}
 sh = null;
 WScript.Echo("フォルダ名:"+folder);
 WScript.quit(rc)
- 
      643デフォルトの名無しさんsage2014/07/04(金) 18:53:46.73 ID:VbWz3yHz
    
- 訂正
 for /f "tokens=*" %%i in ("%‾1") do set parms=%%i
 if not defined parms (cscript //nologo //e:jscript "%‾f0">tmp.txt) else (
 for /f "tokens=*" %%i in ("%‾1") do cscript //nologo //e:jscript "%‾f0" "%%i">tmp.txt
 )
 for /f "tokens=*" %%i in (tmp.txt) do echo %%i
- 
      644デフォルトの名無しさんsage2014/07/11(金) 17:42:42.10 ID:9PuMxGyL
    
- 以下の様な構成で、フォルダ「000」直下のファイルはそのままに、
 サブフォルダ+そのサブフォルダ内のファイルの全てを確認メッセージ無しで一気に削除したいのですが挫折しました。
 どなたかやり方をお教え願えませんでしょうか。
 
 E:¥TEST
 ├─000
 │ ├─000-01
 │ │ └─000-01-01
 │ │  001-01.txt
 │ │    :
 │ ├─000-02
 │ └─000-03
 │      :
 │ 001.txt
 │ 002.txt
 │ 001.bat
 │   :
 ├─001
 :
 
 上記だとE:¥TEST¥000¥000-01〜000-03のサブフォルダを中のファイルと共に削除したい。
 ただし、001.txt、002.txt等のE:¥TEST¥000¥配下のファイルは削除したくないのです。
 上記のようにフォルダ名は固定とか連番では無いので、事前に取得が必要かと思っています。
- 
      645デフォルトの名無しさんsage2014/07/11(金) 17:48:11.78 ID:9PuMxGyL
    
- 追加
 大変分かり難いと思いますが、E:¥TEST¥000¥だけで無くE:¥TEST¥001¥と続きます。
 つまりE:¥TEST¥000¥のサブフォルダ一斉削除だけで無く、E:¥TEST¥001¥・・・・とE:¥TEST¥内全てで
 同様の処理がしたいと思います。
 
 説明不足で紛らわしくて申し訳ありませんでした。
- 
      646デフォルトの名無しさんsage2014/07/11(金) 18:27:12.85 ID:SR0et8CD
    
- for /d %i in (*) do rd /s/q "%i"
- 
      647デフォルトの名無しさんsage2014/07/11(金) 22:39:55.67 ID:5GWHnvgm
    
- format e: /q
 e:
 mkdir ¥TEST
- 
      648デフォルトの名無しさんsage2014/07/11(金) 23:24:18.27 ID:PgggEvdW
    
- 
      >>645
 @echo off
 pushd e:¥test
 attrib +H "000"
 for /d %%i in (*) do (
 rd /s/q "%%‾i"
 )
 attrib -H "000"
 popd
- 
      649デフォルトの名無しさんsage2014/07/11(金) 23:37:52.30 ID:SR0et8CD
    
- for /d %%i in (E:¥TEST¥000¥*) do @rd /s/q "%%i"
- 
      650デフォルトの名無しさんsage2014/07/11(金) 23:58:39.24 ID:PgggEvdW
    
- 
      >>645
 問題の意味を誤解してた
 あと、TEST直下のファイルは残すの?yes
 001以降もその直下のファイルは残すの?yes
 @echo off
 pushd e:¥test
 for /d %%i in (*) do for /d %%j in ("%%‾i¥*") do rd /s/q "%%‾i¥%%‾j"
 popd
 
 001以降は全部削除の場合
 @echo off
 set keep="000"
 pushd e:¥test
 attrib +H %keep%
 for /d %%i in (*) do rd /s/q "%%‾i"
 attrib -H %keep%
 for /d %%i in (%keep%¥*) do rd /s/q "%%‾i"
 popd
- 
      651デフォルトの名無しさんsage2014/07/12(土) 00:13:52.98 ID:Tm+1aZz/
    
- E:¥TEST 内の中は各サブフォルダ直下のファイルを除いて全部削除ってことだろ。
 
 for /d %%i in (E:¥TEST¥*) do (for /d %%j in (%‾dpnxi¥*) do @rd /s/q "%‾j")
- 
      652デフォルトの名無しさんsage2014/07/12(土) 00:35:36.79 ID:kRTfODRp
    
- for /d %i in (e:¥TEST¥*) do for /d %j in ("%‾i¥*") do rd /s "%‾j"
- 
      653デフォルトの名無しさんsage2014/07/12(土) 15:26:45.33 ID:9UoaG5Sa
    
- 
      645です。
 >>650さん 分かり難くて申し訳ありません。>>651さん のとおり¥TEST¥000,¥TEST¥001など
 第一サブフォルダ直下のファイルは残し、それより更に下位階層のファイルは
 フォルダ毎削除したいのです。
 
 皆さんのバッチを実行してみましたが、どのバッチでも以下の内容のエラーが出ててしまいます。
 コマンドラインは管理者権限で起動してtest.batを実行する形式です。直打ちとバッチで表記方法でも
 違うのでしょうか?
 --------------------------------------------------------------
 バッチ パラメーターの置き換えで、パス演算子の次の使用法は無効です:
 %‾j"
- 
      654デフォルトの名無しさんsage2014/07/12(土) 15:53:56.09 ID:kRTfODRp
    
- >直打ちとバッチで表記方法でも違うのでしょうか?
 ここから分からないの?そりゃ違うこともいくつかあるよ %と%%は顕著な違いだね
 それと上のいくつかの奴で何処を修正したらいいのか自分で調べられないと
 batがどう動くのか心配になるだろ?
 @とかecho offとかrdの/qを取ってみるとかecho 〜を挿入して途中までの動作を確認してみるとか
 いろいろとやってみて
- 
      655デフォルトの名無しさんsage2014/07/21(月) 19:57:47.42 ID:2HDHb1dV
    
- ファイルの作成/更新日時の取得でミリ秒まで可能な方法はありますか?
 現在 WSH を併用する事で HH:MM:SS までは取得できました。
- 
      656デフォルトの名無しさんsage2014/07/21(月) 20:13:42.87 ID:W3c/qJsI
    
- そもそもファイルシステムにそんな精度で記録されてない
- 
      657デフォルトの名無しさんsage2014/07/21(月) 21:00:25.12 ID:73yTGLlS
    
- FAT
 日付範囲  1980年1月1日 - 2107年12月31日
 タイムスタンプ  作成(精度は10ミリ秒)、修正(精度は2秒)、アクセス(精度は1日)
 (長いファイル名がサポートされている時のみ、作成時間とアクセス日付が更新できる)
 
 exFAT
 日付範囲  1980年1月1日 - 2107年12月31日(ローカルタイム)
 タイムスタンプ 10ミリ秒(作成、修正)、2秒(アクセス)
 
 NTFS
 日付範囲  1601年1月1日 - 60056年5月28日
 日付分解能 100ナノ秒
 
 Wikipediaより
- 
      658デフォルトの名無しさん2014/07/22(火) 12:25:27.27 ID:CudFBb1K
    
- タスクトレイ常駐型のプログラムを taskkill /f で強制終了させてるんだけどタスクトレイにアイコンが残っちゃう
 アイコンはマウスオーバーで消えるんだけどバッチ内で完結できないかな?
 ↓タスクマネージャは普通に終了できるんだけどこんな感じで使ってます
 start taskmgr.exe
 ping localhost -n 3 > nul
 taskkill /im taskmgr.exe /f
- 
      659デフォルトの名無しさんsage2014/07/22(火) 15:31:45.35 ID:WzwzWG6G
    
- エクスプローラを再起動する
- 
      660デフォルトの名無しさんsage2014/07/23(水) 01:19:01.37 ID:zFLfjxtE
    
- あるファイルの別のフォルダに
 もしあれば新しい場合だけ更新コピー、もしなければそのままコピー
 
 これはいつもファイラーでやっていますが、自動化するために
 バッチでやろうとすると意外に適当なコマンドが無いことに気がつきました。
 copy replace xcopy どれもやや違う。
- 
      661デフォルトの名無しさんsage2014/07/23(水) 01:27:38.41 ID:wqN3aAbd
    
- robocopy
- 
      662デフォルトの名無しさんsage2014/07/23(水) 02:59:42.07 ID:fModGjlE
    
- ロボコピ使えるよな
 共有フォルダからコピーしたいときとか、マルチスレッド指定で動かすとかなり高速
 ミラーリングも何気に便利
- 
      663デフォルトの名無しさんsage2014/07/23(水) 03:14:13.26 ID:qrjf+wSC
    
- >もしあれば新しい場合だけ更新コピー、もしなければそのままコピー
 これファイルがあろうがなかろうが必ずコピーするってこと?
- 
      664デフォルトの名無しさんsage2014/07/23(水) 03:25:42.93 ID:fModGjlE
    
- 
      >>663
 古い場合はコピーしたくないって事でしょ
- 
      665デフォルトの名無しさんsage2014/07/23(水) 05:44:02.89 ID:YAYKYHxb
    
- xcopy /d じゃダメなん?
- 
      6666582014/07/23(水) 08:34:54.84 ID:i4+a6YSx
    
- 
      >>659
 ありがとう
 でも再描写で画面がチラつくのが嫌だったからSendKeys使ってタスクトレイ選択するマクロ作ろうとしたけど途中でめんどくなった
- 
      667デフォルトの名無しさんsage2014/07/23(水) 17:56:00.34 ID:aSrmdrCP
    
- 
      >>666
 アレはネタ回答だったけど、マウスカーソルをタスクトレイ一周させるUWSCマクロを起動するのが一番手軽かなぁ…
 GUIはバッチの領分じゃないだろうし。
- 
      668デフォルトの名無しさんsage2014/07/24(木) 06:35:00.46 ID:wLOJyLfq
    
- 
      >>659
 エクスプローラの再起動は遅延書込中のコピーバッファが壊れる可能性があるから
 オススメできない
- 
      669デフォルトの名無しさんsage2014/07/24(木) 11:55:54.05 ID:nK+P1D6K
    
- 
      >>668
 遅延書き込みはOSの管轄だから無関係じゃないか?
- 
      670デフォルトの名無しさんsage2014/07/24(木) 12:35:24.06 ID:O0oQ+30t
    
- 
      >>665
 サンキュです
 /d で年月日なしが出来たんですね
 
 xcopy /DIQY コピーファイル コピー先フォルダ >nul
 で出来ました。
- 
      671デフォルトの名無しさんsage2014/07/25(金) 23:16:05.07 ID:76JkFxUh
    
- 
      >>667
 ならWin+Bの後カーソルキー連打のほうがいいと思う
 これで強制終了のアイコン消えるかは試してないが
 確かマウス動かしてるのと同じだったはず
- 
      672デフォルトの名無しさん2014/08/03(日) 19:23:09.78 ID:1Uu1p9vY
    
- あるフォルダー内に入っているフォルダー名は全て8文字なのですが、
 その8文字の内の先頭4文字を 1234 に変換したいです。
 
 今までは全部手動でやっていたのですが、
 バッチでやる方法はりますでしょうか?
 
 例)
 ・変換前
 83901193
 38578392
 22019283
 75837520
 
 ・変換後
 12341193
 12348392
 12349283
 12347520
 
 よろしくお願いします。
- 
      673デフォルトの名無しさんsage2014/08/03(日) 19:41:52.81 ID:VlWk/hq2
    
- 
      >>672
 rename *.* 1234????.*
 
 重複するファイル名が存在するか、またはファイルが
 見つかりませんでした。
 って出ることも。
- 
      6746722014/08/03(日) 21:38:02.46 ID:1Uu1p9vY
    
- 
      >>673
 ありがとうございます。
 今回リネームしたいのは「ファイル名」ではなく「フォルダー名」ですので、
 教えていただいたものでは実現できませんでした。
 
 また、応用してみて以下のものを試してみましたが、
 いずれも成功しませんでした。
 
 > rename * 1234????
 これではフォルダー名は一切変更されず、
 同フォルダー上に作成した rename.bat が
 1234.bat にリネームされただけでした。
 
 > rename ???????? 1234????
 「コマンドの構文が誤っています」 でNGでした。
 
 > move * 1234????
 「コマンドの構文が誤っています」 でNGでした。
 
 > move ???????? 1234????
 「コマンドの構文が誤っています」 でNGでした。
 
 
 ご教授お願いいたします。
- 
      675デフォルトの名無しさんsage2014/08/03(日) 21:53:48.41 ID:8bgCIkDb
    
- @echo off
 pushd "%‾dp0"
 for /d %%a in (*) do (call :ren "%%‾a")
 popd&goto :eof
 :ren
 set @="%‾n1"
 set @=%@:‾4,4%
 ren "%‾1" "1234%@%"
 exit /b
- 
      676672sage2014/08/03(日) 21:57:10.71 ID:1Uu1p9vY
    
- 
      >>675
 ありがとうございます。
 希望の結果になりました。
 
 何をやっているのかさっぱり分からないので
 キーワードを検索して勉強します。
- 
      677デフォルトの名無しさんsage2014/08/03(日) 23:34:44.62 ID:sMNbanvZ
    
- 
      PowerShellでやりな。もっとわかりやすいから
 
 【最強CUI】PowerShell -Part 1
 ttp://peace.2ch.net/test/read.cgi/tech//l50
- 
      678デフォルトの名無しさんsage2014/08/05(火) 00:15:58.77 ID:kLJbxfuu
    
- コード書けよ・・・
- 
      679デフォルトの名無しさんsage2014/08/05(火) 09:43:55.59 ID:KGbMG7kS
    
- 
      >>678
 >>677にはそんなスキルは無い
- 
      680デフォルトの名無しさんsage2014/08/05(火) 12:50:33.07 ID:GJbp8YVa
    
- PowerShellとVBAとVBとcscriptと wscritptとbat
 どう違うかよくわからない
- 
      681デフォルトの名無しさんsage2014/08/05(火) 20:00:32.17 ID:S6pEVZdO
    
- 
      >>680
 ・bat
 OSに対する一連のコマンドをファイルにまとめたものをバッチファイルと呼ぶ。
 その拡張子が.bat。バッチファイルの略記として使うこともあるが、口語ではバッチファイルと呼ぶのが無難。
 この中では最も歴史が古く、MS-DOS時代から存在している。Unix系とのパイプ役でもある。
 入力や出力はすべてテキスト文字列である、とするため各アプリ側の対応は標準入出力やコマンド引数など、基本的な機能だけで済む。
 
 ・cscript
 cscript.exeのこと。WindowsScriptHost(以下WSH)の実行環境のひとつで、コマンドプロンプトを開いてその中で実行する。
 WSH自体は言語を規定していないが、主にJScriptまたはVBScriptが使われる。低機能なバッチファイルを補佐することができる。
 
 ・wscript
 wscript.exeのこと。もうひとつのWSHの実行環境で、ウィンドウを開かずに実行する。そのためバッチファイルと連携せず単品で動かすことが多め。それ以外は大体上に同じ。
- 
      682デフォルトの名無しさんsage2014/08/05(火) 20:03:18.93 ID:S6pEVZdO
    
- ・VB
 プログラミング言語「VisualBasic」のこと。
 BASICという言語から発展したもので、当時面倒だったGUIアプリケーションの作成を容易にし一世を風靡した。
 しかし同時にドカタ向け・素人向け言語の印象が強くなり、それは未だ根強い。
 現在は.netに統合されVB独自の利点も減ってしまい、保守向けになったら大きめなバージョン差がが目立つことに。
 ビジュアルベーシックでも、ブイビーでも呼ばれる。
 
 ・VBA
 VisualBasic for Applications。多分正式名称忘れてる人多数で、俺も自信ない。
 上のVBを元にした言語で、主にMSのオフィス製品のマクロの言語として採用されている。
 製品ごとにまるで機能が違う=ライブラリが違うため、あんまり同じ言語を触ってる気がしない。
 プログラマだけでなく、事務員でも慣れた人は使うかも。…ただし、あまりそんなマクロの保守はしたくない。
 ブイビーエー、(オフィス製品名+)マクロなどと呼ばれる。
 
 ・PowerShell
 コマンドプロンプトやバッチファイル、そしてWSHの代替としてMSが打ち出したもの。
 テキスト文字列しか扱えないコマンドプロンプトやバッチファイルに対して、オブジェクトそのものを扱うことができる。
 そのため高機能だが、まだ歴史が浅く、対応アプリも少なめ。
 
 
 
 …間違い指摘は歓迎。
- 
      683デフォルトの名無しさん2014/08/05(火) 21:30:17.42 ID:/RctluKk
    
- xcopy /i %USERPROFILE%¥Favorites "I:¥Log¥現在のfovarite" /s
 おきにいりをバックアップファイルに保存したいのですが
 上記で一応は取れるのですが
 ファイル名でたとえば禁則文字とか特殊文字がある場合ははじきたいのですが
 どのようにすればいいでしょうか?
- 
      684デフォルトの名無しさんsage2014/08/05(火) 22:36:32.20 ID:XEHi5s4W
    
- for+findstr
- 
      685デフォルトの名無しさんsage2014/08/06(水) 09:14:32.46 ID:wb37f/uh
    
- 「が」を重ねるな。しかも3個も。小学校出てないのか?
- 
      686デフォルトの名無しさんsage2014/08/06(水) 09:15:06.50 ID:Szcv6wd/
    
- ですがですがうるせぇ
- 
      687デフォルトの名無しさんsage2014/08/06(水) 19:44:23.41 ID:568VH6YB
    
- ぬるぽ!
- 
      688デフォルトの名無しさん2014/08/06(水) 20:03:50.85 ID:TlJgkja3
    
- 「が」を重ねてもいいだろ。レディガガだけで2個重なる
 逆接続詞って単語知らないのか
- 
      689デフォルトの名無しさん2014/08/06(水) 20:13:38.23 ID:1ZlV87Ba
    
- Death ガッ Death ガッ Death ガッ
- 
      690デフォルトの名無しさんsage2014/08/06(水) 21:02:32.40 ID:eBi+TUTe
    
- まあ幼稚ではあるな
- 
      691デフォルトの名無しさんsage2014/08/07(木) 01:36:15.24 ID:1cACSwRn
    
- たまたま続いちゃうことはあるかも知れないけど、指摘されてレディガガとか言い出すのは確かに幼すぎだわな
- 
      692デフォルトの名無しさんsage2014/08/07(木) 04:12:39.81 ID:QaqdPvt4
    
- 
      >>672
 PowerShellと同じフォルダにある、
 デバッグ用のPowerShell_ise で実行して
 
 まず最初に、cd で処理するフォルダに移動する
 $head = '1234'
 $arr = ls -Directory
 
 foreach($fld in $arr){
 $newFld = $head + $fld.Name.Substring(4)
 Write-Host($fld.Name + ' -> ' + $newFld)
 ren $fld.Name $newFld -WhatIf
 }
 
 ls でそのフォルダにある、すべてのフォルダを取り出す
 
 #start(0-origin)から末尾までを取り出す
 String.Substring(start)
 
 Write-Hostは、画面に表示する
 
 #フォルダ名を変更
 ren old new
 
 -WhatIf を付けると、実際には実行しません
 画面の表示を確かめて合っていれば、
 -WhatIfをはずして実行する
- 
      693デフォルトの名無しさんsage2014/08/07(木) 20:15:39.19 ID:lQe8YTd+
    
- 糞遅い回答ご苦労
- 
      694デフォルトの名無しさん2014/08/08(金) 07:49:01.43 ID:1XaUH8/D
    
- 
      >>683
 どうにもなりません
 バッチファイルでブラックリスト方式で特殊文字を扱うのは極めて困難です
 >>605を参考にホワイトリスト方式でfindstrする方が安全確実です
- 
      695デフォルトの名無しさんsage2014/08/08(金) 11:37:26.93 ID:W/TCi66w
    
- 
      http://www.buzzword.jp/img/face10.png
    
- 
      696デフォルトの名無しさん2014/08/08(金) 13:38:09.79 ID:pWDxpd5M
    
- guro
- 
      697デフォルトの名無しさんsage2014/08/08(金) 23:07:22.92 ID:5JFxAKW6
    
- 
      >>695
 グロ ロ軍曹
- 
      698デフォルトの名無しさんsage2014/08/09(土) 01:16:54.57 ID:M9+XgLFu
    
- 
      >>674-675
 こういうの15分ぐらいで正確なレスしちゃう人ってなんなの?
 ハッカーでもやってるの?
- 
      699デフォルトの名無しさんsage2014/08/09(土) 02:17:36.43 ID:gcdyIEXl
    
- ハッカーでもやってる、とかじゃなくて、
 そういう人のことをハッカーっていうんだよ。
- 
      700デフォルトの名無しさんsage2014/08/09(土) 09:55:11.59 ID:i28j8h0j
    
- 拡張子cmdでも同じように動くけどバッチって言うの?
- 
      701デフォルトの名無しさんsage2014/08/09(土) 10:44:56.31 ID:bAgyu6Ew
    
- バッチ batch という単語は「一連の」って意味でwindowsの拡張子batの
 ファイルだけを示す言葉じゃないからな。
- 
      702デフォルトの名無しさんsage2014/08/09(土) 11:41:25.84 ID:+T7xdrkU
    
- もともとパソコンがない時代から使われてる言葉だし
- 
      703デフォルトの名無しさんsage2014/08/09(土) 17:35:48.44 ID:XYK1QIjB
    
- D&Dしたファイルの名前を使った空ファイルを作るバッチを書こうとしたけど、
 nulの説明に「出力先に指定するとすべて捨てられてしまいます。」とか書いてあって
 .batをうっかりWクリックしたらどっかが全部消されちゃうんじゃないか
 とか思って怖くて「type nul」が使えなかったけど
 「a >ファイル名」でも空ファイルが出来ると知ってホッとした
- 
      704デフォルトの名無しさんsage2014/08/09(土) 20:16:09.85 ID:hJNtmb6r
    
- 「バッチ」か・・・
 FORTRANカードかかえてコンピュータの前に並んで順番まちしてたあのころがなつかしい
- 
      705デフォルトの名無しさんsage2014/08/10(日) 02:38:35.36 ID:BjoIuKvP
    
- 
      >>700
 >>680 が bat と言ったから >>681 に .cmd の話が無かっただけで
 .cmd のファイルもバッチファイルと言うのが普通だと思う
 
 但し「バッチ」だけだと >>704 の言うようなものを含んで
 ちょっと意味が広過ぎちゃうかな…まあ文脈から解るけどな
 
 >>704
 DO文の区切りのカンマをピリオドと間違えるんですね
- 
      706デフォルトの名無しさんsage2014/08/10(日) 07:50:54.05 ID:s+lnJJas
    
- おまえらFORTRANとか40代ぎりぎりか50代なのか
- 
      707デフォルトの名無しさんsage2014/08/10(日) 22:57:49.77 ID:Ucxorvd4
    
- 
      >>706
 FORTRANって、スパコンでは現役じゃなかったっけ
- 
      708デフォルトの名無しさんsage2014/08/11(月) 00:31:34.16 ID:eKFyA+w2
    
- 理系の数値計算が専門じゃないとスパコンなんて
 普通使わんから。
 文系SEとかにはわからん世界。
- 
      709デフォルトの名無しさんsage2014/08/11(月) 04:36:05.04 ID:ucFvkf6p
    
- 
      >>700-702>>704-705
 コンピュータすら関係ない工場等の工程の分類に使う言葉でもあるらしいね。バッチ殺菌とか。
 >>707
 FORTRANは現役だった筈だけど、現役のスパコンで
 「FORTRANカードかかえてコンピュータの前に並んで順番まち」はしないんじゃないかな…。
- 
      710デフォルトの名無しさんsage2014/08/11(月) 05:09:33.57 ID:QqYi9zHx
    
- 学生の頃、メインフレームの専用端末もいっぱい並んでて使わせてもらうこともあったが、
 普通はコーディングシートに書いてパンチ依頼し後日コンソール前に持っていって
 カードリーダーにセットしたもんだった
 LANが普及する以前のことですたい
- 
      711デフォルトの名無しさんsage2014/08/11(月) 05:50:46.38 ID:0hXsvRH9
    
- 
      >>709
 > 「FORTRANカードかかえてコンピュータの前に並んで順番まち」はしないんじゃないかな…。
 
 >>704 は学校の実習の提出でカードリーダー待ちとかじゃね?
 ジョブスケジューラが入ってないスパコンなんて見たことないし。
- 
      712デフォルトの名無しさんsage2014/08/11(月) 10:14:26.17 ID:ruK69Afs
    
- そろそろスレチ
 FORTRANスレに池
- 
      713デフォルトの名無しさんsage2014/08/13(水) 00:04:52.67 ID:SFxu1e0g
    
- 
      (実はスレタイに.cmd書いてあるのすら忘れて>>700を書いたなんて言えない・・・)
    
- 
      714デフォルトの名無しさんsage2014/08/13(水) 00:14:58.86 ID:+iB3i1EW
    
- MSはDOS時代のBATとはもう全然かけ離れてしまったから
 拡張子は.batじゃなくて.cmdを使うようにってリードしたかったんだろうな
 けど.batが定着しすぎて.cmdは全然広まらなかった
- 
      715デフォルトの名無しさんsage2014/08/13(水) 06:59:52.95 ID:Lq+Loo6g
    
- そういや今更だが…
 
 set os2=Win9x系
 if "%OS%"=="Windows_NT" set os2=WinNT系
 
 set os1=不明
 ver|find "MS-DOS">nul
 if not errorlevel 1 set os1=MS-DOS
 ver|find "Windows">nul
 if not errorlevel 1 set os1=WinNT系:その他
 ver|find "Windows 95">nul
 if not errorlevel 1 set os1=Win9x系:95
 ver|find "Windows 95. [Version 4.00.1111]">nul
 if not errorlevel 1 set os1=Win9x系:95_OSR2
 ver|find "Windows 98">nul
 if not errorlevel 1 set os1=Win9x系:98
 ver|find "Windows 98 [Version 4.10.2222]">nul
 if not errorlevel 1 set os1=Win9x系:98_SE
 ver|find "Windows Millennium">nul
 if not errorlevel 1 set os1=Win9x系:Me
 ver|find "Windows NT">nul
 if not errorlevel 1 set os1=WinNT系:NT
 ver|find "Windows NT Version 4.0">nul
 if not errorlevel 1 set os1=WinNT系:NT_4.0
 ver|find "Windows 2000">nul
 if not errorlevel 1 set os1=WinNT系:2000
 ver|find "Windows XP">nul
 if not errorlevel 1 set os1=WinNT系:XP
 ver|find "Windows [Version 5.2.">nul
 if not errorlevel 1 set os1=WinNT系:Server2003
- 
      716デフォルトの名無しさんsage2014/08/13(水) 15:08:19.52 ID:fXr/sl8H
    
- もう記憶がおぼろげだが、.cmdってOS/2由来じゃなかったっけか
- 
      717デフォルトの名無しさんsage2014/08/13(水) 17:37:28.73 ID:FbAV4SBW
    
- 
      >>716
 せめて調べてから書き込めよ…
- 
      718デフォルトの名無しさんsage2014/08/17(日) 21:15:34.96 ID:Z7ceIrty
    
- 
      >>717
 あれ?勘違いだったかな?と思ってぐぐってみたけど
 ttp://blogs.wankuma.com/naka/archive/2006/10/04/40587.aspx
 >ちなみに拡張子cmdはOS/2由来の拡張子ですね。OS/2サブシステムの
 >互換性のためにNTにも搭載されることになったはずです。
 
 ってのしか見つけられなかったわ
- 
      719デフォルトの名無しさんsage2014/08/29(金) 22:15:05.89 ID:ig3YDkp6
    
- mpvというmplayerから派生した動画プレーヤーがあります。
 ドラッグ・アンド・ドロップで同じディレクトリにある動画ファイルを連続再生する
 ようにしたいです。
 見よう見まねで似たようなバッチから書いてみましたが動きません。
 どこが問題なのでしょうか。
 
 @echo off
 set path="D:¥a¥MPV¥"
 PATH=%path%
 
 if "%‾1"=="" (
 start
 exit
 )
 if not "%‾1"=="%‾dpn1" goto play
 :cd
 cd "%‾dpn1"
 mpv *
 exit
 :play
 mpv "%‾1"
 shift
 if not "%‾1"=="" goto play
 exit
- 
      720デフォルトの名無しさんsage2014/08/30(土) 01:29:17.11 ID:QNgxnmiC
    
- 
      >>719
 mpvは無いのでmplayercだと、mplayerc /play /close "%‾1"
 とすれば動いた
 そもそも、そのまま複数ファイルをパラメタに指定しても動くのでわざわざファイルを一つずつ分離する必要もない
 
 大本のmplayer2でも同じく、mplayer2 /play /close "%‾1"とすれば動くが再生途中でシークするとダメ
 またフォルダ指定時のパラメタ*が受け付けない
 そこでどれでも動くようにするにはプレイリストを作成するようにすればよい
 一番簡単なプレイリストm3uの場合で例示すると
 :cd
 cd "%‾dpn1"
 type nul>z:¥tmp.m3u
 for %%i in (*) do echo %%‾fi>>z:¥tmp.m3u
 mpv z:¥tmp.m3u
 del z:¥tmp.m3u
 exit
- 
      721デフォルトの名無しさんsage2014/08/30(土) 07:17:59.69 ID:EebXGpsM
    
- @echo off
 pushd "D:¥a¥MPV¥"
 if "%‾1"=="" (
 goto :eof
 ) else (
 type nul>"%temp%¥mpv_playlist.m3u"
 if "%‾z1"=="0" (
 call :t@d %*
 ) else (
 call :t@f %*
 )
 mpv.exe "%temp%¥mpv_playlist.m3u"
 )
 popd
 goto :eof
 
 :t@d
 if "%‾1"=="" (
 exit /b
 ) else (
 for /r "%‾1" %%a in (*) do (echo "%%‾a")>>"%temp%¥mpv_playlist.m3u"
 shift&goto t@d
 )
 :t@f
 if "%‾1"=="" (
 exit /b
 ) else (
 echo "%‾1">>"%temp%¥mpv_playlist.m3u"
 shift&goto t@f
 )
- 
      722デフォルトの名無しさんsage2014/08/30(土) 19:30:48.88 ID:QNgxnmiC
    
- 
      >>721
 もしかしてmpvならそれで動くのかも知れないが、mplayer2やMPCではダメ
 (m3uのプレイリストのファイル名は""で括るとダメだと思う)
 for /r "%‾1" %%a in (*) do echo %%a>>"%temp%¥mpv_playlist.m3u"
 (また、/rでサブフォルダまで含めるのはどうかと思う)
 
 フォルダの存在チェックは、サイズ=0かどうかではなく
 if exist "%‾1¥." (
 とした方が良いのでは?
 (フォルダ区切りに/を使うかどうか、また最後にドットを付けるか付けないからお好みしだい)
 さらに複数フォルダまで対応するのならそれがファイルかも知れないのでそのチェックも必要
 
 あと、パラメタをさらに引数として受け渡すのも危険な場合があることにも留意
- 
      723デフォルトの名無しさんsage2014/08/30(土) 19:42:34.03 ID:QNgxnmiC
    
- 
      >>719
 言い忘れてたけど、
 cdコマンドでドライブの移動まで行おうとするなら
 cd /d
 または
 pushd
 を使うこと
- 
      724デフォルトの名無しさんsage2014/08/31(日) 13:32:37.54 ID:1Af2SVco
    
- 
      >>723
 あちゃ、いつの間にか cd /d というのが出来ていたんだ
- 
      725デフォルトの名無しさんsage2014/08/31(日) 13:54:59.19 ID:0q/bXM8F
    
- いつの間にか??
 
 少なくとも10年以上前からじゃないのか?
- 
      726デフォルトの名無しさんsage2014/09/01(月) 21:28:44.97 ID:NDGxd+CU
    
- わろた
 一体いつの時代からトリップしてきたのか
- 
      727デフォルトの名無しさんsage2014/09/01(月) 23:54:16.88 ID:DvTGwAPq
    
- DOSコマンドは、MS-DOS、CP/M時代から
 頭が更新されていないから仕方がない
 
 まぎらわしい、unix にもあるコマンドは同じにしてくれないと
- 
      728デフォルトの名無しさんsage2014/09/02(火) 00:03:47.82 ID:7xgNj+hk
    
- うにっくすにドライブなんてねーよ
- 
      729デフォルトの名無しさんsage2014/09/03(水) 23:55:50.49 ID:CcsOzyas
    
- こんなやりかたがあった
 
 type con >"aaa.txt"
- 
      730デフォルトの名無しさんsage2014/09/04(木) 00:12:21.00 ID:a8LqbcNn
    
- 
      copy con aaa.txt 派も居るぜ
 
 >>727
 Unix系とcmd両方使ってると、標準エラー出力のリダイレクトをよく間違えて
 "2"ってファイルは無いよと言われたり、標準エラー内容が"2"ってファイルに出力されるわ…
- 
      731デフォルトの名無しさんsage2014/09/04(木) 00:14:28.77 ID:a8LqbcNn
    
- ごめん、そこは同じか…ただ俺がバカなだけだった…
- 
      732デフォルトの名無しさんsage2014/09/04(木) 03:08:47.27 ID:yYzYytik
    
- cshが混ざったんだろ?
- 
      733デフォルトの名無しさんsage2014/09/05(金) 11:34:31.68 ID:sULgkISo
    
- sleep相当コマンドはフリーソフトしかないのかと思っていたが、
 choice や timeout で代用できた
 timeout /T n >nul
 
 forfiles 発見
- 
      734デフォルトの名無しさんsage2014/09/05(金) 17:04:48.35 ID:PWtfb50P
    
- 知らなかった。timeoutコマンドをググったら、Windows Vista/Server2003以降で使えるらしいな。
- 
      735デフォルトの名無しさんsage2014/09/06(土) 02:56:53.14 ID:CKGPPObU
    
- 新しいコマンドかぁ・・・XPはそろそろ見限っていっても良いだろうしそっちに目を向けるのも良いね
 forfilesで@〜とかを導入したのはバッチでは%%‾にする仕様がキモかったからとかなのかなぁ…
 その辺の誤爆を意識したにしては0xHHとか導入しててこれも誤爆がちょっと怖い
 ところで、0xHHに面白い使い道って無いかな?
- 
      736デフォルトの名無しさんsage2014/09/06(土) 10:50:51.07 ID:MxvNWPBV
    
- コマンドって言うかあれexeがぽつんとあるからXPにも持ってったら使える
- 
      737デフォルトの名無しさんsage2014/09/06(土) 11:21:15.51 ID:VC7+V5v8
    
- 
      >>736
 そんなライセンス違反するぐらいなら、自分で作るわ
- 
      738デフォルトの名無しさんsage2014/09/06(土) 11:55:47.36 ID:7o9GfA8D
    
- XP以前のWindowsでやるならWSHと併用するのが無難だろ
- 
      739デフォルトの名無しさんsage2014/09/06(土) 12:14:14.46 ID:/ZVE3fJb
    
- 持ってける環境ならそもそもリソースキットのsleepでいいよなぁ
- 
      740デフォルトの名無しさんsage2014/09/06(土) 14:44:22.93 ID:oxbqUYdk
    
- イロイロ面倒なので ping -n 4 127.0.0.1 >nul で済ます派
- 
      741デフォルトの名無しさんsage2014/09/06(土) 14:51:57.54 ID:Q5t2bt7Q
    
- 俺も同じだけど
 ping -n 4 localhost>nul
 って書くなあ
- 
      742デフォルトの名無しさんsage2014/09/06(土) 16:57:04.41 ID:ZCLGKOho
    
- ping -n 4 -w 1000 0
- 
      743デフォルトの名無しさん2014/09/08(月) 03:45:12.19 ID:mzCBiPNi
    
- 文字列の置換方法について教えてください。
 やりたいことのイメージはこんな感じです。
 
 SET P="X:¥data¥*.dat"
 FOR %%N IN (1 3 5 7) DO CALL :FUNC %%N
 EXIT /b
 
 :FUNC
 SET F=%P:*=%1%
 ECHO %F%
 EXIT /b
 
 P に含めておいた * を置換して、データファイルのパス F を作り出す処理ですが、問題は
 1. どうやら置換前の文字列として * はそのままでは指定できない
 2. 置換後の文字列として変数を使うための書き方がわからない
 です。
 
 1 の問題は解決策が無いなら * ではない文字を使うことで回避しますが、2 の問題は解決できないと困ります。
 ためしに置換文字は XXX にした上でこんな感じにしたところ
 
 SET TMP=SET F=%%P:XXX=%1%%
 %TMP%
 ECHO %F%
 
 %1 が 3 の例では TMP は SET F=%P:XXX=3% になりますが F は %P:XXX=3% になり、欲しい値である X:¥data¥3.dat は得られませんでした。
 
 解決策はあるでしょうか?
- 
      744デフォルトの名無しさんsage2014/09/08(月) 04:26:56.39 ID:lMytNnlx
    
- 
      >>743
 SET "P=X:¥data¥*.dat"
 FOR %%N IN (1 3 5 7) DO CALL :FUNC "%%N"
 EXIT /b
 
 :FUNC
 CALL SET "F=%%P:¥*=¥%‾1%%"
 ECHO %F%
 EXIT /b
- 
      745743sage2014/09/08(月) 11:49:15.60 ID:mzCBiPNi
    
- 
      >>744
 すばらしい!
 SET を CALL でやるとか、そんなことできたんですね。
 * も ¥ でエスケープできるんですね。
 実はそれは試した気がするんですが、その時はまた別の問題で動かなかったのだと思います。
 大変勉強になりました。ありがとうございます。
- 
      746743sage2014/09/08(月) 12:06:19.31 ID:mzCBiPNi
    
- たびたびすみません
 >* も ¥ でエスケープできるんですね。
 
 エスケープしてるわけじゃなく ¥* という文字列にマッチさせたんですね。
- 
      747デフォルトの名無しさんsage2014/09/15(月) 05:25:26.21 ID:xvxXq9UP
    
- Win7 64bit環境でやたらと
 >このコマンドを実行するのに十分な記憶域がありません。
 というメッセージが出るんだけどどういう理由で出るんだろうか
 指示したコマンドはすべて正常に実行されてバッチ終了時に出てるっぽい
 
 やってることはこの程度で複雑な再帰的な呼び出ししてリソースが足りなくなるようなこともしてないんだけど
 dir xxx > index.txt
 start myapp index.txt
- 
      748デフォルトの名無しさんsage2014/09/15(月) 06:48:36.06 ID:lRy+d+xy
    
- 
      >>747
 ぽい、じゃなくてせめて特定しろよ
- 
      749デフォルトの名無しさんsage2014/09/15(月) 19:07:07.76 ID:YYlxE9nY
    
- startに2つ引数渡すと、1つ目はタイトルバー文字列であって実行コマンドじゃないんだけど、そこは考慮しとるか?
- 
      750デフォルトの名無しさんsage2014/09/16(火) 01:59:34.14 ID:c+NwjENR
    
- 
      >>749
 startでは、""で括ってない文字列はタイトルとは見做さないし
 もしmyappが実際には""で括ったパスだったとしても
 .txtに関連付けられたテキストエディタが起動するだけのことじゃない?
 myappが何者か知らんけどね
- 
      751デフォルトの名無しさんsage2014/09/17(水) 19:26:04.43 ID:IyzZKIxY
    
- A,1,DATA
 B,2,DATA
 B,3,DATA
 B,4,DATA
 B,5,DATA
 C,6,DATA
 C,7,DATA
 
 上記のようなCSVからBを含む行を削除し、下記のように2列目の連番を振りなおしたいです。
 
 A,1,DATA
 C,2,DATA
 C,3,DATA
 
 DBソフトでやればいいのでしょうが、加工したファイルをFTPでサーバ転送まで行いたいので、1つのバッチファイルで書く方法はないでしょうか。
- 
      752デフォルトの名無しさんsage2014/09/17(水) 19:35:07.67 ID:f/TEMlG2
    
- findコマンドでBを含む行を削除して、
 for /F "tokens=1,2* delims=,"でカンマ区切りのフィールド1とフィールド3以降を抽出して、
 set /Aで生成した連番を付けて出力すれば良い
 
 けど駄目文字とかもあるからCSVの内容次第によっては上手くいかない
 加工はWSHとかPerlとかawkとか別のソフトで自動処理したほうが良いと思う
- 
      753デフォルトの名無しさんsage2014/09/17(水) 22:01:06.18 ID:/eUJEkTQ
    
- 
      >>751
 LogParser使うと楽
 logparser -q:on -headers:off -headerRow:off -i:csv -o:csv "select field1, sequence(1), field3 from hoge.csv where field1 <> 'B'"
- 
      754デフォルトの名無しさんsage2014/09/18(木) 03:07:03.87 ID:mrfrjYJ7
    
- 
      >>751
 データが例題通りなら
 for /f "tokens=1-4 delims=,[]" %0 in ('findstr /v /r /c:"^B," CSVファイル ^| find /v /n ""') do @echo;%1,%0,%3>>振りなおしたファイル
- 
      755デフォルトの名無しさんsage2014/09/18(木) 07:47:53.33 ID:sZWThT0L
    
- 
      >>751
 では俺はWSHを使った方法をば
 
 @if (0)==(0) echo off
 cscript.exe //nologo //e:jscript "%‾f0"
 goto :EOF
 @end
 
 var fs = new ActiveXObject('Scripting.FileSystemObject');
 var rfile=fs.OpenTextFile('z:/old.csv', 1, true, 0);
 var wfile=fs.OpenTextFile('z:/new.csv', 2, true, 0);
 var index = 1;
 var data = [];
 while(!rfile.AtEndOfStream)
 {
 data=rfile.ReadLine().split(',');
 if(data.length<3 || data[0]=='B') continue;
 data[1]=index++;
 wfile.WriteLine(data.join(','));
 }
 rfile.Close();
 wfile.Close();
 fs = null;
- 
      756デフォルトの名無しさんsage2014/09/18(木) 14:02:21.24 ID:rT0APxd3
    
- エディタでB始まり行を削除し、二項目でソート sort /+3
- 
      757デフォルトの名無しさんsage2014/09/18(木) 15:37:07.01 ID:M6S1ZPsM
    
- 
      >>756
 連番振り直しにならないしそれは多分違うと思う
- 
      758デフォルトの名無しさんsage2014/09/18(木) 15:59:59.78 ID:vLADtqdv
    
- 
      >>757
 そっか、ソートでなく番号付け直しだった
 撤回
- 
      759751sage2014/09/18(木) 21:08:15.87 ID:IKvy/bQU
    
- 
      皆さん、助言ありがとうございました。
 おかげさまで、イメージしていた処理ができるようになりました。
 
 >>754で書かれたものをベースでできました。
 
 ただ、データが数万件あるファイルの処理なので、結構時間がかかります。
 軽いファイルで、同様の処理があるので、これを活用していきたいと思います。
- 
      760デフォルトの名無しさんsage2014/09/18(木) 21:52:18.43 ID:sZWThT0L
    
- 
      >>759
 もう不要みたいだけど、数万件あるのならデータソースドライバ接続でSQLクエリした方が早いと思う
 csvファイルと同じフォルダにSchema.iniを作成してから次のbatを起動
 Schema.iniの中身
 [old.csv]
 ColNameHeader=False
 Format=CSVDelimited
 CharacterSet=OEM
 Col1=id Text
 Col2=index Long
 Col3=contents Text
 [new.csv]
 ColNameHeader=False
 Format=CSVDelimited
 CharacterSet=OEM
 Col1=id Text
 Col2=index Long
 Col3=contents Text
- 
      761デフォルトの名無しさんsage2014/09/18(木) 21:53:46.14 ID:sZWThT0L
    
- @if (0)==(0) echo off
 type nul>z:¥new.csv
 cscript.exe //nologo //e:jscript "%‾f0"
 goto :EOF
 @end
 
 var USE_SRC_DRIVER_FOR_OUTPUT = 0; //=1でnew.csv出力もデータソースドライバを使う
 var oldRec,newRec;
 var index = 1;
 var db = new ActiveXObject('ADODB.Connection');
 db.Open("Driver={Microsoft Text Driver (*.txt; *.csv)}; DefaultDir=z:/; ReadOnly=0");
 oldRec = db.Execute("select * from old.csv where id <> 'B'");
 if (USE_SRC_DRIVER_FOR_OUTPUT==1) { newRec = db.Execute('select * from new.csv');
 } else {
 var fs = new ActiveXObject('Scripting.FileSystemObject');
 newRec=fs.OpenTextFile('z:/new.csv', 2, true, 0);
 }
 while(!oldRec.EOF) {
 if (USE_SRC_DRIVER_FOR_OUTPUT==1) {
 var strSQL = "insert into new.csv (id,index,contents) values(" +
 "'"+oldRec.Fields('id')+"','"+(index++)+"','"+oldRec.Fields('contents')+"')";
 db.Execute(strSQL);
 } else { newRec.WriteLine([oldRec.Fields('id'),index++,oldRec.Fields('contents')].join(',')); }
 oldRec.MoveNext;
 }
 oldRec.Close();
 newRec.Close();
 db.Close();
 db=null;
 fs=null;
- 
      762デフォルトの名無しさんsage2014/10/05(日) 23:51:44.69 ID:zNTRptzw
    
- バッチ内で、今日の曜日を知る方法がわからなかったので調べたが、
 一発で得る方法は無いんですね。
 
 年月日がわかると計算できるとわかったが面倒、曜日GETコマンドを追加してほしい。
 昔のDOSだと出来たのに。
- 
      763デフォルトの名無しさんsage2014/10/06(月) 01:39:32.46 ID:BYDBHNPS
    
- 
      >>762
 @echo off
 set week=
 call :get_week
 if not defined week echo 曜日が取得できません&goto :eof
 echo %week%
 goto :eof
 
 :get_week
 rem ****************************************************
 rem * robocopyのメッセージから6行目にある(OSによっては別の行かも)
 rem * Started : Mon Oct 06 01:10:09 2014
 rem * の行を抽出し、曜日"mon"を環境変数weekにセットする
 rem ****************************************************
 for /f "skip=5 tokens=1,2 delims=: " %%i in ('robocopy') do if "%%i"=="Started" set week=%%j&goto :eof
 
 ===========================================
 またWSHで曜日を求めることもできる
 @if (0)==(0) echo off
 cscript.exe //b //e:vbscript "%‾f0"
 set WEEK=SunMonTueWedThrFriSat
 set /a w=%errorlevel% * 3
 call echo %%WEEK:‾%w%,3%%
 goto :eof
 @end
 Wscript.Quit(WeekDay(Date))
- 
      764デフォルトの名無しさんsage2014/10/06(月) 02:06:03.74 ID:BYDBHNPS
    
- 
      >>762
 WSHの方を訂正
 @if (0)==(0) echo off
 cscript.exe //b //e:jscript "%‾f0"
 set WEEK=SunMonTueWedThuFriSat
 call echo %%WEEK:‾%errorlevel%,3%%
 goto :eof
 @end
 WScript.Quit((new Date).getDay()*3);
- 
      765デフォルトの名無しさんsage2014/10/06(月) 05:51:08.25 ID:xttTcZgk
    
- 
      >>762
 echo %date:‾12,1%
- 
      766デフォルトの名無しさんsage2014/10/06(月) 20:17:14.38 ID:OxfxhYi7
    
- 
      >>762
 その1
 
 ここから抜粋&変形
 
 バッチで日付関係の操作
 http://homepage1.nifty.com/jak/batch/date.html
 
 指定した日(本日)の曜日を表示する
 @echo off
 for /F "tokens=1" %%0 in ('date /t') do set today=%%0
 set yy=%today:‾0,4%
 set /a mm=1%today:‾5,2% - 100
 set /a dd=1%today:‾8,2% - 100
 if %mm% LEQ 2 (set /a yy=yy-1&&set /a mm=mm+12)
 set /a week=(yy + yy/4 - yy/100 + yy/400 + (13*mm+8)/5 + dd) %% 7
 set day=日月火水木金土
 call set yobi=%%day:‾%week%,1%%
 
 月曜なら
 week=1
 yobi=月
- 
      767デフォルトの名無しさんsage2014/10/06(月) 20:18:10.98 ID:OxfxhYi7
    
- 
      >>762
 その2
 
 http://sourceforge.net/projects/unxutils//download の
 UnxUtils.zip に含まれる「date.exe」を使用
 
 カレントディレクトリに置いて「date」と入力しても
 内部コマンドの「date」が呼び出されるので
 「date.exe」と入力するか「gnudate.exe」等にリネームしてから使用
 
 1日前のmmdd
 gnudate +"%m%d" -d "1 days ago"
 
 当日の曜日:0(日曜)〜6(土曜)
 gnudate +"%w"
 
 1日後のyymmdd
 gnudate +"%y%m%d" -d "1 days"
 
 バッチ組み込む場合は、%を付加
 
 コマンドライン
 gnudate +"%w"
 
 バッチ
 gnudate +"%%w"
- 
      768デフォルトの名無しさんsage2014/10/07(火) 01:25:17.83 ID:7+b6LNQ5
    
- 
      >>763-769
 ありがとうございます。
 ぐぐったら、いろんなやりかたがありましたので、
 コピーしてバッチを作り使っています。(パクリ) で >>766さんとほぼ同じ。
 
 date.exeはあると便利そうですね。
- 
      769デフォルトの名無しさんsage2014/10/08(水) 04:17:28.70 ID:UoQC8Akv
    
- 4年前のスレの時に作った
 ISO 8601 の週とか、曜日とかのバッチを貼ってみる
 
 @echo off & setlocal enabledelayedexpansion
 set /a y2=%1, m2=%2, d2=%3, y1=y2, y3=y2+1
 set a=月火水木金土日& call :x 1582 10 15 w0 a0 b0
 :y
 call :x y1 1 4 w1 a1 b1
 call :x y2 m2 d2 w2 a2 b2 & set /a w=w2-w1+1, b=b2-b0
 call :x y3 1 4 w3 a3 b3
 if %w%==0 set /a y1-=1 & goto y
 if %w2%==%w3% set /a y1=y3, w=1
 echo %1年%2月%3日は、%y1%年の第%w%週目(!a:‾%a2%,1!曜日)
 echo 1582年10月15日から%b%日後
 pause > nul & goto :eof
 :x
 set /a m=%2+%1*12-3+480000, d=%3+m/48-m/1200+m/4800
 set /a d+=m*31-(m+10)/12-(m+8)/12-(m+5)/12-(m+3)/12-m/12*3-6
 set /a %4=d/7, %5=d%%7, %6=d
- 
      770デフォルトの名無しさんsage2014/10/08(水) 04:23:49.70 ID:UoQC8Akv
    
- 
      >>769 文字化けした
 
 @echo off & setlocal enabledelayedexpansion
 set /a y2=%1, m2=%2, d2=%3, y1=y2, y3=y2+1
 set a=月火水木金土日& call :x 1582 10 15 w0 a0 b0
 :y
 call :x y1 1 4 w1 a1 b1
 call :x y2 m2 d2 w2 a2 b2 & set /a w=w2-w1+1, b=b2-b0
 call :x y3 1 4 w3 a3 b3
 if %w%==0 set /a y1-=1 & goto y
 if %w2%==%w3% set /a y1=y3, w=1
 echo %1年%2月%3日は、%y1%年の第%w%週目(!a:‾%a2%,1!曜日)
 echo 1582年10月15日から%b%日後
 pause > nul & goto :eof
 :x
 set /a m=%2+%1*12-3+480000, d=%3+m/48-m/1200+m/4800
 set /a d+=m*31-(m+10)/12-(m+8)/12-(m+5)/12-(m+3)/12-m/12*3-6
 set /a %4=d/7, %5=d%%7, %6=d
- 
      771デフォルトの名無しさんsage2014/10/08(水) 04:49:28.50 ID:JeGGtqCf
    
- 
      >>715
 SET os1=不明
 VER|FIND "Windows">NUL
 IF NOT ERRORLEVEL 1 SET os1=Vista以降
 VER|FIND "Windows 95">NUL
 IF NOT ERRORLEVEL 1 SET os1=95
 VER|FIND "Windows 98">NUL
 IF NOT ERRORLEVEL 1 SET os1=98
 VER|FIND "Windows Millennium">NUL
 IF NOT ERRORLEVEL 1 SET os1=Me
 VER|FIND "Windows NT">NUL
 IF NOT ERRORLEVEL 1 SET os1=NT
 VER|FIND "Windows 2000">NUL
 IF NOT ERRORLEVEL 1 SET os1=2000
 VER|FIND "Windows XP">NUL
 IF NOT ERRORLEVEL 1 SET os1=XP
 VER|FIND "Windows [Version 5.2.">NUL
 IF NOT ERRORLEVEL 1 SET os1=Server2003
 IF NOT "%os1%"=="Vista以降" ECHO 【ERROR】このPCのOSはWindows Vista以降ではありません!
- 
      772デフォルトの名無しさんsage2014/10/13(月) 19:03:27.34 ID:Sxb1My8w
    
- 
      xcopyの/vオプションってデータを読み取れる形式になってるか確認するだけで
 ハッシュ確認とかはしてないの?
 http://www.vor.jp/winmemo.htmlここ見るとあまり信用できないみたいな感じの事書いてあるけど
 
 windows7環境でxcopy /?でヘルプを見ると
 >/V コピー先の各ファイルのサイズを検証します。
 と書いてあるけど
- 
      773デフォルトの名無しさんsage2014/10/13(月) 22:26:19.21 ID:fGTkDBdq
    
- ファイルサイズが一致するか確認するだけで、
 ファイル内容の完全一致を検証したりハッシュ確認したりはしないってことでしょ。
- 
      774デフォルトの名無しさんsage2014/10/13(月) 22:31:27.06 ID:Sxb1My8w
    
- じゃあビットエラーやライト・リードエラー起こりえるって事だよね?
 そっかー・・・ありがと
- 
      775デフォルトの名無しさんsage2014/10/14(火) 08:01:58.57 ID:xX880Orc
    
- 
      >>772
 /vオプションなんかに頼らず、
 fc /bでバイナリ比較するのが確実
- 
      776デフォルトの名無しさんsage2014/10/14(火) 15:08:17.21 ID:GsQr0uZE
    
- 
      >>774
 そんな心配は不要だろ
 HDDやDVDやメモリカードならCRCエラー訂正ぐらいはやってるだろうし、
 そもそもHDDのファイルが信用できなきゃ、OSのEXEファイル自体の動作を心配しなきゃならなくなるぞ
- 
      777デフォルトの名無しさんsage2014/10/14(火) 15:16:42.81 ID:OfBdBdCX
    
- 
      いやデータ化けるよ
 一例だけど
 http://anago.2ch.net/test/read.cgi/jisaku//344
- 
      778デフォルトの名無しさんsage2014/10/14(火) 15:23:32.38 ID:GsQr0uZE
    
- 
      >>777
 じゃあ心配して、毎回チェックすりゃいいさ
 そのチェックプログラムももしかしたら壊れてるかもしれんからチェックする前に
 チェックプログラムもチェックしなきゃな
- 
      779デフォルトの名無しさんsage2014/10/14(火) 15:50:57.79 ID:OfBdBdCX
    
- 「じゃあ」って会話成り立ってなくね・・・?
- 
      780デフォルトの名無しさんsage2014/10/14(火) 15:55:47.13 ID:GsQr0uZE
    
- 
      >>777
 もしファイルが1コでも壊れてたならそのHDDは廃棄したほうがいいよ
 数十万個もあるファイルの中でどのファイルも信用できなくなるから
- 
      781デフォルトの名無しさんsage2014/10/14(火) 17:54:51.45 ID:KrwLefD2
    
- ID:GsQr0uZE
 ガキかよ w
- 
      782デフォルトの名無しさんsage2014/10/20(月) 11:31:06.84 ID:/QCZ146H
    
- 今知った情弱だけど
 ドス窓でもlsやcpってあるんだね
 dirよりlsの方がいいわ
- 
      783デフォルトの名無しさんsage2014/10/20(月) 13:00:44.70 ID:3N7ImT1k
    
- 無いよ。
 msysとかgitとか自分で入れたんじゃ?
- 
      784デフォルトの名無しさんsage2014/10/20(月) 13:12:52.90 ID:Piwo04XB
    
- あぁ本当だ
 環境変数確認してみたら、過去の自分がmsys¥binのパス通してたみたい
 勘違いごめん・・・
- 
      785デフォルトの名無しさんsage2014/10/20(月) 20:14:35.56 ID:dmAxhR4K
    
- Microsoftさまの
 Microsoft Windows Services for UNIX か Subsystem for UNIX-based Applications + パッケージ
 の話をしてたのかと思ったら違った
- 
      786デフォルトの名無しさんsage2014/10/20(月) 23:37:51.04 ID:DQouY8WZ
    
- 
      >>785
 それってbashのShellshock脆弱性のパッチは出てるの?
- 
      787デフォルトの名無しさんsage2014/10/21(火) 01:00:34.39 ID:c8NUu7RB
    
- 
      >>786
 ttp://www.atmarkit.co.jp/fwin2k/productreview/sfu30/sfu30_05.html
 ttp://www.atmarkit.co.jp/fwin2k/win2ktips/1369suatools/suatools.html
 > bashはSFU 3.0では提供されない
 > bashコマンドなどは含まれていない
 そもそもbashは入らない。自分でいれたbashのバージョンの面倒くらい自分でみろ。
 つかWindowsではその脆弱性があっても影響受ける奴なんて滅多に居ねぇ気がするが…
- 
      788デフォルトの名無しさん2014/10/21(火) 13:40:31.50 ID:S84tBIG3
    
- おお
 batのスレなんてあったのか
 
 ffmpegを起動するbatファイルを書いてたのですがffmpegに渡す引数の加工に
 独自のコマンドアプリで処理させてその独自コマンドアプリのはいた文字列を
 ffmpegの引数とする場合どのようにbatファイルを書けばいいのでしょうか?
- 
      789デフォルトの名無しさんsage2014/10/21(火) 13:42:53.21 ID:2H0YuUZz
    
- ファイルに出力するなり、forで受け取るなり
- 
      790デフォルトの名無しさん2014/10/21(火) 13:47:58.34 ID:S84tBIG3
    
- サンプルコードなどいただけるとありがたいのですが・・・
 
 @echo off
 ffmpeg %1
 exit
 
 とかbatそのものの引数の格納されている変数?は理解してるのですが
 独自コマンドアプリをhogehogeとした場合
 
 @echo off
 hogehoge %1
 ffmpeg ???
 exit
 
 この連携の記述がよくわかりません・・・
- 
      791デフォルトの名無しさんsage2014/10/21(火) 13:58:47.05 ID:PndivJJV
    
- hogehogeで出力されるファイル名を、%1の最後に付け加えて
 ffmpegのところに付け加えて渡すとかは
 
 例
 hogehoge %1
 ffmpeg "%‾dpn1_hogehoge-output.拡張子" ・・・
- 
      792デフォルトの名無しさん2014/10/21(火) 14:09:01.52 ID:S84tBIG3
    
- @echo off
 hogehoge %1
 ffmpeg ???
 exit
 
 この場合の
 hogehoge %1
 
 %1はhogehogeに対する入力とすると出力もこれに返ってくるの?
- 
      793デフォルトの名無しさん2014/10/21(火) 14:11:30.04 ID:S84tBIG3
    
- hogehoge %1 | ffmpeg
 
 もしかしてこれでいいのかな?
- 
      794デフォルトの名無しさんsage2014/10/21(火) 14:29:59.30 ID:PndivJJV
    
- exitやめてpauseにして
 一度どんな風に渡されているのか見てみたらいい
- 
      795デフォルトの名無しさん2014/10/21(火) 14:35:09.24 ID:S84tBIG3
    
- 
      わかりました
 いろいろヒントいただいたおかげで検索ワードがいろいろ追加できたので
 今まで探しきれなかった情報にたどりつけそうです
 
 ちょっと自力でやってみてまたつまったらこちらにお邪魔します
 
 >>789>>791ありがとうございました
- 
      796デフォルトの名無しさんsage2014/10/21(火) 22:34:08.95 ID:rPngFVY9
    
- フォルダを削除した直後に同名のフォルダを新規に作成しようとすると「アクセスが拒否されました」と表示されて作成できないことがあります。
 
 コマンドは終了していても、フォルダの削除は完了していなくて作成できていないような動きなのですが、そんなことあり得るのでしょうか?
- 
      797デフォルトの名無しさん2014/10/22(水) 02:01:18.93 ID:ZQ5GB3JT
    
- 
      素直にスクリプト用の言語使え何かと捗る>>795
    
- 
      798デフォルトの名無しさんsage2014/10/22(水) 20:48:08.90 ID:RtNwyOkD
    
- 
      >>796
 あり得ます。
- 
      799デフォルトの名無しさんsage2014/10/26(日) 01:47:43.27 ID:hoJdkFAv
    
- 今知ったけどM$がコマンドでハッシュ計算用のソフト公開してるね
 fcivってやつ
- 
      800デフォルトの名無しさんsage2014/10/26(日) 04:02:18.84 ID:fx3FFnF6
    
- 
      >>799
 それ使ってバッチファイル書いたことあるけど、出力をバッチで取り扱うのが面倒だった上に、
 Unicodeパス非対応、挙句マルチバイト文字の扱いにバグがあってすごく駄目駄目だった。
 isupper(*(signed char*)str)でマイナス文字領域を参照しちゃう系のバグだったかな、
 デベハトップ系よりもタチが悪くて、2バイト文字の先行バイトすら化けるという有り様だよ。
 
 今は直ってるかなーと思ったが2004年からバージョンアップしてないんすね、駄目だこりゃ。
- 
      801デフォルトの名無しさんsage2014/10/26(日) 13:36:26.66 ID:RNavWr6/
    
- Win7のシャットダウンコマンドでXPみたいなカウントダウンしてる画面って出せない?
 コメントなら出るし2分前になればダイアログ出るけど・・・
- 
      802デフォルトの名無しさんsage2014/10/26(日) 19:16:07.11 ID:nC00iuOZ
    
- 
      >>800
 そーだったのか。
 Windows8のダウンロード版が一致するかチェックするのに便利だったが。
- 
      803デフォルトの名無しさんsage2014/10/26(日) 19:34:43.95 ID:dzHjPHpI
    
- 
      >>802
 ダメ出しできる俺スゲー君でしょ
 便利に使えばいいだけ
 不具合あるなら自分で作ってもそんなに大変じゃないし
- 
      804デフォルトの名無しさんsage2014/10/26(日) 20:12:30.67 ID:fx3FFnF6
    
- 
      >>802
 不特定ファイル名を受け入れる用途やバッチファイルでは駄目だけど、
 ファイル名の取り扱いとかでバグ踏まない用途なら別に問題ないよ。
 >>803
 バッチファイル書いてからバグに気がつくよりマシだと思って情報出しただけなんだけどなぁ…
 というかハッシュ計算機を自分で作るって、ライブラリに頼らず書くのは結構な手間だろ何言ってん?
- 
      805デフォルトの名無しさん2014/10/26(日) 20:14:50.47 ID:RaZwtAdW
    
- PsShutdown
- 
      806デフォルトの名無しさんsage2014/10/26(日) 21:22:33.11 ID:dzHjPHpI
    
- 
      >>804
 > バッチファイル書いてからバグに気がつくよりマシだと思って情報出しただけなんだけどなぁ…
 
 自分で >>800 のレス読んでそんな風に思える?
 
 > というかハッシュ計算機を自分で作るって、ライブラリに頼らず書くのは結構な手間だろ何言ってん?
 
 アルゴリズム考えるとかならいざ知らず、実装だけならたいしたことないよ。
 例えば MD5 で、この程度。
 http://en.m.wikipedia.org/wiki/MD5
- 
      807デフォルトの名無しさん2014/10/26(日) 21:29:11.59 ID:NwSJFL0J
    
- 俺スゲー君とか言っちゃう君
- 
      808デフォルトの名無しさんsage2014/10/26(日) 21:42:07.29 ID:nC00iuOZ
    
- 
      すいません俺が誘導したからかも
 
 ttp://kanae.2ch.net/test/read.cgi/gameurawaza//971+976+979+982
- 
      809デフォルトの名無しさんsage2014/10/26(日) 22:06:13.49 ID:ICsbUc5p
    
- 
      >>807
 お前、最低だな
- 
      810デフォルトの名無しさんsage2014/10/26(日) 22:10:20.56 ID:fx3FFnF6
    
- 
      >>806
 うん、「今後も、特にバッチファイルで使うなら別のハッシュ計算ソフト探すべきだな」と思えるよ。
 : 実際にはnode.jsのコアライブラリに丸投げしたけど。コールバックまみれでダルかった
 
 しかしライブラリ使うに決まってるって言われるかと思ったら実装が楽って返事が来るとはなぁ…
 大したことがないのならバッチファイルで実装してみてくれとか無茶振りしてみても良いかい?
- 
      811デフォルトの名無しさんsage2014/10/26(日) 22:27:19.67 ID:ICsbUc5p
    
- 
      >>810
 > うん、「今後も、特にバッチファイルで使うなら別のハッシュ計算ソフト探すべきだな」と思えるよ。
 
 なら、そう書けばいいだけ。
 
 > 大したことがないのならバッチファイルで実装してみてくれとか無茶振りしてみても良いかい?
 
 リンク先読んだか?
 C でも数十行だから、たいしたことないだろ?
 バッチファイルではバイナリと配列が扱えないので、面倒。
- 
      812デフォルトの名無しさん2014/10/26(日) 22:29:05.55 ID:KYTvr3GZ
    
- もしもしのソースはいつもwikipedia(笑)
- 
      813デフォルトの名無しさんsage2014/10/26(日) 23:34:43.51 ID:fx3FFnF6
    
- 
      >>811
 ここはバッチファイルスレだって分かってるのかね、君。
 「結局node.jsで自作(但し丸投げ)した」ってボケにも気づいてないようだし…もう少し余裕を持ちたまえ。
- 
      814デフォルトの名無しさんsage2014/10/26(日) 23:49:34.01 ID:IWXHWYqd
    
- .NET 4.5でようやく、MD5が追加されたのでは?
- 
      815デフォルトの名無しさんsage2014/10/26(日) 23:51:05.93 ID:9AUTkNpp
    
- 今、困っていること
 call で複数階層の呼び出しをした場合、
 エラーで以後を中断し、一気に元に帰る方法がわからない。
 
 exit /B だと次々に判定をしないと戻れないし、
 exit だと DOSプロンプト自体が消えてしまう。
- 
      816デフォルトの名無しさん2014/10/26(日) 23:57:41.58 ID:KYTvr3GZ
    
- エラーのときにフラグセットして各ルーチンでそれ観察すれば
- 
      817デフォルトの名無しさんsage2014/10/27(月) 00:23:38.36 ID:zpmVa3Ig
    
- 
      >>815
 callじゃなくてcmd.exeを呼んでおけばexitで戻れる。それが嫌なら>>816
- 
      818デフォルトの名無しさんsage2014/10/27(月) 01:14:29.68 ID:vMuLOlfx
    
- 
      >>816
 >>817
 ありがとうございます。
 
 cmd.exeか、なるほどなー
- 
      819デフォルトの名無しさんsage2014/10/27(月) 02:45:30.73 ID:os0cynVo
    
- mingwにopenssl sha1コマンド入ってた
 ただ表示するだけだけど
- 
      820デフォルトの名無しさんsage2014/10/27(月) 02:47:04.59 ID:os0cynVo
    
- MSYSだったw
- 
      821デフォルトの名無しさんsage2014/10/27(月) 05:11:17.57 ID:iE0BQBfx
    
- 
      >>813
 何を言いたいのかさっぱりわからんが、悔しさは伝わったよ w
- 
      822デフォルトの名無しさんsage2014/10/27(月) 05:48:58.48 ID:zpmVa3Ig
    
- 
      >>821
 何を言いたいのかさっぱりわからんが、悔しさは伝わったよw
- 
      823デフォルトの名無しさんsage2014/10/27(月) 05:54:06.73 ID:xZ3TAadP
    
- 
      >>812
 ID:fx3FFnF6 と同じで、ダメ出ししかできない奴乙
 使えるものは便利に使えばいいじゃん
 
 まあ、
 > exit /B だと次々に判定をしないと戻れないし、
 と書いてるのに、
 > エラーのときにフラグセットして各ルーチンでそれ観察すれば
 とか、書いちゃう人だし w
- 
      824デフォルトの名無しさんsage2014/10/27(月) 05:56:08.53 ID:iE0BQBfx
    
- 
      >>822
 良かったな w
- 
      825デフォルトの名無しさん2014/10/27(月) 10:41:19.76 ID:G9UeKJLQ
    
- 自己紹介乙(笑)
- 
      826デフォルトの名無しさんsage2014/10/27(月) 12:37:15.39 ID:h7Lo5JhP
    
- 涙ふけよ
- 
      827デフォルトの名無しさんsage2014/10/27(月) 15:04:47.97 ID:tc+ZTYEM
    
- ファイル名の取り扱いにバグがあるなら標準入力から突っ込めばモーマンタイ
 WindowsならCryptAPIにハッシュ関数は一通りそろってるからラクショー
- 
      828デフォルトの名無しさんsage2014/10/27(月) 19:40:15.14 ID:vmmZ1w6v
    
- コード書こうよ
 スラドより酷え・・・
- 
      829デフォルトの名無しさんsage2014/10/27(月) 20:21:57.22 ID:UF6Jw/hL
    
- 
      >>827
 改造板に帰って来いよ。誰もいなくなっちゃったんだよ。
- 
      830デフォルトの名無しさんsage2014/10/27(月) 23:08:21.57 ID:c91aEmZZ
    
- 2週間に一度とか3週間に一度とかに実行させるサンプルどっかに無いでしょうか?
 バッチファイルを実行してから、実行すべきかどうか判断して
 実行するしないに分岐するようなのが欲しいのですが、自分ではどうにもうまいこと
 思いつかず、サンプルを探してみたのですがどうにも見つけられず…。
 実行した日を別ファイルにして書き出すと管理が面倒なことになるので、
 曜日と日付をみてなんとかできないものかと考えたものの頓挫しました。
- 
      831デフォルトの名無しさんsage2014/10/28(火) 02:16:00.84 ID:E6RWW6Yr
    
- 
      >>830
 自分のPCだけならスケジューラにbatを登録すればいい
 (実行にユーザ名とパスワードが必要なため)
 スケジューラに登録するbatも簡単に書ける
- 
      832デフォルトの名無しさん2014/10/28(火) 02:37:50.58 ID:TKGNZfF+
    
- 俺なら特定のファイルキープしておいて一定以上新しいなら実行しないようにする
- 
      833デフォルトの名無しさんsage2014/10/28(火) 02:46:35.27 ID:E6RWW6Yr
    
- 
      >>832
 日付で何日何週間先とか後とかを比較するには、
 基準となる日を決めて、本日とファイル日付を基準からの日数を求めて差
 求めるということをしないといけない
 確かにそんなに難しいことではないが、batに不慣れだとまず実現できないだろう
- 
      834デフォルトの名無しさんsage2014/10/28(火) 03:44:00.38 ID:IUrAseGh
    
- $ forfiles /D -14 /M *.bat /C "cmd /c echo [last modified : @fdate] : @path"
- 
      835デフォルトの名無しさんsage2014/10/28(火) 04:52:42.02 ID:mh0S7TxZ
    
- 
      >>827
 fcivは標準入力を読むように出来てないでしょうに
- 
      836デフォルトの名無しさんsage2014/10/28(火) 09:19:12.06 ID:sCh7b/xh
    
- 現在のプロンプトのタイトルを取得する方法を探しています、何かいい方法ありますか?
 
 やりたい事は下記のような事で
 Call元はバッチや場所が不定で変数の引き回し不可
 :Main側に戻った時の更新以外の方法を探しています。
 
 
 
 :Main
 Call :Sub
 Exit /b
 
 :Sub
 GetTitle的な何か MainTitle
 Title %SubTitle% 進捗...
 Title %MainTitle%
 Exit /b
- 
      837830sage2014/10/28(火) 22:06:59.72 ID:+z/Rv312
    
- 
      >>831-834
 様々なヒントをありがとうございます。
 処理するディレクトリ毎に目印ファイルを forfiles で判定させる、な感じで目処が立ちました。
 
 
 あらためて読み直すと自分のレス >>830 何かおかしいな。
 『曜日』が肝なので「2週間に一度とか3週間に一度」というより「隔週の金曜日とか3週毎の月曜日」だし、
 「頓挫」じゃなくて「挫折」だし…
- 
      838デフォルトの名無しさんsage2014/10/29(水) 01:03:14.85 ID:QREYhhOY
    
- 
      >>836
 こちらを参考にされては如何でしょうか。
 
 バッチファイルでコンソールウィンドウのタイトルを取得する。
 http://scripting.cocolog-nifty.com/blog/2009/01/post-22fe.html
- 
      839Mail:sagete テスト 転載ダメ©2ch.netsagete2014/10/29(水) 19:24:00.56 ID:06hl2t+T
    
- 
      >>838
 情報ありがとうございます
 Win7環境で試してみましたが、取得に至りませんでした。
 
 教えて頂いたページでは Title で変更した場合でも現在のウィンドウタイトルが取得できる前提のようですが
 当方では Start "NewTitle" ... など名前を指定して立ち上げたウィンドウのタイトルしか取得できないようです。
- 
      840デフォルトの名無しさん2014/10/29(水) 20:02:22.27 ID:06hl2t+T
    
- すみません、1コマンドずつ分けてテストしなおしたらタイトル取得できるようなので
 もう一度自分で全部書き直してやってみます、失礼しました
- 
      841デフォルトの名無しさんsage2014/10/29(水) 22:17:40.80 ID:l7NTsp1b
    
- 
      >>840
 LFコードを環境変数に入れるところで一行少ないため
 文字列の先頭に余計なものがつき、全体に2つずつずれてるので
 %2->%4 %9->%11
 だけど、改行を一行挿入するだけの方が良い
- 
      842デフォルトの名無しさんsage2014/10/30(木) 13:11:29.14 ID:jkHBLx1J
    
- ckwとnyaosを使い分けたいんですが
 ckw.cfg下記のように、コメント分にしようと思ったんですがうまくいきません
 
 //Ckw*title: ckw[cmd]
 //Ckw*exec: cmd.exe
 //Ckw*chdir: c:¥
 どうすればいいですか?
- 
      843デフォルトの名無しさんsage2014/11/11(火) 21:35:55.04 ID:S0cv/9qS
    
- コマンドでフォント変更って可能でしょうか
 utf-8使用時にショートカットのフォント変更を行わずバッチ側で済ませたいのです
- 
      844デフォルトの名無しさんsage2014/11/11(火) 21:55:19.19 ID:S0cv/9qS
    
- デフォルトの
 ラスタフォントからMSゴシックに変更したいと考えています。
 宜しくお願いいたします。
- 
      845デフォルトの名無しさんsage2014/11/12(水) 00:43:18.12 ID:IagLMQCH
    
- 
      >>843>>844
 ・regコマンドなどでコンソール用のレジストリ定義を変更して、それに合致するコンソールを開くようなバッチを書く
 ・WSHなどで自身のコンソールのGUIを自動操作してフォント設定の部分を操作するようなスクリプトを書く
- 
      846デフォルトの名無しさんsage2014/11/12(水) 00:48:36.21 ID:TfuExqnw
    
- コマンドプロンプトの表示フォントを変えたいってこと?
 「ファイル名を指定して実行」でcmdで起動して、
 ウィンドウ左上のアイコンをクリック→プロパティ→フォントタブで変えれば、
 次回から勝手に変わるんじゃないっけ。
- 
      847デフォルトの名無しさんsage2014/11/12(水) 04:48:11.36 ID:XVH80VNh
    
- コマンドプロンプトでUTF-8を表示させたり出来たっけ?
- 
      848デフォルトの名無しさんsage2014/11/12(水) 07:24:51.04 ID:ZQOXX5UM
    
- echo UTF-8
- 
      849デフォルトの名無しさんsage2014/11/12(水) 07:30:55.45 ID:bmz8bGaM
    
- 
      >>847
 code pageの話じゃね?
 chcp 65001
- 
      850デフォルトの名無しさんsage2014/11/12(水) 12:50:20.44 ID:SgzYB1N4
    
- 
      >>849
 なんかフォントの指定がうまくできない
- 
      851デフォルトの名無しさんsage2014/11/12(水) 12:57:06.08 ID:bmz8bGaM
    
- 
      >>850
 へ?フォントの指定は >>845 が答えてくれてるじゃん。
- 
      852デフォルトの名無しさんsage2014/11/12(水) 16:35:38.77 ID:IagLMQCH
    
- 
      Unicode文字を取り扱うという話なら、cmd.exe /UとかWriteConsoleWを使った文字出力で取り扱える。
 WriteConsoleWに頼るのが一番安定しててUnicode文字もほぼ問題なく取り扱えるけどchcpはダメだ。
 chcpが使えるケースもあるけどバグや癖が強すぎてどーにもならん。
 全角文字での文字幅計算はほぼ完全にダメ。良くて半角トーフか描画だけ全角で位置ズレする。
 コンソールでのファイル名入力
 @ XP+ラスタフォント→文字が正しくマップされず別の半角文字を表示して文字化け
 @ XP+TTFフォント→半角トーフに、後でラスタに変えるとASCII文字を巻き添えにして画面バッファ破損
 @ 8.1+ラスタフォント→マップ出来ない文字は無かったものとして表示されない
 @ 8.1+TTFフォント→半角トーフに、後でラスタに変えると表示されるが、全角分表示だけズレて行末は消滅
 typeコマンドでの出力
 @ XP+ラスタフォント→上の結果に加え追加で位置ズレや行消滅も
 @ XP+TTFフォント→先程の結果に同じ
 @ 8.1+ラスタフォント→全角文字は別の半角2文字の組みに。後続のASCII文字は半角スペースと組になるなど無茶苦茶
 @ 8.1+TTFフォント→先程の結果に同じ
 WriteConsoleA(UTF-8)
 @ XP+ラスタフォント→1バイトごとに別の半角文字を表示して文字化け
 @ XP+TTFフォント→先程の結果に同じ
 @ 8.1+ラスタフォント→XP+ラスタフォントの結果に同じ
 @ 8.1+TTFフォント→先程の結果に同じ
 WriteConsoleW(UTF-16)
 @ XP+ラスタフォント→1文字ごとに別の半角文字を表示して文字化け
 @ XP+TTFフォント→先程の結果に同じ
 @ 8.1+ラスタフォント→コンソールでのファイル名入力の結果に同じ
 @ 8.1+TTFフォント→先程の結果に同じ
 トーフはフォントリンクで解決できるかもしれんが、幅はどうやっても狂うだろうしダメだと思う。
 
 >>851
 chcpするとラスタフォントが別のに代わる。その状態でもフォント指定は効くから問題ない…
 かとおもいきや、chcpのクソ仕様により文字が化けたりトーフになったり幅が狂ったり散々。
- 
      853デフォルトの名無しさんsage2014/11/12(水) 21:34:27.06 ID:XVH80VNh
    
- 
      >>852
 WriteConsoleWってWin32APIを使って自作したってこと?
 それとも何かそれを使う方法があるのならその方法を教えて欲しい
 
 コードページでDBCSをサポートしているのは
 932 (Japanese Shift-JIS)
 936 (Simplified Chinese GBK)
 949 (Korean)
 950 (Traditional Chinese Big5)
 の4つだけみたいだね
- 
      854デフォルトの名無しさんsage2014/11/12(水) 22:33:49.24 ID:bmz8bGaM
    
- 
      >>852
 そうなんだ。テキトー言ってすまん(m´・ω・`)m >>850
- 
      855デフォルトの名無しさんsage2014/11/13(木) 17:27:02.80 ID:Y365RfYc
    
- 
      >>853
 「WriteConsoleA(GetStdHandle(STD_OUTPUT_HANDLE),"¥xE2¥x98¥xA3",3,0,0);」
 とか「WriteConsoleW(GetStdHandle(STD_OUTPUT_HANDLE),"¥x23¥x26¥0",1,0,0);」
 ってmainに書いただけだけですが一応自作、かな。TCC(超軽量Cコンパイラ)は便利。
 
 WSHとかcmd.exeの内部コマンドとかはコンソールへの出力時は地味にこの手のAPIでUnicode使ってるけど、
 基本的に対応してるコマンドのみの対応だからパイプとか使うとすぐに残念な結果になるんだよなぁ……
 パイプでReadFile/WriteFileしてUTF-8/16変換してReadConsoleW/WriteConsoleWするツールがあると捗るんかな?
 
 >>854
 chcpがテキトーなのがいけないんだよ、君は悪くない。
- 
      856デフォルトの名無しさんsage2014/11/14(金) 03:39:01.31 ID:ptj087p2
    
- 結局質問者のUTF-8使用時に色を変えたいってのは
 どういう意味だったん?
- 
      857デフォルトの名無しさんsage2014/11/14(金) 04:30:19.38 ID:1+T9Ha44
    
- 色に関する質問ってどれだ?
- 
      858デフォルトの名無しさんsage2014/11/14(金) 05:37:24.74 ID:ptj087p2
    
- フォントを先に変えておいて、chcp 65001で
 typeコマンドでutf-8ファイルを表示することは出来るけど
 クリップボード経由で貼り付けると表示が崩れるし、
 IMEも起動出来ないのはまあ良いとして、
 batが動かないのはどうしてだろう?
- 
      859デフォルトの名無しさんsage2014/11/14(金) 12:47:50.79 ID:eiUQB9Ml
    
- 
      >>858
 BOM 入ってね?
- 
      860デフォルトの名無しさんsage2014/11/14(金) 13:47:40.71 ID:ptj087p2
    
- 
      >>859
 bat自体はSJISなのでBOMは当然なしです
 
 XPだとchcp65001の間は,batファイルが読めないみたい
 ただし、bat中でchcp65001とchcp932の間に命令を挟んで全体を()で括ってやれば
 コマンドインタープリタが1行で読み込むので実行することはできるが
 XPではchcpでclsされるのでpauseとかで止めないと表示が見えない
 またbatファイルもSJIS以外はダメなので、UTF16やUTF8で作れない
 cmd/u環境でもbatはSJISじゃないとダメだった
 
 Vista以降(多分)で上記のようなバグは修正されている模様
 
 で、結局はUTF8を扱うのはWSHに頼るのが良いという結論に達した
 ただし、WSHでUTF16やUTF8ファイルを読み込むにはBOM付きじゃないといけない
 WSHはUTF16で動作しているのでUNICODEにのみある文字もコンソール表示可能
 でも標準入出力やパイプやパラメタでのデータ渡しでUNICODE文字は?に変換される
 
 次に、WSHのサンプルをあげとく
- 
      861デフォルトの名無しさんsage2014/11/14(金) 13:58:33.90 ID:ptj087p2
    
- @if (0)==(0) echo off
 rem for /f %%i in ('cscript //nologo //e:jscript "%‾f0" "read" "utf8.txt"') do echo.%%i
 cscript //nologo //e:jscript "%‾f0" "read" "utf8.txt"
 type "utf16.txt"|cscript //nologo //e:jscript "%‾f0" "write" "xxx.txt"
 echo 追加データだよ|cscript //nologo //e:jscript "%‾f0" "append" "xxx.txt"
 goto :eof
 @end
 
 var args=WScript.Arguments;
 if(args.length<2) WScript.Quit(-1);
 var cmd=args(0), filename=args(1);s='';
 switch(cmd) {
 case 'read':
 var strm = new ActiveXObject("ADODB.Stream");
 strm.Type=2; strm.Charset="utf-8";
 strm.Open(); strm.LoadFromFile(filename); s=strm.ReadText();
 WScript.Echo(s);
 break;
 case 'append':
 case 'write':
 var strm = new ActiveXObject("ADODB.Stream");
 strm.Type=2; strm.Charset='utf-8'; strm.LineSeparator=10; //-1:CDLF 13:CR 10:LF
 strm.Open();
 if(cmd=='append') {strm.LoadFromFile(filename);strm.Position=strm.size;}
 while (!WScript.StdIn.AtEndOfLine) strm.WriteText(WScript.StdIn.ReadLine(),1);
 strm.SaveToFile(filename , 2);
 }
 strm.Close();
 strm=null;
 WScript.Quit(0);
- 
      862デフォルトの名無しさんsage2014/11/15(土) 23:15:58.49 ID:teKkhWvu
    
- tar.gzの中にMakefileが入ってるか調べるコマンドありますか?
- 
      863デフォルトの名無しさんsage2014/11/16(日) 02:03:07.59 ID:04wQ79vu
    
- Unix/Linux系のコマンドアプリや、Cygwinなどを導入する気があるなら
 tar ztf ファイル名.tar.gz | grep Makefile
 みたいな感じになるんだろうと思うが
 標準的なコマンドセットでどうにかしようと思うと苦しいかもなあ…
- 
      864デフォルトの名無しさんsage2014/11/18(火) 11:45:58.55 ID:A18MHYQa
    
- 確かにwshで作れないことはないけど...ってレベルの話だね
 そんなの今更作る気もしないぞ
- 
      865デフォルトの名無しさんsage2014/11/22(土) 09:59:14.41 ID:Dw16glaS
    
- あざっす
 諦めてUNIX使うおw
- 
      866デフォルトの名無しさんsage2014/11/29(土) 02:15:50.80 ID:Xuh6T+Vi
    
- DOS画面をファイルに書き出すバッチはどうやればできますか。
 手動だと全部選択してコピーしエディタでペーストするでできます。
- 
      867デフォルトの名無しさんsage2014/11/29(土) 02:59:42.56 ID:Ewz0tat3
    
- 
      >>866
 http://www.adminweb.jp/command/redirect/
- 
      868デフォルトの名無しさんsage2014/12/02(火) 00:21:15.45 ID:84bfmZQr
    
- 
      >>867
 ありがとうございます。
 やはり実行前に指定するしかないんですかね
 
 ckwやcolorconsoleもダメみたいだし。
 emacs系のエディタ内から実行すると出来そうだが、使っていないし。
- 
      869デフォルトの名無しさんsage2014/12/02(火) 20:52:58.98 ID:eiyTotPn
    
- colorを使うと「"コマンド プロンプト"のプロパティ」の「画面の色」ダブにある16色の内から適宜背景色と文字の色を設定できますが
 この16色の値自体をコマンドによって変更することは可能でしょうか?
- 
      870デフォルトの名無しさんsage2014/12/02(火) 21:44:00.72 ID:HWsQAGF0
    
- reg /?
- 
      871デフォルトの名無しさんsage2014/12/02(火) 22:06:42.39 ID:eiyTotPn
    
- 
      >>870
 回答ありがとうございます。
 vistaでは HKEY_CURRENT_USER¥Console¥cmd にある ColorTable00 などを編集することで色の変更はできました。
 しかしこれだとOSを一度再起動しないと反映されません。
 「"コマンド プロンプト"のプロパティ」上で件の値を変更した時のようにリアルタイムに反映させることはできないでしょうか?
 条件を後から付け足してしまってすみません。
- 
      872デフォルトの名無しさんsage2014/12/03(水) 03:12:46.33 ID:SnuHs4CF
    
- 
      >>871
 WScript.exeでSendKeys
- 
      873デフォルトの名無しさんsage2014/12/03(水) 05:01:32.71 ID:JM1QCjro
    
- 
      >>871
 > OSを一度再起動しないと反映されません。
 start cmd & exit
- 
      874デフォルトの名無しさんsage2014/12/03(水) 11:54:27.24 ID:MC2xUBgH
    
- 
      >>872
 コマンドプロンプトのシステムメニューを出す方法プリーズ
 ALT+Spaceはキーコードを送っても無効化された
- 
      875デフォルトの名無しさんsage2014/12/03(水) 16:28:23.23 ID:JhxMqpE5
    
- 
      >>871,873
 なるほど。ウチのWin7でも HKEY_CURRENT_USER¥Console 内の ColorTable00 などで同様にできたが、
 実際問題そこまでして微妙な色を設定する必要があるものなの?
- 
      876デフォルトの名無しさんsage2014/12/03(水) 16:29:24.71 ID:c+wt1AcT
    
- 
      >>872-873
 どうもありがとうございます。
 Sendkeysについては>>874さんの指摘通り私の能力ではうまくいきませんでした。
 >>873さんの方法で期待通りの動作が確認できました。
 OSごと再起動する必要はなかったんですね。
 どうもありがとうございました。
- 
      877デフォルトの名無しさんsage2014/12/03(水) 16:32:06.22 ID:c+wt1AcT
    
- 
      >>875
 阿呆な試みなんですが、実はコマンドプロンプト上で起動するアクションゲームを作っておりまして
- 
      878デフォルトの名無しさんsage2014/12/04(木) 08:27:43.56 ID:0Qz5Qes/
    
- Rogue?
- 
      879デフォルトの名無しさんsage2014/12/04(木) 09:44:25.42 ID:iacl6LQg
    
- 
      >877
 今の時期にスゲェな。そのタイプのゲームでは市販ソフトにオマケとして収録されていた以下3作を思い出す。
 
 「オレハ ザカリテ ザッザッザッ ゲーム」:PC-8801(SR以降)版シルフィードに収録。
 1キー操作で難しいが爆笑必至の傑作。オールBASIC
 「シルフィード2」:PC-8801(SR以降)版シルフィードに収録。同じくオールBASICで、ジワジワくる。
 「KAX」:PC-9801版サーク1に収録。1キー操作で難しいが爆笑必至の傑作。BGMも素晴らしい。
 後に3D化されてWindows用フリーソフトとしてVectorで公開されたが、現在は入手不可。
- 
      880デフォルトの名無しさんsage2014/12/04(木) 20:46:58.45 ID:qOpb79dH
    
- 
      >>878-879
 一般的なローグ・ライク・ゲームよりももう少し描写が複雑なものを作ってます。
 以前グラディウス(2面まで)をコマンドプロンプト上で再現できたので
 今度はロックマンあたりに挑戦しようかと思っているんです。
 移植性は乏しいですし、ただのお遊びなんですけどね。
 スレの趣旨とずれてしまって恐縮ですがこれにて失礼いたします。
 皆様どうもありがとうございました。
- 
      881名無しさん@そうだ選挙に行こう2014/12/13(土) 22:29:32.94 ID:NyNXg+vj
    
- windows7、1ユーザーなので管理者なのですが、openFilesで管理者権限ないよって言われます。どうしたらいいですか?
 
 で調べたらcmdを明示的に管理者権限で起動しないといけないんですね。
 管理者権限で起動してないcmdで、途中から管理者権限で各種コマンドを実行する方法はありますか?
 UNIXのsuコマンドみたいな。
- 
      882デフォルトの名無しさんsage2014/12/14(日) 01:47:37.60 ID:sl2oQCLD
    
- runas
- 
      883名無しさん@そうだ選挙に行こうsage2014/12/14(日) 14:39:01.52 ID:hkNZShOM
    
- 
      >>881
 Elevation PowerToys
 http://technet.microsoft.com/en-us/magazine/2007.06.utilityspotlight.aspx
 http://blogs.technet.com/b/deploymentguys/archive/2009/01/21/the-elevation-powertoys-and-windows-7.aspx
- 
      884デフォルトの名無しさん2014/12/17(水) 21:30:14.72 ID:0fjBzdT7
    
- 
      >>883
 ありがとうございます。なるほど。IT業界は英語が必須なんですね。
- 
      885デフォルトの名無しさん2014/12/17(水) 22:27:50.62 ID:/7Gz8Bcu
    
- 実行環境:さくらエデイタのCTRL B
 実行場所:D:¥あああ¥いいい.bat
 Z:¥:別のPCのへネットワークドライブ
 
 内容
 CD Z:¥かかか¥ききき¥くくく
 CD
 MOVE さささ.txt わわわ.txt
 MOVE ししし.txt ををを.txt
 
 Z:¥ ではなく D:¥あああ に居るみたいでMOVEが出来ません
 さくら実行だとCDは次の行に影響しないんですか?
 それともさくら側に実行場所を限定する設定とかありますか?
 フルパスで指定するしかないんですかね
- 
      886デフォルトの名無しさんsage2014/12/17(水) 22:45:06.86 ID:LoI71Hb0
    
- 
      >>885
 さくらエディタのことは何も知らないが、
 batと同じだとするなら
 基本は別ドライブへの移動とカレントフォルダの移動は別にする必要あり
 z:
 cd ¥かかか¥ききき
 
 一つのコマンドで実行するには
 cd /d z:¥かかか¥ききき
 又は
 pushd z:¥かかか¥ききき
- 
      887デフォルトの名無しさんsage2014/12/17(水) 23:03:33.67 ID:/7Gz8Bcu
    
- 
      >>886
 即レスありがとうございます。
 ドライブの移動方法があったんですね。助かりました。
 なんでも /? しないとだめですね。勉強になります。
- 
      888デフォルトの名無しさんsage2014/12/18(木) 02:00:07.70 ID:133cQhRc
    
- 
      >>885
 さくらエディタって、中からコマンドを実行できたんだ
 使えそう
- 
      889デフォルトの名無しさんsage2014/12/27(土) 01:20:59.95 ID:DbgVXTUB
    
- 下記のバッチを実行すると
 最後に存在しないファイル名が表示されるんだが
 仕様なのか?
 
 @echo off
 cd /d Z:¥
 dir /s /b *.txt
 echo.
 cd d1
 for %%i in (*.txt) do (
 cd ¥d2
 echo %%‾fi
 )
 
 Z:¥d1¥11.txt
 Z:¥d1¥12.txt
 Z:¥d2¥21.txt
 Z:¥d2¥22.txt
 
 Z:¥d1¥11.txt
 Z:¥d2¥12.txt
- 
      890デフォルトの名無しさんsage2014/12/27(土) 13:47:12.01 ID:yKqTtdqi
    
- GetFullPathName は、カレントドライブとカレントディレクトリを、指定されたファイル名に結合し、指定されたファイルのフルパスとファイル名を判断します。
 また、フルパス名とファイル名を組み合わせた文字列のうち、ファイル名部分のアドレスを計算します。
 この関数は、組み合わせによって得られたパスとファイル名が有効であるかどうか、およびそれらが適切なボリュームの既存のファイルを指しているかどうかを確認しません。
- 
      891デフォルトの名無しさんsage2014/12/27(土) 17:16:01.43 ID:erPfOYAk
    
- よくある間違いだよね
 ファイルのパスを求めるのに使っても目的のDriveとDirがカレントじゃないと
 求めるパスと違うパスが出来上がるってのは
- 
      892デフォルトの名無しさんsage2015/01/04(日) 15:02:18.95 ID:5ILRS96F
    
- 最近知った環境変数 %__CD__% が思いのほか便利だったので自分用メモ。
 cd ..
 set WORKDIR=%CD%
 echo %WORKDIR%¥HOGE.TXT
 だとドライブ直下へ上がった時にバックスラッシュが重なってOops!となりがちだが、
 
 cd ..
 set WORKDIR=%__CD__%
 echo %WORKDIR%HOGE.TXT
 だと場所を問わずバックスラッシュが一つのためパス変更がはかどる。
 %CD%の拡張版のような変数がなぜあるのか、いつ頃からあったのか不明だが地味に便利だったというメモ。
- 
      893デフォルトの名無しさんsage2015/01/05(月) 16:43:15.11 ID:1CYbqF+q
    
- Undocumented Dynamic variables (read only)
 %__APPDIR__% The directory path to the current application .exe,
 terminated with a trailing backslash. - forum thread.
 %__CD__% The current directory, terminated with a trailing backslash.
 %=C:% The current directory of the C: drive.
 %=D:% The current directory of the D: drive if drive D: has been accessed
 in the current CMD session.
 %DPATH% Related to the (deprecated) DPATH command.
 %=ExitCode% The hex value of the last return code set by EXIT /B
 %=ExitCodeAscii% The ASCII value of the last return code set
 by EXIT /B if greater than 32.
 %FIRMWARE_TYPE% The boot type of the system: Legacy
 ,UEFI,Not implemented ,Unknown Windows 8/2012.
 %KEYS% Related to the (deprecated) KEYS command.
- 
      894デフォルトの名無しさんsage2015/01/06(火) 14:53:10.69 ID:8K/E7hGs
    
- 
      >>892
 これ、win8 だけなのかな
 win7 はダメだった
- 
      895デフォルトの名無しさんsage2015/01/06(火) 19:55:01.33 ID:FMw5vc/A
    
- Windows7、Windows2003 でもできたよ (XPが手元にないのでXPは不明)
 アンダーバーが前後2つというのに気が付かず、
 最初は %__CD__% を %_CD_% と一個ずつ少なく間違えて?な状態だったけどw
- 
      896デフォルトの名無しさんsage2015/01/07(水) 01:04:09.08 ID:bzmB4Ci+
    
- %=D:%は一旦そのドライブに移動(アクセス)してないと使えないんだな
 あと、%=ExitCode%も同じく外部プログラムからの復帰値がないとダメ
 現在これらのどれが定義されているのか見るには
 setじゃダメで、set ""で見られる
 最初に表示される=::=::¥が何なのかは良く分からないけど
- 
      897デフォルトの名無しさんsage2015/01/07(水) 01:06:27.82 ID:bzmB4Ci+
    
- 
      >>895
 XPでも同じく使えた
- 
      898デフォルトの名無しさんsage2015/01/08(木) 10:35:12.35 ID:5weP5dKV
    
- エクスプローラ→ファイル→コマンドプロンプトを開く
 で、下記を入力
 echo %CMDCMDLINE%
 すると
 "cmd.exe" /s /k pushd "???"
 となる。カレントディレクトリは pushd で移動してるらしい。
 じゃあ、popd してみると何処に行くか見てみたら、
 システムと無関係なディレクトリに飛ぶ事がある。
 何故だろう?
- 
      899デフォルトの名無しさんsage2015/01/08(木) 21:51:12.10 ID:M0EXKb7n
    
- ルールでは親プロセスのを引き継ぐんじゃね?
- 
      900デフォルトの名無しさんsage2015/01/08(木) 23:50:30.40 ID:eI1wghCW
    
- 
      >>898
 > カレントディレクトリは pushd で移動してるらしい。
 
 単なる cd ではドライブを変えられないから
 
 > システムと無関係なディレクトリに飛ぶ事がある。
 
 c:¥Windows¥System32 (cmd.exe がある場所) じゃないの?
- 
      901デフォルトの名無しさんsage2015/01/09(金) 00:02:10.57 ID:CiCc09+g
    
- 
      >>895
 サンキュです
 __ はアンダーバー二つでしたか、どうりでダメだったはずだ
 win7でも出来ました。
 
 しかし旅館増設の迷路みたいな機能拡張だな
 担当毎に勝手に増設している感じ
 もっとわかりやすくすっきり拡張する方法はなかったのか
- 
      902デフォルトの名無しさんsage2015/01/09(金) 00:57:56.11 ID:iXoT5Trb
    
- アンダーバーで始まる(しかも二つ)変数はシステム変数であって
 通常の機能拡張ではないし、ずっと前からあった機能だし
- 
      903デフォルトの名無しさんsage2015/01/09(金) 01:19:17.83 ID:iZGrw0WV
    
- 
      >>900
 俺の環境ではなぜか
 C:¥Program Files¥Autodesk¥Inventor 2013¥Bin
 に飛ぶ。
 何なんだ?
 このフォルダで何もした覚えがない。cmd.exeも無い。
 echo %ComSpec%
 とすると
 C:¥Windows¥system32¥cmd.exe
 環境はWin8
- 
      904デフォルトの名無しさんsage2015/01/09(金) 01:24:05.06 ID:wr1/NDht
    
- 
      >>902
 ずっと前って言われてもWin98には無いぞ
- 
      905デフォルトの名無しさんsage2015/01/09(金) 01:48:01.84 ID:iXoT5Trb
    
- 
      >>904
 そりゃすまんかった
 なんせwin7でどうとか言ってた奴に対してのレスだからwin7に対してずっと前からだと言ったまで
- 
      906デフォルトの名無しさんsage2015/01/09(金) 01:49:58.35 ID:iXoT5Trb
    
- 
      >>905
 まあ、そもそもwin9xにはcmd.exe無かったと思うんだけどね
- 
      907デフォルトの名無しさんsage2015/01/09(金) 07:11:23.15 ID:Fx5/Rr0k
    
- 
      >>901
 > もっとわかりやすくすっきり拡張する方法はなかったのか
 
 WSH なり PowerShell 使えってことだろ
- 
      908デフォルトの名無しさんsage2015/01/09(金) 19:26:43.49 ID:urUkKmSq
    
- 
      >>903
 Inventor は開発環境を構築する類の製品みたいだし、
 おそらくシェルの拡張がされていてそれが影響しているんじゃね?
 先に Inventor の設定を読込んでからプロンプトを立上げていると予想
 多分以下のレジストリの辺りにそれっぽいものがあると思う
 HKEY_CLASSES_ROOT¥Directory¥shell¥cmd¥command
 HKEY_CLASSES_ROOT¥Folder¥shell¥cmd¥command
- 
      909デフォルトの名無しさんsage2015/01/10(土) 06:15:21.78 ID:zqsBeetH
    
- 
      >>908
 レスさんくす。それっぽいのは無かった。
 
 >reg query HKCR¥Directory¥shell¥cmd¥command /s
 
 HKEY_CLASSES_ROOT¥Directory¥shell¥cmd¥command
 (既定) REG_SZ cmd.exe /s /k pushd "%V"
 
 >reg query HKCR¥Folder¥shell¥cmd¥command /s
 エラー: 指定されたレジストリ キーまたは値が見つかりませんでした
 
 良く分からんが、スレチなのでこれで終わりにします
- 
      910デフォルトの名無しさんsage2015/01/11(日) 20:18:22.42 ID:8AiuWit+
    
- Win10 のコマンドプロンプト
 プロパティに Experimental タブが有るそうだが
 どんなもの?
- 
      911デフォルトの名無しさんsage2015/01/11(日) 22:53:48.18 ID:RJYFXyqR
    
- 
      >>910
 GIGAZINE記事でよければ
 http://gigazine.net/news/20141001-windows10-command-prompt/
- 
      912デフォルトの名無しさんsage2015/01/11(日) 23:45:14.50 ID:8AiuWit+
    
- ありがとう
- 
      913デフォルトの名無しさんsage2015/01/12(月) 08:28:33.82 ID:tHuTLLTi
    
- 
      >>904
 Win98より前のWinNT3.51で試してみた
 昔は%cd%のほうが無かったようだ
 
 Microsoft(R) Windows NT(TM)
 (C) Copyright 1985-1996 Microsoft Corp.
 コマンド プロセッサ拡張機能が有効になりました
 
 Z:¥hoge>echo %__cd__%
 Z:¥hoge¥
 
 Z:¥hoge>echo %cd%
 %cd%
 
 Z:¥hoge>dir cmd.exe
 
 95/12/12 07:02 163,808 cmd.exe
 1 個のファイル 163,808 バイト
- 
      914デフォルトの名無しさんsage2015/01/14(水) 01:33:33.35 ID:XOSZNhIv
    
- そういや確かにDOS時代は%cd%や%errorlevel%なんて環境変数は無かった
- 
      915デフォルトの名無しさんsage2015/01/14(水) 23:13:57.79 ID:QhrJ6mJr
    
- 9xの cd ... は好き
- 
      916デフォルトの名無しさんsage2015/01/15(木) 01:04:20.76 ID:vh82IFS/
    
- %date%も無かったなあ
- 
      917デフォルトの名無しさんsage2015/01/15(木) 02:48:46.81 ID:1HoxXkR7
    
- AとBという2つのディレクトリがあって
 ディレクトリBには読み取り専用属性を設定してるんですが
 RobocopyでディレクトリA内のファイルとサブディレクトリをBにコピーすると
 Bの読み取り専用属性が解除されてしまうんですが解除させない方法は無いんでしょうか?
- 
      918デフォルトの名無しさんsage2015/01/15(木) 05:41:26.77 ID:47ipxJ/H
    
- なぜここできくんだ
- 
      919デフォルトの名無しさんsage2015/01/15(木) 07:48:31.81 ID:ZQKHF8i1
    
- フォルダとディレクトリは別物だと思ってる爺だから
- 
      920デフォルトの名無しさんsage2015/01/16(金) 08:29:49.85 ID:obgM8cFp
    
- 一応、実際に別物だよ
 ディレクトリってのはファイルシステム上での概念
 フォルダってのはOSやデスクトップ環境での概念だからな
 
 例えば、Windowsのデスクトップは
 全ユーザ共有のデスクトップディレクトリと
 ユーザ個別のデスクトップディレクトリを併せて
 1つのフォルダとして表示してる
- 
      921デフォルトの名無しさんsage2015/01/16(金) 08:32:43.08 ID:obgM8cFp
    
- あ、いやOSはディレクトリか…
 ともかくレイヤが違うって感じ
- 
      922デフォルトの名無しさんsage2015/01/16(金) 08:40:46.86 ID:HgpWNsfz
    
- 
      頭悪い奴だな(笑)
 >>917がレイヤだ何だの話をしてると思うのか?
- 
      923デフォルトの名無しさんsage2015/01/16(金) 11:11:17.33 ID:rD0jigTp
    
- 属性付け直しじゃダメなの?
 attrib +r B & attrib +r B¥* /S /D
- 
      924デフォルトの名無しさんsage2015/01/16(金) 11:47:10.39 ID:rD0jigTp
    
- ああ、これかな?
 robocopy A B /nodcopy
- 
      925デフォルトの名無しさんsage2015/01/16(金) 21:11:44.51 ID:+KevtdCt
    
- フォルダのRO属性はwindowsがほかの用途で使っちゃってるからな・・・
 
 無駄にRO属性つけると遅くなるぞ
- 
      926デフォルトの名無しさんsage2015/01/16(金) 23:20:45.68 ID:obgM8cFp
    
- 
      >>922
 ん?>>919って>>917の話をしてたの?
 確かに唐突な話ぶりだなとは思ったが
- 
      927デフォルトの名無しさんsage2015/01/22(木) 20:27:03.52 ID:WJB7fWww
    
- 下記のバッチを実行したら i=3 まで表示されて終了する
 
 @echo off
 prompt $g
 for /L %%i in (1,1,100) do (
 echo i=%%i
 if %%i == 3 goto :x
 )
 exit
 :x
 echo Completed
 pause
 
 でも、1行目を echo on にしたら
 バカみたいに 100回ループしてるんだが
 こういう仕様なの?
- 
      928デフォルトの名無しさんsage2015/01/22(木) 20:49:15.59 ID:c2QCAyIs
    
- その100回ループを見たとき「iの値だけの行」は本当に全部あるかい?
 forコマンドの内容は100回分に展開はされるのよ(echo off 時でも展開自体はされてる)
 その中で、実際にコマンドの呼び出しにありついてるのは途中までって話
- 
      929デフォルトの名無しさんsage2015/01/22(木) 21:02:38.14 ID:PSdfLgXI
    
- Windows XP Home Editionでのサービスパック導入状態を確認できる方法はありますか?
 Professionalであれば
 WMIC OS Get ServicePackMajorVersion /Value
 で取得出来るはずですが、Homeでは出来ないようなので…
- 
      930デフォルトの名無しさんsage2015/01/22(木) 21:29:29.69 ID:WJB7fWww
    
- systeminfo は?
 XPが手元に無いんで分からんけど
- 
      931デフォルトの名無しさんsage2015/01/22(木) 21:34:48.73 ID:PSdfLgXI
    
- 
      >>930
 Home Editionにはsysteminfoもないんです
- 
      932デフォルトの名無しさんsage2015/01/23(金) 03:53:37.61 ID:b32Rf+9g
    
- レジストリ見れば分かるし、公式な資料やレジストリを見るためのコマンドもあるけど、そーいうのは求めて無いわな。
 (万が一求めてるならMSDNかTechNet漁れ)
- 
      933デフォルトの名無しさんsage2015/01/28(水) 19:46:09.83 ID:gZ7f8HvS
    
- すいません。教えて下さいませ
 
 start "" "C:¥Program Files¥HIBUN-AE¥bin¥svdcrfmt.exe" /D "¥P:"
 
 mkdir P:¥etc
 
 というバッチファイル *.bat を作ったんですが、
 (RAMディスク¥P:を秘 文フォーマットなるものでフォーマットしてディレクトリを作成)
 その秘 文フォーマット実行する svdcrfmt.exe に、
 「コマンドライン引数の指定に誤りがあります。コマンドライン引数の設定を
 見直して再度実行下さい。」 メッセージID:SFCF_MSG_002
 と言われてエラーで止まります。
 ディレクトリ(P:のRAMディスクそのもの)を指定する引数を教えて頂けましたら幸いです
- 
      934デフォルトの名無しさんsage2015/01/28(水) 22:18:28.08 ID:JxueOrGN
    
- 
      >>933
 ハイソルに聞けよ
- 
      935デフォルトの名無しさんsage2015/01/28(水) 22:26:07.91 ID:1tc01pIy
    
- 
      >>933
 そのソフトのメーカーなりに確認がベスト
 /Dのあとにドライブ指定とかだろうなと推測するけど、
 引数は/P:でいいの?実はP:だけでいけたりしない?
- 
      936デフォルトの名無しさんsage2015/01/28(水) 22:36:49.03 ID:gZ7f8HvS
    
- 
      >>934
 ハイソルなんじゃそら、と思ったらHISOLですね
 聞けませんすいません
 
 >>935
 その辺何度か試行錯誤した気はしますが、もう一回試してみます
 やっぱり聞けませんすいません
- 
      937デフォルトの名無しさんsage2015/01/28(水) 23:38:29.76 ID:pjK9E+QZ
    
- 
      >>936
 「start ""」を消すのはダメ?
-  275KB (282595Byte)
- dummy_for_searchRef