_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/


[.cmd] バッチファイルスクリプト %10 [.bat]
http://toro.2ch.net/test/read.cgi/tech/1374205515/l50
http://peace.2ch.net/test/read.cgi/tech/1374205515/l50
2ちゃんねる *スマホ版* *掲示板に戻る* 全部 1- 最新50
* このスレッドは過去ログ倉庫に格納されています.
[.cmd] バッチファイルスクリプト %10 [.bat]

  1 :デフォルトの名無しさん:2013/07/19(金) NY:AN:NY.AN
  拡張子が .cmd または .bat のバッチファイルのスクリプティング(プログラミング)に関わる.
  質問, テクニック(JScript, Perl等の埋め込みなど含む), 関連情報のためのスレです.
  [*] 何でも無理矢理バッチでやろうとせず, WSH等の使用も検討しましょう.
  前スレ.
  [.cmd] バッチファイルスクリプト %9 [.bat]
  http://toro.2ch.net/test/read.cgi/tech/1335015478/
  それ以前の過去スレ.
  %8   http://toro.2ch.net/test/read.cgi/tech/1315844420/
  %7   http://hibari.2ch.net/test/read.cgi/tech/1298873550/
  %6   http://hibari.2ch.net/test/read.cgi/tech/1277465356/
  %5   http://pc12.2ch.net/test/read.cgi/tech/1242268171/
  %4   http://pc12.2ch.net/test/read.cgi/tech/1229955189/
  %3   http://pc11.2ch.net/test/read.cgi/tech/1217860043/
  %2   http://pc12.2ch.net/test/read.cgi/tech/1197881068/
  %1   http://pc11.2ch.net/test/read.cgi/tech/1178281991/

  2 :デフォルトの名無しさん:2013/07/19(金) NY:AN:NY.AN
  うんちっち.

  3 :デフォルトの名無しさん:2013/07/19(金) NY:AN:NY.AN
  @echo ^>^>1乙.

  4 :デフォルトの名無しさん:2013/07/20(土) NY:AN:NY.AN
  wshもここでええのんか?

  5 :デフォルトの名無しさん:2013/07/20(土) NY:AN:NY.AN
  お前ら, wsh使ってますか? Part8

  6 :デフォルトの名無しさん:2013/07/21(日) NY:AN:NY.AN
  C:\Users\user\desktop
  の時にdesktopだけを表示したいのですがよい方法はありませんか.

  7 :デフォルトの名無しさん:2013/07/22(月) NY:AN:NY.AN
  「set /p hizuke=日付を入力して下さい:」
  とやると.
  「日付を入力して下さい:」
  と出ますが, この時に.
  「日付を入力して下さい:2013/07/22」
  のように今日の日付をデフォルト値として表示出来ないでしょうか?
  思いつきで.
  「set /p hizuke=日付を入力して下さい:<echo %date%」
  とかやってみましたがもちろんダメでした・・・.

  8 :デフォルトの名無しさん:2013/07/23(火) NY:AN:NY.AN
  set /p hizuke="日付を入力して下さい:%date%"

  9 :デフォルトの名無しさん:2013/07/23(火) NY:AN:NY.AN
  空入力でデフォルト値.
  set hizuke=%date%
  set /p hizuke=日付を入力して下さい:%hizuke%

  10 :7:2013/07/23(火) NY:AN:NY.AN
  ありがとうございます.
  ただ言い忘れていましたが, 表示したデフォルト値をキーボードで変更できるようにしたいのです.
  例えば2013/07/22と表示されたら最後の2を消して5にしたりといった具合にです.

  11 :デフォルトの名無しさん:2013/07/23(火) NY:AN:NY.AN
  schtasksで長いタスク名を確認する方法はありますでしょうか?
  例えば.
  schtasks /create /tn "メモ帳を起動してやるぞ!こんちくしょう!" /tr
  c:\windows\system32\notepad.exe/sc daily /st 23:00:00
  と入力して「メモ帳を起動してやるぞ!こんちくしょう!」というタスク名のタスクを作成します.
  すると,
  schtasks /query
  と入力して先ほど作ったタスクを表示させるとタスク名が途切れて表示されてしまいます.
  これでは途切れていない正しいタスク名がわからず, タスクを削除する時などにタスク名を指定できません.
  タスクスケジューラでもPowerShellでもいいので途切れていない正しいタスク名を確認する方法を.
  知っている方がいましたら教えて下さい.

  12 :デフォルトの名無しさん:2013/07/24(水) NY:AN:NY.AN
  ありません.

  13 :デフォルトの名無しさん:2013/07/24(水) NY:AN:NY.AN
  >>11
  へー最近はそんなことになってるんだねえ.
  XPだとタスク名は欠けることなく全部出る.
  何かオプションスイッチがあるんでないのかなあ.
  まあ回避手段としては, タスクの実体は(XPの場合だと)tasksフォルダ内のファイル(xxx.job)なんで直接ファイル名を漁るとかかな.
  for /f "tokens=* delims=" %%i in ('dir /b "%systemroot%\tasks\*.job"')do echo
  %%~ni

  14 :13:2013/07/24(水) NY:AN:NY.AN
  ヘルプ見たら.
  schtasks /query /fo list
  または.
  schtasks /query /fo csv
  で表示できるんでないかな.

  15 :11:2013/07/24(水) NY:AN:NY.AN
  >>13-14
  /foオプションで出せるんですね. 知りませんでした・・・.
  "%systemroot%\tasks"フォルダに保存されるというのも初めて知りました.
  これはこれで使い道が色々ありそうなので覚えておきます.
  助かりました. どうもありがとうございます.
  (実は家のPCはXP-Homeでschtasks無いので試すのは明日会社でですが・・・(笑))

  16 :デフォルトの名無しさん:2013/07/24(水) NY:AN:NY.AN
  3つの.exe ファイルが有るんですが, 1つを実行するBATファイルを作りたいです.
  どうすればいいですか?

  17 :デフォルトの名無しさん:2013/07/25(木) NY:AN:NY.AN
  if

  18 :15:2013/07/25(木) NY:AN:NY.AN
  今日会社のPC(Win7)で/foオプション使ってうまくいきました.
  しかしWin7だとタスクのファイルは"%systemroot%\system32\tasks"フォルダに作成されるようです.
  OSの種類によってパスが変わるなんてめんどうな仕様ですよね・・・(泣)

  19 :デフォルトの名無しさん:2013/07/26(金) NY:AN:NY.AN
  仕様なんだからしようがない.

  20 :デフォルトの名無しさん:2013/07/26(金) NY:AN:NY.AN ?2BP(0)
  僕のpcにあるテキストファイルを全てusbにコピーしたいです.
  すぐにコピーしてペーストすれば使えるbatのコマンドを教えてください!

  21 :デフォルトの名無しさん:2013/07/26(金) NY:AN:NY.AN
  @echo off
  echo pcにあるテキストファイルを全てusbにコピーしました!!!
  exit /b 0

  22 :デフォルトの名無しさん:2013/07/26(金) NY:AN:NY.AN
  ありがとう!

  23 :デフォルトの名無しさん:2013/07/26(金) NY:AN:NY.AN
  >>20
  まず, ファイル名を列挙する.
  dir /s /b > deltext.bat
  つぎに, ファイル名の前に, DELコマンドを付記して, バッチファイルに保存.
  バッチファイルを実行.
  バッチファイルの例.
  REM deltext.bat
  DEL C:\work\05_06_07_08.txt
  DEL C:\work\068.txt
  DEL C:\work\099.txt
  DEL C:\work\1.BAK
  DEL C:\work\1.bat
  DEL C:\work\1.ini
  DEL C:\work\1.rb

  24 :デフォルトの名無しさん:2013/07/26(金) NY:AN:NY.AN
  >>20
  テキストファイルかどうか, テキストエディタで開いてみないとわからない.

  25 :デフォルトの名無しさん:2013/07/26(金) NY:AN:NY.AN
  >>23
  DELコマンドじゃなくて, COPYコマンドだ. COPYコマンドなら, どこに送るかかかなければならない.

  26 :デフォルトの名無しさん:2013/07/26(金) NY:AN:NY.AN
  もうねます.

  27 :デフォルトの名無しさん:2013/07/26(金) NY:AN:NY.AN
  誤ってDELコマンドでファイルを削除した場合,
  undeleteという英語版のソフトウェアで復旧できるかもしれない.
  どれがいいのかしらない.

  28 :デフォルトの名無しさん:2013/07/26(金) NY:AN:NY.AN
  MOVEコマンドで, ひどいめにあったことがある. MOVEコマンドは, 要注意.

  29 :デフォルトの名無しさん:2013/07/26(金) NY:AN:NY.AN
  ワイルドカードの指定が短いファイル名の方にも効いてしまう問題って.
  Win7あたりで解消したんだっけ?

  30 :デフォルトの名無しさん:2013/07/27(土) NY:AN:NY.AN ?2BP(0)
  ではpc内のデータをすべて削除する場合はどうしたら?

  31 :デフォルトの名無しさん:2013/07/27(土) NY:AN:NY.AN
  iso2bin.exe isoをbin 形式に変換するファイルを見つけたんですが.
  使い方は,
  コマンドプロンプト -> cd c:\場所 -> iso2bin track03.bin track01.iso
  コマンドプロンプを呼び出さず簡略化したいんですけどどうすればいいですか?
  D&D しても無理みたいです・・・orz

  32 :デフォルトの名無しさん:2013/07/27(土) NY:AN:NY.AN
  バッチファイル経由でD&D する.

  33 :デフォルトの名無しさん:2013/07/28(日) NY:AN:NY.AN
  >>29
  仕様は解消したりしないよ.
  自分が短いファイル名を作るからだろ. 自業自得ってもんだ.
  作らなきゃいいんだよ.

  34 :17:2013/07/28(日) NY:AN:NY.AN
  ちょっと記述が間違ってたので一応訂正しときます.
  Win7ではSchtasksで作成したタスクはファイルとして作成されないようです.
  "%systemroot%\tasks"フォルダも.
  "%systemroot%\system32\tasks"フォルダも見ましたが自分が作成したタスクは見当たりません.
  "dir /s/b C:\*.job"ってコマンド叩いても出てきません.
  コマンドで"Schtasks /query"を叩くともちろん出てきます.
  そういう仕様に変わったのかな?まあ"Schtasks /query"で確認できるので困りませんが.

  35 :デフォルトの名無しさん:2013/07/28(日) NY:AN:NY.AN
  [上矢印]は>>17ではなく>>18でした. すみません.

  36 :デフォルトの名無しさん:2013/07/28(日) NY:AN:NY.AN
  forコマンドで文字列置換はできないのでしょうか?
  下記の<望む結果>を得たいのですが.
  下のコマンドでも駄目でした.
  for /f %i in ('type test.txt') do echo %i:*:=%
  <test.txtの内容>
  ID:100
  名称:あああ.
  価格:5000
  ID:200
  名称:いいい.
  価格:8000
  <望む結果>
  100
  あああ.
  5000
  200
  いいい.
  8000

  37 :デフォルトの名無しさん:2013/07/28(日) NY:AN:NY.AN
  for /f "delims=: tokens=2" %i in ('type test.txt') do echo %i

  38 :36:2013/07/29(月) NY:AN:NY.AN
  >>37
  でけました------っ!!
  おありがとうございます!
  このように書くのですね.
  勘違いして遅延展開とかいうのを調べてました・・・(^_^;)

  39 :デフォルトの名無しさん:2013/07/31(水) NY:AN:NY.AN
  すみません. 教えてください.
  <apply.bat>
  中身[下矢印]
  @echo off
  dism.exe /apply-image /image file:XXX.wim /index:1 /applydir:C:\
  としておきます.
  しかしこれだとバッチ内で指定するwimファイル名を決めうちにしないといけません.
  コマンドプロンプトから.
  apply.bat Image1.wim
  で実行すれば, バッチ内で指定されるファイル名がImage1.wimになり,
  apply.bat Win7.wim
  ならWin7.wimが展開されるようにしたいのですが, 何か良い方法はないでしょうか?

  40 :デフォルトの名無しさん:2013/07/31(水) NY:AN:NY.AN
  ファイルを指定する所にこんなの.
  "file:%~1"

  41 :デフォルトの名無しさん:2013/07/31(水) NY:AN:NY.AN
  >>40
  ありがとうございました!
  おかげさまでうまく行きました!

  42 :デフォルトの名無しさん:2013/07/31(水) NY:AN:NY.AN
  >>41
  いいってことよ.

  43 :デフォルトの名無しさん:2013/08/04(日) NY:AN:NY.AN
  バッチファイルから文字列をエコーしてファイルに流し込んで.
  スクリプトを作成・実行ということをしているのですが,
  リダイレクト先のファイル行頭にスペースができてしまいます.
  echo;>%~n0.vbs Set fso = CreateObject("Scripting.FileSystemObject")
  echo;>>%~n0.vbs Set regEx = New RegExp
  echo;>>%~n0.vbs Set inFile = fso.OpenTextFile("%CD%\%~n0.txt")
  中略.
  cscript //nologo %~n0.vbs
  と%~n0.vbsへ流し込むと, 以下のように先頭にスペースが空きます.
  * Set fso = CreateObject("Scripting.FileSystemObject")
  * Set regEx = New RegExp
  * Set inFile = fso.OpenTextFile("C:\home\work\20130804-145429\test.txt")
  [上矢印]このスペース([白四角]で表記)をなくしたいのです.
  実用上は問題ありませんが, 回避が可能であればご教示願いたいです.
  お分かりの方居りましたらよろしくお願いいたします.

  44 :デフォルトの名無しさん:2013/08/04(日) NY:AN:NY.AN
  echo Set fso = CreateObject("Scripting.FileSystemObject")>%~n0.vbs
  echo Set regEx = New RegExp>>%~n0.vbs
  echo Set inFile = fso.OpenTextFile("%CD%\%~n0.txt")>>%~n0.vbs
  こう?
  というか, そんな書き方できたんだ・・・・・・.

  45 :デフォルトの名無しさん:2013/08/04(日) NY:AN:NY.AN
  >>44さんできました!
  echo;Set regEx = New RegExp>>%~n0.vbs
  として解決しました. ありがとうございます.
  リダイレクト方法はいくつかあるようですね.
  本来ならカッコで囲んでひとまとめにするがシンプルなのでしょう.
  (
  echo;ほげ.
  echo;ほげ.
  )>"%~n0.txt
  この方法は今回はバッチの前後の関係から制約があるため, このような方法でやってました.
  お答えいただきまして, 素早い対応ありがとうございました.

  46 :43:2013/08/04(日) NY:AN:NY.AN
  >>44さんへ.
  質問時に書き込んだ方法ですが, まるっきりの自己流だったようです.
  参考にしたサイトを見直してみたら, 全然違ってました. 昔の記憶をたよりに適当に書いてたようです.
  混乱させてすみませんでした.
  ちなみにこのサイトです.
  「全般/ファイルディスクリプタとリダイレクト - CMD.EXE TIPs」
  URLが長いので上のキーワードで検索してください. 有名どころですが一応. では失礼します.

  47 :デフォルトの名無しさん:2013/08/04(日) NY:AN:NY.AN
  >>44
  > というか, そんな書き方できたんだ・・・・・・.
  俺も知らんかった・・・.
  で, 試しにこうやってみると一応これでも行頭のスペースはなくなるな.
  echo>%~n0.vbs Set fso = CreateObject("Scripting.FileSystemObject")
  echo>>%~n0.vbs Set regEx = New RegExp
  echo>>%~n0.vbs Set inFile = fso.OpenTextFile("%CD%\%~n0.txt")
  つまり>>44はechoの直後にセミコロンとスペースが続いてからSetがあるように.
  解釈されてリダイレクトされてたんだろう.

  48 :デフォルトの名無しさん:2013/08/04(日) NY:AN:NY.AN
  > つまり>>44はechoの直後にセミコロンとスペースが続いてからSetがあるように.
  >>43と間違えた.

  49 :デフォルトの名無しさん:2013/08/04(日) NY:AN:NY.AN
  echo.>hoge.txt とか echo;>hoge.txt
  ってやったら空改行が出力されるのと同じ原理なのかな.

  50 :デフォルトの名無しさん:2013/08/04(日) NY:AN:NY.AN
  >%~n0.vbs echo;Set fso = CreateObject("Scripting.FileSystemObject")
  だな.

  51 :デフォルトの名無しさん:2013/08/04(日) NY:AN:NY.AN
  いつからかコマンドプロンプトで日本語が, ***って表示されるようになっちゃったんですけど.
  どうやって直せばいいんですか?
  ググって出てくるコードページを変えたりフォントを変えるのを試しても戻りませんでした.
  XPです.

  52 :デフォルトの名無しさん:2013/08/05(月) NY:AN:NY.AN
  >>51
  cmd.exeを再インストールするか諦めてCygwinとか使えばいいんじゃ?
  後はWin再インスコ.

  53 :デフォルトの名無しさん:2013/08/05(月) NY:AN:NY.AN
  >>51
  レジストリ.
  HKEY_CURRENT_USER\Console
  を削除してみろ.
  念のためバックアップしてからね.

  54 :デフォルトの名無しさん:2013/08/18(日) NY:AN:NY.AN
  = を含む文字列を = を含む文字列で置換するのに良い方法無いでしょうか?
  事前にIF使った総当りで入れ替えておく方法は何とかできたのですが.
  下記の記述方で使えそうなエスケープなどあればと思いまして.
  :: A=B を B=A に置換.
  set test=%test:A=B=B=A%

  55 :デフォルトの名無しさん:2013/08/18(日) NY:AN:NY.AN
  >>53
  遅くなりましたが.
  この方法で復活しました.
  ありがとうございました!

  56 :デフォルトの名無しさん:2013/08/18(日) NY:AN:NY.AN
  BをCに蛙.
  AをBに蛙.
  CをAに蛙.

  57 :デフォルトの名無しさん:2013/08/18(日) NY:AN:NY.AN
  >>56
  つまり, ループ内で遅延展開を用いた入れ替えをやれってことっすね!
  >>54
  vbsでregexpしちゃいなよ.

  58 :デフォルトの名無しさん:2013/08/19(月) NY:AN:NY.AN
  頭が遅延してんの?

  59 :デフォルトの名無しさん:2013/08/19(月) NY:AN:NY.AN
  >>56-57
  レスどうもです, やっぱ無理ですかぁ.

  60 :デフォルトの名無しさん:2013/08/19(月) NY:AN:NY.AN
  power shellの話ははどこで話せばよいの?
  ざっと見たけどスレがないみたいなんだけど・・・.

  61 :デフォルトの名無しさん:2013/08/19(月) NY:AN:NY.AN
  Windows PowerShell Part4

  62 :デフォルトの名無しさん:2013/08/28(水) NY:AN:NY.AN
  Javaみたいなコンパイルに失敗したらecho %errorlevel%で1って出力されるような言語で.
  わざとエラーがでるコードTest.javaを用意して.
  batファイルに.
  javac Test.java
  echo %errorlevel%
  って書いてコマンドプロンプトから実行しても%errorlevel%が表示されません.
  batファイルを実行した後に, 手入力でecho %errorlevel%て打つと1って表示されます.
  どうやってbatファイルからエラーレベルを出力できますか?

  63 :デフォルトの名無しさん:2013/08/29(木) NY:AN:NY.AN
  うそでしょう.

  64 :デフォルトの名無しさん:2013/08/29(木) NY:AN:NY.AN
  echo %erorlevel%
  とか.

  65 :デフォルトの名無しさん:2013/08/29(木) NY:AN:NY.AN
  >>62
  javacって使ったことないけど復帰値として値を帰さずに環境変数にセットしてるのか.
  まあ, そういう場合の俺の知識じゃ良い解決策はない.
  続きは別のbatプログラムにして, 当batではタスク登録して終了し, 後はタスクにその別のbatを起動してもらう方法ぐらいかな.
  (bat中から新たに子プロセスcmd.exeを起動しても引き継ぐ環境はそれを実行前の環境なのでダメだね)
  例.
  c:\x.bat
  ----
  javac Test.java
  schtasks /create /tn test-java /sc onidle /i 1 /ru user-name /rp
  user-password/tr c:\y.bat
  schtasks /run /tn test-java
  c:\y.bat
  -----
  schtasks /delete /f /tn test-java
  続きの処理を記述.

  66 :デフォルトの名無しさん:2013/08/29(木) NY:AN:NY.AN
  >>65
  呼び出し元プロセスの環境変数は普通変えれんぞ.
  というかタスク作ってしまったら何も情報伝わらないし, その方法意味あるんか?
  なんとなく,
  〜(
  javac Test.java
  echo %errorlevel%
  )
  ってなってるとか, Typoがあるとか, そういうのの方が怪しい気がする.
  一番確実な対処はIF ERRORLEVEL 1とかの擬似環境変数ではない組み込み機能使って判定する方法だと思う.

  67 :デフォルトの名無しさん:2013/08/29(木) NY:AN:NY.AN
  >>66
  寝ぼけてたね.
  確かに意味が無いな.
  これはインストーラなどでPATH環境変数が変化した場合に有効な手段だった.

  68 :67:2013/08/29(木) NY:AN:NY.AN
  寝ぼけてたけど, 間違ったのは.
  動作確認のために, コントロールパネルのシステムからユーザー環境変数を追加設定してやってたため.
  [下矢印]
  この場合環境変数の設定値が反映されるにはcmd.exeを起動しなおさないと反映されないので.

  69 :デフォルトの名無しさん:2013/08/29(木) NY:AN:NY.AN
  >>68
  なるほど・・・現在の環境ではなくユーザの環境を読ませる一手間か.
  start /Iもatもユーザの環境を読み直さないし, runasはスマートカードかパスワード入力が必要になってしまうんだな.
  タスクはrunasと同等だし環境読み直すのも理解できるけど, エクスプローラからcmd起動したときとかはどういう挙動してんだろうコレ?

  70 :デフォルトの名無しさん:2013/08/29(木) NY:AN:NY.AN
  すいませんsetlocal EnableDelayedExpansionで取得できました.
  いまいちどうして取れたかわかりませんが.

  71 :デフォルトの名無しさん:2013/08/29(木) NY:AN:NY.AN
  今時なぜコマンドプロンプトなんですか?
  powerShellを使わない理由はなぜでしょうか?

  72 :デフォルトの名無しさん:2013/08/29(木) NY:AN:NY.AN
  >>71
  コマンドプロンプトで足りるような用途にまで.
  PowerShellを使わなきゃならん理由は何だ?
  まさか, 自慢話を始めようとしてるのではないだろうな?

  73 :デフォルトの名無しさん:2013/08/29(木) NY:AN:NY.AN
  >>70
  うそでしょう.

  74 :デフォルトの名無しさん:2013/08/29(木) NY:AN:NY.AN
  >>73
  66で指摘されてるようなやり方してたんじゃね.
  「すいませんsetlocal EnableDelayedExpansion(して,
  %errorlevel%を!errorlevel!にしたら)で取得できました」
  だと普通によくあるミス.

  75 :デフォルトの名無しさん:2013/08/29(木) NY:AN:NY.AN
  >>74
  すいません書き忘れてました.
  そづえす%から!にも書き換えてます.

  76 :デフォルトの名無しさん:2013/08/30(金) NY:AN:NY.AN
  findstrで実行結果にファイル名を出さない方法はありますでしょうか?
  findstr "あああ" "C:\test.txt"
  とファイルを完全に指定すれば実行結果は.
  あああいいい.
  いあああいい.
  いいあああい.
  のようになって, ファイル名は出ずに一致した行の内容だけが表示されます.
  しかし.
  findstr "あああ" "C:\*.txt"
  のようにワイルドカード指定にすると実行結果には.
  C:\test.txt: あああいいい.
  C:\test.txt: いあああいい.
  C:\test.txt: いいあああい.
  のように一致した行の内容だけでなく, その行が含まれているファイル名まで表示されてしまいます.
  これをファイル名は出さないように出来ないでしょうか?

  77 :デフォルトの名無しさん:2013/08/30(金) NY:AN:NY.AN
  for %i in ("C:\*.txt") do @findstr "あああ" "%i"

  78 :デフォルトの名無しさん:2013/08/30(金) NY:AN:NY.AN
  >>76
  forfiles /?

  79 :デフォルトの名無しさん:2013/08/30(金) NY:AN:NY.AN
  >>70
  %〜%はその文字列を含むコマンドの実行前に展開されます.
  何らかの書き方が原因で, javacの実行からエラーレベル取得までが1つ(1行)のコマンドとして解釈されてしまったのでしょう.
  ()で括るとかもその一つ. &で繋ぐのもそれに含まれるっけ?

  80 :デフォルトの名無しさん:2013/08/30(金) NY:AN:NY.AN
  type "C:\*.txt" | findstr "あああ"

  81 :デフォルトの名無しさん:2013/08/30(金) NY:AN:NY.AN
  call echo %%errorlevel%%

  82 :76:2013/08/30(金) NY:AN:NY.AN
  >>77, >>80
  ありがとうございます!
  どちらでも出来そうですね.
  来週会社で試してみますね.

  83 :76:2013/08/31(土) NY:AN:NY.AN
  >>78
  すみません, 見落としてました.
  このコマンドは知りませんでした.
  forfiles /m "C:\*.txt" | findstr "あああ"
  とすれば処理できそうですね.
  ただPCがWinXPなのでこのコマンド自体がありません・・・.
  でも勉強になりました.

  84 :デフォルトの名無しさん:2013/09/01(日) 10:52:35.80
  findstrで一文字違いまで検索結果に含めたい時スマートな記述無いでしょうか?
  「いちごぱんつ」を検索して「いちのぱんつ」とか「いちごぱんだ」とかも同時に拾いたいのです.

  85 :デフォルトの名無しさん:2013/09/01(日) 11:53:35.40
  ない.
  いちごぱんつ.
  *ちごぱんつ.
  い?ごぱんつ.
  いち?ぱんつ.
  いちご?んつ.
  いちごぱ?つ.
  いちごぱん*

  86 :デフォルトの名無しさん:2013/09/01(日) 12:01:14.09
  findstrは複数文字列のOR検索するのに,
  パイプを使わない表記方法(二重引用符で囲んでスペース区切り)
  があるのがUNIX系のgrepコマンドより便利だよね.

  87 :デフォルトの名無しさん:2013/09/01(日) 23:14:25.16
  おお, それでOR検索してくれるのか.
  一行で済むならおkですありがとう.

  88 :デフォルトの名無しさん:2013/09/07(土) 21:02:07.49
  echo %test%

  89 :デフォルトの名無しさん:2013/09/07(土) 21:44:23.13
  >>85
  > *ちごぱんつ.
  これ正規表現として構文エラーだろ. w.
  まあこれに限らずどれも正規表現じゃなくてワイルドカードとして記述してるみたいだが.
  findstrじゃワイルドカードは使えないだろ. www.

  90 :デフォルトの名無しさん:2013/09/08(日) 13:50:51.90
  dir /s /b "C:\windows" >> ".\a.txt"
  で更新中の.\a.txtを.
  findstr "hoge" ".\a.txt"
  で検索してもエラーが起こることは絶対にないですよね?

  91 :デフォルトの名無しさん:2013/09/08(日) 14:41:10.54
  command.comじゃないんだから. w.

  92 :デフォルトの名無しさん:2013/09/08(日) 18:48:49.51
  forコマンドの/dオプションってどういう時に使うんだ?
  [下矢印]の(1.)は(2.)のように書けば事足りると思うが?
  /rオプションもいまいち使いどころがわからない.
  (1.)for /d %i in ("c:\temp\*") do @echo %i
  (2.)for /f %i in ('dir /s /b /ad c:\temp') do @echo %i

  93 :デフォルトの名無しさん:2013/09/08(日) 20:50:40.92
  テキストファイルが1つあり, そのファイルの奇数行目の内容だけを表示することって可能でしょうか?

  94 :デフォルトの名無しさん:2013/09/08(日) 22:01:56.01
  >>92
  それいうとfor /Dに限らずforデフォルト動作もそうだし,
  dir /Sは再帰だからfor /Dと動作違う気がするんだが,
  まぁそれはそれとして置いとこう.
  (2.)の欠点.
  ・単純にコマンドが長い.
  ・パイプ動作なのでcmd /U環境でないとUnicode文字が使えない.
  ・/Sだとフルパスで冗長だし/-Sだと相対パス的に美味しくない.
  >>93
  可能だけど, 処理が複雑化する予定があるなら別の言語を併用したほうが良い.
  エスケープ周りで破綻してから再移植とかくっそダルいよ.

  95 :デフォルトの名無しさん:2013/09/09(月) 01:36:16.64
  >>93
  とりあえずどうやるのか興味もあるだろうから例示するが,
  文字列操作は, 制御文字等使えない文字が多々ありいろいろトラブルのでbatでやるのは俺もお勧めしない.
  @echo off
  setlocal ENABLEDELAYEDEXPANSION
  set z=0
  for /f "tokens=*" %%i in (data.txt) do (
  rem set /a z=^^!z
  set /a z^^=-1
  if !z! neq 0 echo.%%i
  )
  endlocal
  なお遅延環境変数を使うと, さらに文字列データ所以のトラブルが増えるので.
  以下のようにサブルーチンにして回避することもできる(ここでデータをパラメタ渡しにするとトラブルが増える)
  @echo off
  set z=0
  for /f "tokens=*" %%i in (data.txt) do set data=%%i & call:output
  goto :eof
  :output
  if %z%==0 echo.%data%
  set /a z=!z
  goto :eof

  96 :デフォルトの名無しさん:2013/09/09(月) 15:54:39.20
  >>92
  for /r root %i in (.)
  >>94
  えらく詳しいのー感心感心.
  隠しはどうする?
  >>95
  空行はどうする?
  find /n /v "" data.txt
  で行番号を振って, 奇数行だけ.

  97 :デフォルトの名無しさん:2013/09/09(月) 16:22:43.22
  >>96
  すげぇ上から目線で重箱つついてるが, そんなんで人生大丈夫か?
  >隠しはどうする?
  隠しを列挙したいってケースより普通にfor /Dで済むケースのほうが多いから基本問題なし.
  そうしなきゃ駄目な時は諦めて, 欠点を潰すか無視をしてfor /Fを使えばいい.
  一々全部の欠点例外を潰した万能定型文で・・・みたいな事はアホらしいからやりたくない.
  妥協が許されないならハナから汎用言語でも使っとかないと只の苦行だわ.
  >空行はどうする?
  それも使えない文字の一例にすぎないだろ.
  行番号を消す処理も必要になるし, その手の対策の積み重ねも複雑化を招く.

  98 :92:2013/09/09(月) 21:15:46.13
  >>94-95
  ご回答ありがとうございます.
  なるほど, (2.)は色々短所が目立ちますね.
  実行速度も比較するのが馬鹿らしくなるほど(1.)>>>>>>>>(2.)でした.
  ちなみに>>93も私です. w.
  これも前途多難な感じなので他の方法を考えます.
  なんか話が高度になってきたのでこの辺で・・・.

  99 :デフォルトの名無しさん:2013/09/11(水) 16:23:50.79
  set の文字列置換で文字列中に含まれる=自体を置換(削除)したいのですがどうしたらよいでしょうか?
  set a=abc=def
  set a=%a:==%
  とやるとエラーになりますんで・・・.

  100 :54:2013/09/11(水) 17:10:40.49
  お, 俺じゃないからね!

  101 :デフォルトの名無しさん:2013/09/11(水) 17:40:47.80
  >>99
  すまんが簡単な方法が分からん.
  set a=abc=def=ghi
  set n=0
  set new_a=
  :loop
  call set a1=%%a:~%n%, 1%%
  if "%a1%"=="" goto next
  if "%a1%" neq "=" set new_a=%new_a%%a1%
  set /a n+=1
  goto loop
  :next
  set a=%new_a%

  102 :デフォルトの名無しさん:2013/09/11(水) 18:26:47.00
  for /f "delims== tokens=1, 2" %i in ("%a%") do setb=%i%j

  103 :101:2013/09/11(水) 19:21:16.50
  >>99, 100
  wsh(jscript)とかを併用することを考えたら?
  使い捨てじゃなく将来複雑な処理が考えられるのなら後々楽になるよ.
  以下のはbatに埋め込んだ形になってるがxxx.jsと別ファイルにしてxxx.batから呼び出す方がいいだろう.
  @if (0)==(0) echo off
  cscript //nologo /e:jscript "%~f0" <test.txt >result.txt
  type result.txt
  goto :eof
  @end
  /*
  WScript.Echo(WScript.StdIn.ReadAll().replace(/=/g, ""));
  */
  var stdin=WScript.StdIn;
  while(!stdin.AtEndOfStream) {
  var data=stdin.ReadLine().replace(/=/g, "");
  // var data=stdin.ReadLine().replace(/(.+?)=(.+)/, "$2=$1");//>>100さん対応.
  a=bをb=aに入替.
  WScript.StdOut.WriteLine(data);
  }

  104 :デフォルトの名無しさん:2013/09/12(木) 22:31:25.95
  通りすがりだが>>102のでバッチリできたぞ?
  これ>>54にも使えるんじゃね?

  105 :デフォルトの名無しさん:2013/09/12(木) 23:23:43.17
  >>104
  取り敢えずそれで良いとしても, EOL指定とか空行とか非置換行とかメタ文字とか・・・.
  最終的には別言語併用出来るようにしたほうが楽な可能性があるって事は留意しておいても良いと思う.

  106 :デフォルトの名無しさん:2013/09/13(金) 14:01:17.61
  ある実行中のバッチファイル自身の名前は %0 で得ることが出来ますが,
  実行中のバッチファイルを呼出したバッチファイルの名前を知る方法はありますか?
  具体的にやりたいのは shebang の再現です.
  例えば以下のように始まる perl スクリプトの拡張子を bat にしておきます.
  #!/usr/local/bin/perl
  ここに perl スクリプトの内容.
  そして #!.bat という名前のこんな感じのバッチファイルをパスが通った適当なところに置いておきます.
  %* ほにゃらら & exit /b
  こうすることでおおざっぱにではありますが schebang っぽくできると思うのですが,
  このほにゃららのところをどうすればよいか思い付きません.

  107 :デフォルトの名無しさん:2013/09/14(土) 05:01:55.71
  男は黙って D:/Perl/bin/perl.exe ほにゃらら.pl
  いっそのことCygwinでも入れちゃえば.

  108 :デフォルトの名無しさん:2013/09/14(土) 08:44:32.38
  >>107
  Cygwin も Msys も導入済みです.
  だからそれらを使わないときでもそれに挙動を合わせたいというのが動機のひとつです.
  また, Perl を例に挙げましたが実際に使う言語処理系は他のものがメインです.
  処理系起動時のオプションでないと切替えられない要素があるのですが,
  個別に拡張子を割当てるのが煩雑になるというのが関連付けと PATHEXT を使わない理由です.
  バッチファイルでやりたいのでバッチファイルスレで質問してるつもりなんですが,
  他の方法を使わない理由をいちいち全部挙げてからでないと回答が出ないもんなんですか?

  109 :デフォルトの名無しさん:2013/09/14(土) 09:00:40.41
  全部挙げてもでないかもよ.

  110 :デフォルトの名無しさん:2013/09/14(土) 10:01:01.37
  プログラム類ってのは目的を達成するための手段にすぎないのだから, 特定の手段に拘るだけ無駄というか.
  ダメ文字の件とか色々あるし, ドンピシャなテクニックが見つからない・思いつかないなら素直に手を変えるべき.
  ハッカー文化的なものだが, バッチファイルってのは手軽な分, そういう手段は問わない傾向がより強い印象.

  111 :108:2013/09/14(土) 11:44:58.17
  ちょっと煽り気味でしたね. すいません.
  一応 C/C++ や JScript もそこそこ使えるつもりですが, 呼出し元のプロセスが cmd.exe であることはわかっても,
  あるバッチファイルを呼出したバッチファイルが何かということを調べる方法は見付かりませんでした.
  そんなわけで「バッチファイルの機能」でどうにかなる可能性の方がまだ高いだろうと考えました.
  要するに手段に拘っているわけではなく, 色々と検討した結果としてバッチファイルに望みがあると思っているのです.

  112 :デフォルトの名無しさん:2013/09/14(土) 12:28:33.75
  呼出し元から特定の引数渡すとかあるだろうになあ.

  113 :108:2013/09/14(土) 12:31:13.55
  >>112
  要件は >>106 で述べた通りです.
  可能であれば shebang 風 (完全に互換とまでは言わずとも) にしたいのです.

  114 :デフォルトの名無しさん:2013/09/14(土) 13:47:04.98
  >>113
  http://scripting.cocolog-nifty.com/
  出来たかどうかは忘れたけど, ここでバッチの呼び出し元がどうのこうのの記事を読んだ気がする.

  115 :デフォルトの名無しさん:2013/09/14(土) 13:54:41.57
  1.bat
  call 2.bat "%~0"
  2.bat
  echo 呼び出し元:%~1
  exit /b

  116 :108:2013/09/14(土) 14:04:49.20
  >>114
  今回の件に役立ちそうな情報は見付かりませんでした.
  https://www.google.co.jp/webhp#q=site:http%3A%2F%2Fscripting.cocolog-nifty.com++%22%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%97%E5%85%83%22
  でも, 面白い記事が多いですね. 紹介ありがとうございます.

  117 :デフォルトの名無しさん:2013/09/14(土) 14:11:23.69
  >>108
  wshでWMI介して親プロセスのコマンドラインを取得.
  互換性ほしいなら他にないと思う.

  118 :デフォルトの名無しさん:2013/09/14(土) 14:31:30.89
  バッチファイルで現在や親のプロセスIDを調べる. : Windows Script Programming
  http://scripting.cocolog-nifty.com/blog/2007/01/id_548f.html
  これをプロセスIDからコマンドラインに変えればいいじゃね?

  119 :デフォルトの名無しさん:2013/09/14(土) 14:36:01.77
  昔のtlist.exeはppidを出してたから, これ使えばいいよ.

  120 :108:2013/09/14(土) 15:17:15.13
  既に >>111 で述べましたが, それらの方法で得られるのはあくまでも cmd.exe を呼出したプロセスであり,
  cmd.exe 内で実行されたバッチファイルの呼出し元ではありません.

  121 :デフォルトの名無しさん:2013/09/14(土) 15:34:24.99
  >>120
  stackoverflow.com/questions/10087812/batch-bat-get-the-name-of-the-first-script-not-the-current-one
  shebang実装にはwshしか無い.
  pastebin.com/jwAQnTef

  122 :108:2013/09/14(土) 17:05:15.57
  >>121
  すばらしい.
  このスレ的にはアレですが, 解決策ありがとうございます.

  123 :デフォルトの名無しさん:2013/09/14(土) 22:14:15.91
  おいおい.
  >>108
  > バッチファイルでやりたいのでバッチファイルスレで質問してるつもりなんですが,
  > 他の方法を使わない理由をいちいち全部挙げてからでないと回答が出ないもんなんですか?
  こんなこといってたくせにそれかよ.

  124 :108:2013/09/14(土) 23:13:28.98
  >>123
  出来ない理由を覆されたので問題ないです.

  125 :デフォルトの名無しさん:2013/09/15(日) 01:55:19.47
  >>121
  バイナリのインストールを必要としない方法ではほぼWSHしか無いが, WMI呼べるならなんでも良いだろう.
  一時ファイルにスクリプト吐いてdebugコマンドで必要な実行可能バイナリ生成して実行, とかも不可能ではない.
  >>123
  111で反省してたように見えたのに, なんつうかデフォでそういう人なんかね?

  126 :デフォルトの名無しさん:2013/09/15(日) 05:59:54.41
  自分で考えようともしない馬鹿だからどーせすぐ死ぬだろ.

  127 :デフォルトの名無しさん:2013/09/15(日) 06:00:10.27
  debugって32bitだけじゃないの.

  128 :デフォルトの名無しさん:2013/09/15(日) 06:56:29.77
  >>127
  debugは16bit時代の遺物だからなぁ・・・.
  テキスト化したCOMファイル・・・もダメか.
  まだ手はあると思うけど, 出てこない.

  129 :デフォルトの名無しさん:2013/09/15(日) 11:48:12.32
  現在ログインしているユーザーのユーザーフォルダを表すパスって ~  ですよね?
  cd ~ でそのユーザーのユーザーフォルダにいけると思ったんですができませんでした.

  130 :デフォルトの名無しさん:2013/09/15(日) 11:52:40.77
  cd %USERPROFILE%

  131 :デフォルトの名無しさん:2013/09/15(日) 12:02:53.19
  >>130
  /dオプション付けた方が安全だよ.
  pushdならオプション不要だけど.
  cd /d %USERPROFILE%
  pushd %USERPROFILE%

  132 :デフォルトの名無しさん:2013/09/15(日) 14:41:32.93
  >>129
  節子それUnix/Linuxの話や.
  cmd.exeでは上の通り環境変数を参照するのが良いかと.
  %homepath%とかもある, 俺は何となく字面的にこっちが好きだから使ってるだけだが.

  133 :デフォルトの名無しさん:2013/09/15(日) 15:19:04.82
  @rem = '--*-Perl-*--
  @perl -x -S %0 %*
  @goto :eof
  @rem ';

  134 :デフォルトの名無しさん:2013/09/16(月) 19:48:22.51
  コマンド実行時の標準出力を意図通りにechoさせる方法について質問です.
  robocopyコマンドを実行すると,
  Started : Mon Sep 16 09:20:17 2013
  Source : C:\Users\username\Downloads\
  Dest : D:\Backups\Downloads\
  みたいに出力されますが, このうちのSourceとDestのパス部分のみを一行に並べて表示する方法が知りたいのです.
  C:\Users\username\Downloads\ D:\Backups\Downloads\ のようにしたいのです.
  試しに,
  robocopy.exe "C:\Users\username\Downloads" "D:\Backups\Downloads"/MIR |
  findstr /I /R /C:"Source.*\\$" /R /C:"Dest.*\\$"
  としたところ, SourceとDestをそれぞれ一行ずつ表示する形になるだけで, 目的は果たせませんでした.
  それぞれのパス部分のみを一行に並べて表示する方法をお分かりの方居りましたらよろしくお願いいたします.

  135 :デフォルトの名無しさん:2013/09/16(月) 19:56:19.54
  >>134
  for /Fを使ってSourceとDestを環境変数に突っ込んで後で出力する.
  set /Pのプロンプト文字列(改行されない)を使うって手もあったと思うが, そこまで拘るならバッチ以外も想定したい所.

  136 :134:2013/09/16(月) 20:03:51.75
  >>135さん, レスありがとうございます.
  for /Fコマンドで環境変数にSourceとDestをそれぞれ設定後に出力, という手順でできるんですね.
  forコマンドは使ったことないので, ヘルプで調べながら挑戦してみます.
  回答いただきありがとうございました.

  137 :デフォルトの名無しさん:2013/09/17(火) 22:03:09.60
  いいってことよ.

  138 :デフォルトの名無しさん:2013/09/19(木) 06:01:56.22
  start X
  start Y
  start Z
  のように複数のショートカットをまとめて起動するbatファイルを作成したのですが.
  これらを一斉にアクティブ, 最小化, 閉じるなど管理する方法はないでしょうか.
  起動しているものはインターネットブラウザなどです.

  139 :デフォルトの名無しさん:2013/09/19(木) 08:08:39.01
  >>138
  終了や強制終了は出来るけど, それ以上の操作をしたいならWSHとかもしくは操作自動化マクロとか使ったほうが良さげ.
  そもそもGUIはコマンドプロンプトで操作するものじゃないし.

  140 :デフォルトの名無しさん:2013/09/19(木) 08:38:19.46
  >>139
  開いた複数のウインドウをすべて終了できるのでしたら十分です.
  素人質問で申し訳ないですが, どのように記述するとよいでしょうか.

  141 :デフォルトの名無しさん:2013/09/19(木) 09:11:50.93
  連投すいません.
  いろいろ調べてみましたがどうやら検討違いな質問だったようです.
  ですがWSHを使うという情報が手に入っただけで大きな成果でした.
  >>139さんありがとうございました.

  142 :デフォルトの名無しさん:2013/09/19(木) 13:10:48.73
  最小化.
  start shell:::{3080F90D-D7AD-11D9-BD98-0000947B0257}
  閉じる.
  taskkill /im X & taskkill /im Y & taskkill /im Z

  143 :デフォルトの名無しさん:2013/09/19(木) 15:56:29.64
  >>142
  解決しそうです, ありがとうござます.

  144 :デフォルトの名無しさん:2013/09/22(日) 19:32:24.35
  「for /F」って「for /f」でも動くと思うんだけど.
  前者の書き方をする人が圧倒的に多いよね. なんでだろ?

  145 :デフォルトの名無しさん:2013/09/22(日) 19:44:50.79
  圧倒的かどうかは知らんが /? 見ると大文字だし.
  コマンドによってはスイッチの大文字と小文字の区別があるものもあったりしたような.
  コマンドではなく cuiアプリだったかも知れんが.
  あと, スイッチをわかりやすくする為とかじゃないの?
  俺はラベルと環境変数名だけ大文字にしてる.

  146 :デフォルトの名無しさん:2013/09/22(日) 19:46:38.21
  >>144
  for /? での表示が /F になってるからでしょ.
  オプション文字はたまに大文字/小文字区別することあるから...

  147 :デフォルトの名無しさん:2013/09/22(日) 19:47:44.54
  リロードせずに書いたら, 被ってた... orz

  148 :デフォルトの名無しさん:2013/09/23(月) 03:06:20.15
  まあどのコマンドもヘルプ見るとオプションは大文字だけど.
  大抵は小文字でも動くし小文字で書く人も多い.
  でもforに限ってはなぜか大文字で書く人が多めな感じはするね.

  149 :デフォルトの名無しさん:2013/09/23(月) 03:11:40.02
  >>144
  そのオプションの大文字小文字の区別有無は知らないけど,
  forコマンドの%%1文字変数は大文字小文字が区別されるから(震え声)

  150 :デフォルトの名無しさん:2013/09/23(月) 14:46:33.35
  強調だろ. w.

  151 :デフォルトの名無しさん:2013/09/25(水) 09:30:20.92
  すいません, 質問です.
  複数のファイルに記述されたログからファイル名のみを抽出作成したいのですが.
  logが保管されているフォルダの中にはa.log, b.log, c.log・・・と複数のログが保管されており,
  それぞれのログは(ERROR:[日付][ファイル名])というログが数百行記述されています.
  このファイル名のみを抽出し, 別名保存をしたいと考えております.
  自分で考えたバッチ処理の内容は.
  for %%i in (*) do (
  for /f "delims=" %%A in (%%i) do echo %%A:~54 >> ..\result\%%i
  )
  だったのですが, 結果, resultの内容は.
  (ERROR:[日付][ファイル名]):~54
  となってしまいました.
  (パラメータは変数のように部分抽出できない為?)
  このため,
  for %%i in (*) do (
  for /f "delims=" %%A in (%%i) do (
  set B=%%A
  echo %B:~54% >> ..\result\%%i
  )
  )
  に変更したところ, 3行目と4行目が正しく実行されませんでした.
  (result\の中には何もなし. echoでつまづいてる?)
  どうしたらいいでしょう?

  152 :デフォルトの名無しさん:2013/09/25(水) 09:45:01.39
  for () だと変数は逐次更新はされないから, やるなら do call :sub %%A みたいに使わないとダメなんじゃないっけ.

  153 :デフォルトの名無しさん:2013/09/25(水) 10:38:37.03
  >>151
  >パラメータは変数のように部分抽出できない為?
  できない為.
  >3行目と4行目が正しく実行されませんでした.
  %環境変数%の展開はコマンドを読んだ時点で行われる.
  「for %%i in (*) do ([改行]〜中略〜[改行])[改行])」というコマンドを解釈した時点で「%B:~54%」が展開されてしまう.
  setlocalコマンドかネストしたcmd.exeで遅延展開を有効にして%環境変数%の代わりに!環境変数!形式を利用するか,
  callで飛んで処理したりコマンド自体にcallを付ける等で環境変数の展開が毎回行われるようにしなければならない.

  154 :デフォルトの名無しさん:2013/09/25(水) 11:31:17.13
  %B:~54%
  54てなんだ?間違ってるんじゃないのか?
  日付の書式はどうなっている?[0925] とかの4文字なら.
  %B:~14, -2%
  for %%i in (*) do (set A=%%i
  for /f "delims=" %%A in (%%i) do (
  set B=%%A
  call :sub
  ))
  exit /b
  :sub
  >> ..\result\res_%A% echo %B:~14, -2%
  だがこっちのほうが簡潔だし, 日付の書式の文字数が一定しない9月25日とかでも対応出来る.
  for %%i in (*) do (
  for /f "tokens=3 delims=[]" %%A in (%%i) do >>..\result\res_%%iecho %%A
  )

  155 :151:2013/09/25(水) 12:25:58.64
  >>153
  ありがとうございました.
  callで:subに飛ばして解決できました.
  >>154
  54は固定長でROBOCOPYのログなんでファイル名までがそんくらいだったんです.
  ありがとうございました.

  156 :デフォルトの名無しさん:2013/09/26(木) 12:50:23.27
  コマンド1 引数.
  コマンド2 引数.
  って書いてもコマンド2が実行されません.
  コマンド1 引数 & コマンド2 引数.
  って書くとコマンド2は実行されますが.
  コマンドの量が多くなると可読性が失われるので困ってます.
  アドバイスお願いします.

  157 :デフォルトの名無しさん:2013/09/26(木) 13:43:32.61
  具体的に書けよ.
  どう考えても書いたコマンドに問題があるとしか思えん.

  158 :デフォルトの名無しさん:2013/09/26(木) 14:57:15.67
  もしコマンド1がbatとかならcallで呼ぶ.

  159 :デフォルトの名無しさん:2013/10/02(水) 02:33:34.10
  ipconfigコマンドを実行するとネットワークカードのIPアドレスを表示出来ますが.
  LANケーブルを抜いた状態だと例え固定IPを設定していてもIPアドレスが表示されません.
  LANケーブルが抜けていてもIPアドレスを表示できるコマンドはないでしょうか?

  160 :デフォルトの名無しさん:2013/10/02(水) 02:42:23.00
  詳細忘れたけどnetshで見れなかったっけ.

  161 :159:2013/10/04(金) 01:46:05.71
  >>160
  見れました!ありがとうございます.
  IPも変えれるなんて便利ですね.

  162 :デフォルトの名無しさん:2013/10/08(火) 15:48:55.97
  過去ログ漁って call で遅延展開する方法があったけど.
  Windows7のコマンドプロンプトで動かしても, ファイルがないと言われたので.
  さらにググって, !(びっくりマーク)でくくると遅延展開するというのを見つけて作ってみた.
  経緯と中身はこっち  4桁の連番にするバッチ.
  http://toro.2ch.net/test/read.cgi/avi/1319451871/612-614
  > setlocal enabledelayedexpansion
  っていうのを入れないとただの文字として扱われてたからいるよね.
  なんていうか,
                        <イレル  「考えすぎでしょうか」
  人がすんなりできる事をいちいち詰まってドツボに嵌る人生なんだなって.

  163 :デフォルトの名無しさん:2013/10/08(火) 21:25:21.54
  すまん, よく分からんのだが.
  %の展開を2回するのを遅延展開というのか?

  164 :デフォルトの名無しさん:2013/10/08(火) 21:47:56.12
  >>163
  2回というか, 2重?
  遅延展開は %%変数%% でも !変数! でもいいらしい.
  「!」が使えるのはNT系だけど, いまどき 9x で新規バッチなんて作らないだろうし.
  ちなみに今 call と %%変数%% でやってみたらできました.
  %%変数%% を使う場合でも.
  > setlocal enabledelayedexpansion
  ってのを入れないといけなかったんですね.

  165 :デフォルトの名無しさん:2013/10/08(火) 21:51:55.29
  > %%変数%% を使う場合でも.
  > > setlocal enabledelayedexpansion
  > ってのを入れないといけなかったんですね.
  そんなことはない.
  あと全角キモいからやめろ.

  166 :デフォルトの名無しさん:2013/10/08(火) 21:56:12.27
  >>165
  でも, エラーになるんですけど. ちなみにWindows7です.
  call 使わなかったら  %変数%  っていう文字として処理されるし.

  167 :デフォルトの名無しさん:2013/10/08(火) 21:57:06.50
  call %%hoge%% のパターンは遅延展開とは言わん.

  168 :デフォルトの名無しさん:2013/10/08(火) 22:00:33.51
  >>163
  二段展開してて, その二段目がcall実行のタイミングに遅延展開してるってことにはなると思うが.
  @set A=0 & for /L %%i in (0, 1, 4) do @(
  set /A A=A+1
  call echo %%A%% )
  バッチファイルでならちゃんと「1」「2」「3」「4」「5」になるよ.
  ただ, プロンプトではパース時に展開されてそれっきりで二段展開すらされない.
  プロンプトとバッチファイルでパース動作が違ったりとか,
  状況によってクセのあるパースや展開されたりとか,
  ダメ文字やエスケープの不備とか・・・バッチやシェルスクリプトのこういう所は嫌いというか苦手だわ・・・.

  169 :デフォルトの名無しさん:2013/10/08(火) 22:04:55.44
  >>162
  callダメなのか?
  set /a R=10000
  for /f "tokens=*" %%S in ('dir /on /b *.png') do (
  call ren "%%S" %%R:~1%%.png
  set /a R+=1
  )
  で動かないのかな?
  あと下2行目どういう意味?

  170 :デフォルトの名無しさん:2013/10/08(火) 22:10:15.72
  遅延展開は見えないが %多段展開は echo on で見えるだろ.

  171 :162:2013/10/08(火) 22:22:17.12
  >>169
  >>168 さんのは動きました.
  すいません.
  もしかしたら別のところで引っかかってたのかも.
  ファイル名の後ろにつなげようとして %%~nS とか使ったときに,
  変更前のファイル名のほうでやっちゃってエラーが出たりしたので, それと混同したのかも.
  「!」の方はそれだけだと文字扱いでしたが.
  「<イレル」は校正のやり方.
  今ちょっと微妙にマイナーなライトノベル作家のスレに常駐してるので.
  ちょっとしたジョーク.

  172 :デフォルトの名無しさん:2013/10/08(火) 22:33:22.21
  >>171
  アチコチの情報を漁るのも良いけど, ヘルプをまずちゃんと読んだほうが良い.
  体系的な知識が得られるので.
  それから, コマンドヘルプも活用できる.
  今回の遅延環境変数(!)の話なら.
  set /?

  173 :デフォルトの名無しさん:2013/10/08(火) 23:00:54.42
  >>169
  > call ren "%%S" %%R:~1%%.png
  一回展開で(forループ開始時), 「%%」->「%」
  > call ren "%S" %R:~1%.png
  forの引数置換で, 「%S」->「〜.png」
  > call ren "〜.png" %R:~1%.png
  callの解釈で, 「%R:~1%」->「環境変数Rの2文字目(オフセット1)以降」->「0000」
  > ren "〜.png" 0000.png
  んで,
  > set /a R+=1
  はRの下4桁のインクリメント目的で, Rに1を足してRに格納する.
  初回は「%R:~1%」が「10000」の2文字以降で「0000」
  次回は「%R:~1%」が「10001」の2文字以降で「0001」・・・と続く.
  まぁ詳しくは>>172
  set, for, call辺りの/?は読んどくと良い.
  cmdとsetlocalとstartあたりも為になる.

  174 :デフォルトの名無しさん:2013/10/09(水) 00:01:34.13
  >>173
  解説ご苦労様と言いたい所ですが169さんは質問者じゃないと思いますよー. www.

  175 :デフォルトの名無しさん:2013/10/09(水) 00:26:11.37
  >>174
  ・・・ああ, 色々盛大に勘違いしてたorz

  176 :デフォルトの名無しさん:2013/10/09(水) 11:15:09.65
  >>168
  call echo %^A%
  ってやればプロンプト入力でもいける.

  177 :デフォルトの名無しさん:2013/10/12(土) 02:48:38.73
  とあるファイルの, フルパスでなく, 属する直上のフォルダ名を取得する方法を教えてくだちい.

  178 :デフォルトの名無しさん:2013/10/12(土) 03:23:16.89
  for %%A in ("%~1\..") do echo %%~nxA
  pause

  179 :デフォルトの名無しさん:2013/10/12(土) 03:40:49.43
  おおすごい!
  \..の部分で階層一つ上げてるってわけですかね?
  サンキュウベリーマッチョ!

  180 :デフォルトの名無しさん:2013/10/12(土) 15:44:17.94
  for %%A in ("%~dp1\.") do echo %%~nxA
  pause

  181 :デフォルトの名無しさん:2013/10/23(水) 00:20:20.38
  set rtn = %errorlevel%
  exit rtn
  [上矢印]のようなコードを見たことあるんだけど, 2行目は「exit %rtn%」になるんじゃないの?

  182 :デフォルトの名無しさん:2013/10/23(水) 00:32:50.68
  なことはない.

  183 :デフォルトの名無しさん:2013/10/23(水) 00:45:33.68
  今試したけど, それ無効(errorlevel値に影響しない)になってると思われる.
  batのerrorlevelは別にexitで値を返さなくても返されるので.
  まあ意図したようには動作するけど.
  dir z:  (存在しないドライブ名)
  set abc=9
  exit abc と  exit %abc%
  で試せば分かると思う.

  184 :181:2013/10/23(水) 02:02:48.29
  >>183
  試してみたらやはり「exit %abc%」の書き方が正解みたいですね.
  自分が見たサンプルはたまたまうまくいってただけっぽい・・・.
  勉強になりました. ありがとうございます.

  185 :デフォルトの名無しさん:2013/10/23(水) 02:08:18.01
  いや, だからexitに数値指定なしだとbatでのerrorlevel値がそのまま帰るんだよ.
  多分exitは数値じゃなかったらパラメタは無効にするんだと思う.
  だから.
  set rtn = %errorlevel%
  exit rtn
  この2行と.
  exit
  とは等価となってる.

  186 :デフォルトの名無しさん:2013/10/23(水) 03:22:37.39
  等価って書いたけど間違っているかも知れない.
  exitだけだと.
  受け側がbat以外のプログラムだったら復帰値として.
  errorlevel値が帰らないかもしれない(未確認)

  187 :デフォルトの名無しさん:2013/10/31(木) 10:53:34.17
  cleanmgr /c c: /sageset:1
  cleanmgr /c d: /sageset:2
  これをbatファイルから実行しても1行目しか実行されません.
  CドライブとDドライブのディスクノクリーンアップが出来ればOKなんですが.
  何か良い方法ありませんか?

  188 :デフォルトの名無しさん:2013/10/31(木) 13:30:06.76
  バッチファイルはその行の処理が終了しないと次の行に行かないので.
  この場合Cのクリーンアップが終了するまでDのクリーンアップは起動しない.
  そしてcleanmgrは複数同時起動しないのでCとDのクリーンアップを同時に行うのは無理.
  ちなみにわかってるとは思うけどsagesetはオプション設定で実際のクリーンアップはsagerunね.

  189 :デフォルトの名無しさん:2013/10/31(木) 13:37:56.80
  設定用バッチファイル.
  cleanmgr /c c: /sageset:1
  cleanmgr /c d: /sageset:2
  実行用バッチファイル.
  cleanmgr /sagerun:1
  cleanmgr /sagerun:2
  こういうふうに分けて書いてたんです.
  設定は1度きりしか行わないのでc. batとd.batに分けて実行することにします.
  PCから離れている間にディスクノクリーンアップを行いたいので,
  実行はCとDの二つのドライブをコマンドプロンプトから一回の呼び出しで行うにはどうしたらいいでしょうか?

  190 :デフォルトの名無しさん:2013/10/31(木) 14:52:42.78
  バッチの問題じゃなくてソフトの問題だってレスしてくれてるじゃないの. 諦めよう.

  191 :デフォルトの名無しさん:2013/10/31(木) 15:44:51.93
  わかりました.

  192 :デフォルトの名無しさん:2013/10/31(木) 16:00:50.32
  試してないけど, 終了してないから2回目が起動できないのなら終了させちゃえば良いのでは?
  cleanmgr /c c: /sageset:1
  taskkill /f /fi "imagename eq cleanmgr.exe"
  cleanmgr /c d: /sageset:2

  193 :デフォルトの名無しさん:2013/10/31(木) 17:04:28.22
  >>192
  それtaskkillが実行される時はcleanmgrが終了した時だから意味なくない?

  194 :デフォルトの名無しさん:2013/11/04(月) 07:58:59.84
  Windowsのコマンドラインで, 文字列の最後尾に0x00のNULL文字を追加した文字列を.
  任意の変数にセットする方法を教えて下さい.
  abcd0x00  abcdの後に0x00が1つの合計5文字.

  195 :デフォルトの名無しさん:2013/11/04(月) 09:17:14.82
  バッチファイルでバイナリ文字列扱うとか無謀すぎると思う.
  変態という名の神々が戯れにやる類の仕事ではなかろうか.

  196 :デフォルトの名無しさん:2013/11/04(月) 09:53:28.74
  常識ある組織なら, 然るべきスクリプト言語を使わせるだろう.
  「Windows標準でないからNG」とか喚くような所なら, さっさと辞めるが吉.

  197 :デフォルトの名無しさん:2013/11/04(月) 10:52:17.85
  Windows標準ならWindows Script Hostがある.

  198 :デフォルトの名無しさん:2013/11/04(月) 14:23:05.50
  >>194
  未検証だけどバイナリエディタで0x00の1バイトファイル作っておいて,
  typeコマンドで当該ファイルを変数に流し込めばいけるかも.

  199 :デフォルトの名無しさん:2013/11/04(月) 16:18:35.24
  >>198
  「バイナリエディタはWindows標準でないから使用はNG」と. w.

  200 :デフォルトの名無しさん:2013/11/04(月) 22:31:52.59
  真面目にやるならdebugコマンドだが, 最近のWindowsには付属してないんだよなぁ・・・.

  201 :デフォルトの名無しさん:2013/11/05(火) 05:31:31.99
  >>200
  command.com削除されたの?

  202 :デフォルトの名無しさん:2013/11/06(水) 00:43:53.39
  >>201
  16ビットのエミュレーション機能が消えて同時に消えたとか聞いた気が.
  ちゃんと調べたりしたわけじゃないんで間違ってたらすまん.

  203 :デフォルトの名無しさん:2013/11/06(水) 07:43:02.29
  スクリプトは使用したくないのであれば下記のバッチファイルを使用する.
  @echo off
  empty.exe *
  ファイル(F) --> 名前を付けて保存(A)をクリックする.
  ファイル名(N) で 必ず ダブルコーテーション でファイル名をくくってください.
  バッチファイルは.
  "メモリ開放.bat"
  ってあるんですけど, 「必ず ダブルコーテーション でファイル名をくくってください」
  ってのは何で?他のサイトだと普通にempty.batとかで保存していいみたいなんだけど.

  204 :デフォルトの名無しさん:2013/11/06(水) 08:34:57.76
  拡張子が.bat.txtにならないようにだろ.
  ていうかそのサイトで聞け.

  205 :デフォルトの名無しさん:2013/11/06(水) 22:00:57.93
  メモリ開放!

  206 :名無しののVBS:2013/11/09(土) 05:27:27.39
  ""って拡張子修正用と言ってたような気がする.

  207 :デフォルトの名無しさん:2013/11/10(日) 12:23:41.42
  vimのコマンド作って便利になった.

  208 :デフォルトの名無しさん:2013/11/13(水) 00:21:19.77
  <"C:\TEST1.bat"の内容>
  C:\TEST2.bat
  notepad
  <"C:\TEST2.bat"の内容>
  mspaint
  上記2つのファイルがある時にコマンドプロンプトから"C:\TEST1.bat"と入力してエンター押すと.
  ペイントは起動するのですが, メモ帳が起動しません.
  メモ帳も起動させたい場合はどのように記述すればよいのでしょうか?

  209 :デフォルトの名無しさん:2013/11/13(水) 00:29:29.94
  >>208
  batからbatを起動すると制御が起動したbatに移動し元には戻ってこない(ジャンプってこと)
  mspaintが終了するまでnotepadを起動しなくて良いのなら.
  call test2.bat
  同時に起動するなら.
  start test2.bat

  210 :デフォルトの名無しさん:2013/11/13(水) 00:59:19.52
  >>209
  制御が戻ってこないとは知りませんでした・・・.
  callでバッチリうまくいきました.
  ありがとうございます!

  211 :デフォルトの名無しさん:2013/11/14(木) 00:20:01.44
  callとcmd /c, startとcmd /kはどう違うの?

  212 :デフォルトの名無しさん:2013/11/14(木) 00:29:35.43
  メインメモリの空き容量が・・・.

  213 :デフォルトの名無しさん:2013/11/17(日) 16:52:32.11
  気にしない.

  214 :デフォルトの名無しさん:2013/11/19(火) 22:18:06.13
  シェルスクリプトのスレ誘導してくれ.

  215 :デフォルトの名無しさん:2013/11/20(水) 09:23:01.58
  >214
  [下矢印]悪いが, ここから適当に見て回ってもらうしかない.
  [最強CUI]PowerShell -Part 1
  http://toro.2ch.net/test/read.cgi/tech/1378978504/
  VBScriptについて必死に話し合うスレ.
  http://toro.2ch.net/test/read.cgi/tech/1242136180/
  [JavaScript] スクリプト言語34 [Perl, Python, PHP]
  http://toro.2ch.net/test/read.cgi/tech/1367771981/
  ECMAScript デス 4
  http://toro.2ch.net/test/read.cgi/tech/1325448978/
  [JavaScript]スクリプト バトルロワイヤル40[pl, rb, php, py]
  http://toro.2ch.net/test/read.cgi/tech/1379350030/
                コマンドプロンプト.
  http://toro.2ch.net/test/read.cgi/win/1381119881/
  お前ら, wsh使ってますか? Part8
  http://toro.2ch.net/test/read.cgi/win/1292764835/
  Windows PowerShell Part4
  http://toro.2ch.net/test/read.cgi/win/1359719778/

  216 :デフォルトの名無しさん:2013/11/20(水) 17:39:56.64
  シェルスクリプトってバッチファイルよりは強力だしスレ無いわけが・・・.
  で, shだと誤爆が多そうだしcshで探したらこんなのが.
  C shell 撲滅委員会.
  http://toro.2ch.net/test/read.cgi/unix/1094041299/
  それはさておき, まぁ当然だけどUNIX板いくだけで一発だな.
  シェルスクリプト総合 その22
  http://toro.2ch.net/test/read.cgi/unix/1383260330/

  217 :デフォルトの名無しさん:2013/11/20(水) 23:17:41.18
  >>215 >>216  やっぱりここで聞いてよかった  ありがとな.

  218 :デフォルトの名無しさん:2013/11/29(金) 04:55:52.45
  http://zion009.blog98.fc2.com/blog-entry-50.html
  こちらをバッチにしてD&Dするとtsファイルが0キロバイトで出力されます.
  私が間違っているのでしょうかサイト側のミスなのでしょうか.

  219 :デフォルトの名無しさん:2013/11/29(金) 06:24:38.80
  >>218
  まずvlcに直接喰わせたときに, そのファイルはちゃんと出力されるのか?
  話はそれからだ.

  220 :218:2013/12/05(木) 10:45:55.06
  今更ながらコピーしたのをサクラでペーストし, 後ろの半角スペースを削除したら正常に出力されるようになりました.

  221 :デフォルトの名無しさん:2013/12/05(木) 22:58:16.73
  教えてください.
  既定のzipの関連付けは確か.
  >assoc .zip
  .zip=CompressedFolder
  だったと思うんだが, いつの間にか.
  >assoc .zip
  拡張子 .zip のファイルの関連付けが見つかりません.
  になってしまっていた. しかし,
  >start a.zip
  で圧縮(zip)フォルダが起動する.
  なぜだ?

  222 :デフォルトの名無しさん:2013/12/05(木) 23:13:19.79
  てめえの既定など知らんわ.
  そもそも関連付けはマシーンではなくペルソナにメガ進化している.

  223 :デフォルトの名無しさん:2013/12/05(木) 23:30:56.75
  .zip=CompressedFolder はWindows8の既定.

  224 :デフォルトの名無しさん:2013/12/06(金) 00:04:52.50
  .cabや.lzhも同じような・・・.
  assocは何の意味があるのか.

  225 :デフォルトの名無しさん:2013/12/07(土) 15:01:02.16
  コマンドでビープ音を出すことは出来ますか?
  可能ならスピーカーがミュートになっていても音を出したいのですが.
  無理ならスピーカーからでも良いので何らかの音が出せれば良いです.

  226 :デフォルトの名無しさん:2013/12/07(土) 15:16:00.81
  >225
  例:コマンドプロンプト画面で以下のように打ち込むと, Cドライブのルートフォルダに"Beep1.bat"ができる.
  それを実行するとビープ音が一回鳴る.
  ([*] 「^G」と表記した箇所では, 実際には[Ctrl]+[G]を押す事. これによりアスキーコード7が入力される)
  echo @echo ^G > C:\testBeep.bat

  227 :226:2013/12/07(土) 15:26:39.33
  例として挙げたファイル名をうっかり書き間違えた. orz
  とにかく"C:\testBeep.bat"なら"C:\testBeep.bat"を実行すればOKって事で.
  アスキーコード7は元々ビープ音を鳴らす為の制御コードだが, PCによっては.
  ヘッドホンを繋いでるとヘッドホンからしか聴こえない場合もあるから注意.
  こればかりは実際どうしようもない.

  228 :デフォルトの名無しさん:2013/12/07(土) 22:15:40.57
  Windows7以降はビープ鳴らせないんじゃなかったっけ.

  229 :デフォルトの名無しさん:2013/12/08(日) 00:27:54.07
  コマンドプロンプトでCtrl+Gじゃなくて普通にキーボードから「^G」って打ってエンター押したら.
  いきなりIEが立ち上がってGoogleで"undefined"を検索した状態になってすげえびっくりした.
  なんなんだこりゃ?

  230 :デフォルトの名無しさん:2013/12/08(日) 05:21:11.98
  私のWindows7(Pro)64bitでは, ちゃんと>>226の方法でビープ音が鳴るよ.
  [Ctrl]+[G]を2回続けた場合はビープ音も2回鳴る.

  231 :デフォルトの名無しさん:2013/12/08(日) 05:52:09.63
  すみません, スクリプト初心者で色々と試行錯誤の上, ちょっとハマってしまったので教えて頂けないでしょうか.
  やりたいことは以下の処理が出来るバッチファイル(check.bat)を作りたいのです.

  232 :231:2013/12/08(日) 05:55:24.55
  (1)A)のコマンドを実行し, その結果に「kdb106.dll」という文字列があれば(2)の処理に進む, 無ければ何もせずバッチ処理終了.
  [下矢印]
  (2)B)のコマンドを実行し, その結果に「PCAT_106KEY」という文字列があれば(3)の処理に進む, 無ければ何もせずバッチ処理終了.
  [下矢印]
  (3)「check.bat」と同じディレクトリにある「update.bat」を実行し, 処理終了.
    [*] 「update.bat」はちゃんと動くものが用意されています.

  233 :デフォルトの名無しさん:2013/12/08(日) 06:32:28.13
  (1)set a = A | findstr kdb106.dll
  if %errlvl%
  (2)set b = B | 略.
  (3)update.bat
  こんな感じだけど記述は適当です.
  何にハマったのか気になります.
  どこまで出来たのか気になります.
  たぶん何もしてなくて丸投げなんだろう.
  と思いますがいかがですか.

  234 :デフォルトの名無しさん:2013/12/08(日) 06:33:34.38
  (cmd && cmd)ってbatで出来たっけshellだけだっけ.

  235 :231:2013/12/08(日) 06:39:58.20
  >>233さん.
  早速ありがとうございます.
  A)のコマンドというのは, reg query
  HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\i8042prt\Parameters/v
  "LayerDriver JPN"
  になり,
  実行すると以下のように2行で結果が出力されます.
  HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\i8042prt\Parameters
  LayerDriver JPN REG_SZ kbd106.dll
  この出力を変数に入れてやり, findstrで特定の文字列があるかどうかをやりたいのですが,
  うまく変数に入ってくれないのです. すみません. . .

  236 :231:2013/12/08(日) 07:34:38.47
  for /f "usebackq tokens=*" %%i in (`reg query
  HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\i8042prt\Parameters/v
  "LayerDriver JPN"`) do @set A=%%i
  echo %A% |findstr "kbd106.dll"
  でとりあえず, kdb106.dllを含む行のみechoで表示させることが出来ました.
  ここからなのですが, このキーワードを含む場合は「goto test1」,
  含まない場合は「goto test2」にしたいのですが,
  IF文をどう使えばいいでしょうか?たびたびすみません.

  237 :デフォルトの名無しさん:2013/12/08(日) 08:03:45.96
  >>236
  forコマンドでは, 複数行の入力があると, 一行ずつコマンドを繰り返し実行するので複数行をまとめて入力とかできない.
  それだと最後の行のみのデータが環境変数Aにセットされるだけ.
  こういう場合, 一旦結果を中韓ファイルに格納するか, パイプ渡しする.
  reg query xxx | findstr "str"
  次にfindstrの結果ヒットしたかどうかはerrorlevelに格納される.
  ヒットしたら=0 そうでなかったら=1(またはそれ以上の値でエラー値はwindowsの種類により異なる)
  色々実行してみて, echo %errorlevel%で値を見てみればいい.
  if errorlevel 1 goto :not_find
  ヒット処理.
  goto :eof
  :not_find
  ノーヒット処理.

  238 :デフォルトの名無しさん:2013/12/08(日) 08:16:23.14
  訂正.
  パイプ渡しでへたに空白は入れない方が余計なミスを発生させない(後には空白を入れてもいい)
  reg query xxx| findstr "str"
  あと実行結果をコンソールに表示したくない場合出力をnulデバイスにリダイレクトする.
  findstr "xxx" >nul  又は  findstr "xxx"1>nul
  標準出力だけでなくエラー出力も表示させたくない場合は.
  findstr "xxx" >nul 2>&1

  239 :デフォルトの名無しさん:2013/12/08(日) 08:24:01.85
  あと, そもそも環境変数に複数行データを格納することは出来ない.

  240 :231:2013/12/08(日) 08:35:19.32
  >>237さん.
  情報ありがとうございます!!
  errorlevelで判別し, 分岐処理させることが出来ました.
  これでうまく作れそうです.
  本当にありがとうございました!!

  241 :231:2013/12/08(日) 08:40:10.36
  >>238-239
  追加情報もありがとうございます.
  微調整するようにしますね!

  242 :デフォルトの名無しさん:2013/12/08(日) 10:11:55.42
  >>230
  ビープとはビープスピーカー(PC本体に付いてる奴)を鳴らすってことであって.
  音声出力のスピーカーから鳴る奴は違う.

  243 :デフォルトの名無しさん:2013/12/08(日) 13:25:43.57
  >>228>>242
  マザボにビープスピーカーが無い場合, XP以前でもサウンドスピーカーで代用ビープが鳴ってなかったか?

  244 :デフォルトの名無しさん:2013/12/08(日) 15:11:24.99
  代用ビープってなんかワロタ. w.
  昔飲んだ代用コーヒーを思い出した・・・.

  245 :デフォルトの名無しさん:2013/12/10(火) 16:30:03.46
  ファイルのタイムスタンプの時間の変更方法を教えてください.
  日付ですと, 以下のように一旦変数に入れて戻すことで可能ですが, 時間の場合この方法は使いづらいのです.
  set NOWDATE=%DATE%
  date 2000-01-01
  copy /B "hoge.txt" +
  date %NOWDATE%
  外部ツールを使わない方法を模索しております. よろしくお願いいたします.

  246 :デフォルトの名無しさん:2013/12/10(火) 22:44:13.91
  scriptかpowershell

  247 :245:2013/12/10(火) 23:15:11.36
  >>246
  スクリプトですね, 調べてやってみたいと思います.
  レスありがとうございました.

  248 :デフォルトの名無しさん:2013/12/10(火) 23:20:30.23
  内部ツール生成は?
  setlocal
  for /D %%i in (%windir%\Microsoft.NET\Framework\v*) do path %%i;%path%
  echo import System.IO; File.SetLastWriteTime("aaa.txt",
  "1/1/201112:56:30");>aaaaa.js
  jsc.exe aaaaa.js
  aaaaa.exe
  del aaaaa.js
  del aaaaa.exe

  249 :デフォルトの名無しさん:2013/12/14(土) 11:20:53.30
  非常に基礎的なことだと思うのですが・・・.
  <a.bat>
  @echo off
  start /wait b.bat
  echo %time% >a.txt
  exit
  <b.bat>
  @echo off
  echo %time% >b.txt
  ping -n 3 localhost >NUL
  exit
  で, b.txtが出力された約2秒後にa.txtも出力される事がわかりました.
  要は, あるバッチを実行し, 別のバッチを呼び出しそのバッチ処理が終わればまた元にバッチに戻り処理をするという.
  形にしたいのです. (シャットダウンスクリプト)
  このa, bをグループポリシーのシャットダウンスクリプトに仕込むと,
  何故か既定の15分のタイムアウトまでシャットダウンプロセスで止まってしまい,
  結果のtxtファイルも出力されません.
  ちょっとわかる方いらっしゃいましたらアドバイス頂けないでしょうか?

  250 :デフォルトの名無しさん:2013/12/14(土) 12:07:14.89
  シャットダウン中ってプロセスの起動制限無かったっけ?
  startの代わりにcallじゃいかんのか?

  251 :249:2013/12/14(土) 14:59:03.80
  >>250
  ありがとうございます.
  <a.bat>
  @echo off
  call b.bat
  echo %time% >a.txt
  exit
  <b.bat>
  @echo off
  echo %time% >b.txt
  ping -n 3 localhost >NUL
  に変更し, aからbをcallで呼び, bのexitを取りました.
  通常時ではa.batを実行すると, 2つのtxtを吐いてくれます.
  a.batをシャットダウンスクリプトに仕込み, gpupdate /forceで反映,
  シャットダウンすると, すぐにシャットダウンされるのですが,
  再起動後にtxtは吐かれていませんでした. . .
  別プロセスbを呼べないのは分かるのですが, せめてa側のtxtが吐かれていないのと.
  納得出来ないんです.
  うーん, , , 複雑だなぁ.

  252 :デフォルトの名無しさん:2013/12/14(土) 15:38:47.70
  >>251
  念のために確認するけど.
  a.txtとかb.txtって実際にはフルパス指定してる?
  それか, 先頭に.
  pushd %~dp0
  を書いてみれば?

  253 :252:2013/12/14(土) 15:54:57.38
  上のレスは無視してくれ.
  カレントはscriptの位置になってるようだ.
  アクセス権の問題かとも思ったけどSYSTEMはフルになってるし(まあ念のために確認してみて)
  でもscriptフォルダに余計なファイルを書くことはお勧めできないので.
  別に用意してそっちに書くようにすてはどうか?
  ちなみにlogoff scriptでexeを起動するなんてことは.
  俺はやっているしログファイルも作成してるんで出来ないことはないはず.

  254 :252:2013/12/14(土) 15:57:28.16
  [上矢印]
  logoff scriptはshutdown scriptと読み替えてくれ.

  255 :デフォルトの名無しさん:2013/12/14(土) 16:03:39.04
  a->b->a としたいなら,
  bに.
  exit /B
  を付けてaに処理が戻るようにしてみては.

  256 :デフォルトの名無しさん:2013/12/14(土) 16:08:45.97
  exit /?
  を参照ね.
  終了コードを付加することで, 戻ったバッチ側で判定して分岐なんかの処理もできる.

  257 :249:2013/12/14(土) 16:10:10.68
  >>255
  ありがとうございます!!
  とりあえず,
  <a.bat>
  @echo off
  pushd %~dp0
  start /wait b.bat
  echo %time% >a.txt
  exit
  <b.bat>
  @echo off
  pushd %~dp0
  echo %time% >b.txt
  ping -n 3 localhost >NUL
  popd
  exit
  で, ちゃんとカレントディレクトリにa.txt, b.txtをシャットダウンスクリプト時に.
  吐いてくれるようになりました!!!
  ちょっとexit /Bも試してみるようにしますね.
  ちなみに, 各バッチのSYSTEMの権限はフルでした.

  258 :249:2013/12/14(土) 16:28:01.79
  ちなみに start /waitでb.bat開始せず, callする場合は.
  これで行けました!
  アドバイス頂いたようにb.bat側のexitに/Bをつけるのがポイントのようです.
  また, 絶対パスを指定せず, カレントディレクトリでやる場合.
  「pushd %~dp0」も付けておくことが必要だとわかりました.
  ありがとうございました!!
  <a.bat>
  @echo off
  pushd %~dp0
  call b.bat
  echo %time% >a.txt
  exit
  <b.bat>
  @echo off
  pushd %~dp0
  echo %time% >b.txt
  ping -n 3 localhost >NUL
  popd
  exit /B

  259 :デフォルトの名無しさん:2013/12/14(土) 23:07:19.91
  で, >>249 が動かない理由は解決した?
  もしかしてフルパスで[下矢印]だと終わらないぞ.
  start /wait "c:\b.bat"

  260 :デフォルトの名無しさん:2013/12/15(日) 00:53:06.53
  >>249
  状況から見てb.batが見つからないからエラーが出て止まってるだけだろ.
  試しにa.bat内のsart /wait c.bat
  に変えて通常実行してみりゃ,
  'c.bat'がみつかりません. とかのメッセージボックスが出て止まったままになるしさ.

  261 :デフォルトの名無しさん:2013/12/15(日) 01:26:41.08
  vol c: | findstr /C:シリアル番号.
  で出てきたシリアル番号だけを抜き出して表示したいのですが.
  どうすりゃ良いか教えてください.

  262 :デフォルトの名無しさん:2013/12/15(日) 01:57:08.69
  for /F "tokens=3" %i in ('vol c: ^| findstr /C:シリアル番号') do @echo%i

  263 :249:2013/12/15(日) 04:16:05.52
  >>259-260
  アドバイスありがとうございます!!
  よくよく見てみたらおかしかったです.

  264 :デフォルトの名無しさん:2013/12/15(日) 11:15:41.61
  batでプログラムを作っているのですが,
  start...
  start...
  で別のプログラムをいくつか同時起動してそれらが全てが自動終了したときに.
  次の処理に進みたいのですが, こんな判定ってできますか?

  265 :デフォルトの名無しさん:2013/12/15(日) 11:35:21.71
  どっかに動作中を示すファイル作っておいて定期的に存在のチェック.
  って方法をやってるけど, そういう用途のコマンドとかコンソールアプリあるなら俺も知りたいな.
  まぁ, そこまでやるなら. . . って話はもちろんわかるけども.

  266 :デフォルトの名無しさん:2013/12/15(日) 12:34:59.25
  notepad | notepad | more

  267 :デフォルトの名無しさん:2013/12/15(日) 12:58:15.28
  横だけどこれってどういう仕組みなの?
  パイプが出力を次のコマンドに渡すやつだってことはわかるけど,
  notepadは何も渡さないとして, なんでmoreで止まるの?

  268 :デフォルトの名無しさん:2013/12/15(日) 13:17:11.71
  こんな感じかな,
  mystart.bat
  app=%1
  flg=%1.run
  Echo hoge> %flg
  start %app(start要らないかも)
  del %flg
  postproc.bat
  appList=appA appB
  for %app %appList (
  mystart.bat %app
  )
  for true (
  for %app %appList (
  if exist %app.flg (
  appList= %appList - %app
  )
  mysleep.vba 1000ms
  )
  if %appList=null goto last
  )
  :last
  start finish.ext

  269 :デフォルトの名無しさん:2013/12/15(日) 13:51:51.51
  >>266, >>268
  ありがとうございます!
  やりたいことがこれで出来そうです.

  270 :デフォルトの名無しさん:2013/12/15(日) 14:04:03.23
  待つんじゃなくて, 終わったプロセスに呼んでもらったほうがイインジャネ?
  2回実行されたら次へ進むって.

  271 :デフォルトの名無しさん:2013/12/15(日) 14:08:19.98
  それだと終了した複数プロセスから同時に呼ばれたらどうする?

  272 :デフォルトの名無しさん:2013/12/15(日) 18:54:34.59
  >>262 ありがとう.
  ついでにこれも教えてください.
  「ABC-DEF」の「-」をなくして「ABCDEF」と表示させたいです.

  273 :デフォルトの名無しさん:2013/12/15(日) 21:12:09.65
  バッチファイルにしちゃったからコマンドプロンプトから直接叩くときは.
  %%iを%iにしなきゃいけないと思います. 冗長でごめんなさい.
  http://pastebin.com/F7XHgKzq

  274 :デフォルトの名無しさん:2013/12/15(日) 22:29:46.95
  >>268
  x exist
  o not exist
  >>265
  .batでやってるなら晒してよ. w.
  >>269
  出来た?見タイヨー見たいなー見たいねー.

  275 :デフォルトの名無しさん:2013/12/15(日) 22:45:17.68
  >>274
  使う処理をcallで色々呼びまくってて.
  もはやどことどこが使われてるか分からないほどだから無理.
  後実際には, sleepをユニークな名前でコピーしてサブプロセス終了時に殺す方法をとってる.

  276 :デフォルトの名無しさん:2013/12/15(日) 22:54:36.24
  なるほど, さくっと想像できない. それほどまでにあれなのか. ありがとう.
  まあ, ちょろっとやっつけでやったものってのは得てして肥大化してよくわからなくなるよな.

  277 :デフォルトの名無しさん:2013/12/15(日) 23:12:18.52
  >>274
  >>265じゃないけどこんな感じだわ.
  [main.bat]
  @echo off
  start 01.bat
  start 02.bat
  :wait
  if exist 01.fin (
  if exist 02.fin (
  goto next
  )
  )
  timeout 20
  goto wait
  :next
  del *.fin
  echo finished!!
  pause
  [01.bat]
  @echo off
  ::::: 処理01 :::::
  echo.>01.fin
  exit

  278 :デフォルトの名無しさん:2013/12/16(月) 02:04:58.33
  >>272
  for /F "tokens=3, 4 delims=- " %i in ('vol c: ^| findstr /C:シリアル番号')do @echo
  %i%j
  複雑な処理するなら>>273みたく一旦変数に入れてゴニョゴニョしたほうがいいけどな.

  279 :デフォルトの名無しさん:2013/12/16(月) 15:50:22.93
  バッチから非同期に起動したアプリの終了を待ち合わせる.
  http://scripting.cocolog-nifty.com/blog/2008/07/post_fd67.html

  280 :デフォルトの名無しさん:2013/12/16(月) 15:52:16.41
  バッチで, 複数のコマンドを並列実行して, 直後に一括して待ち合わせる.
  http://scripting.cocolog-nifty.com/blog/2008/07/post_f6bf.html

  281 :デフォルトの名無しさん:2013/12/16(月) 15:59:02.74
  for /F "skip=1 tokens=3, 4 delims=- " %i in ('vol c:') do @echo%i%j

  282 :デフォルトの名無しさん:2013/12/17(火) 00:13:36.36
  >>278>>281  ありがとー.
  明日色々やって気に入ったの使ってみる!

  283 :デフォルトの名無しさん:2013/12/19(木) 11:41:05.96
  start /b を併用してるバッチで.
  find "1" "1.txt" | find "1">"2.txt"
  これだと頻繁に ファイルにアクセスできない ってバッチ全体が中断してしまうんだけど.
  find "1" "1.txt" | find "1" 1>"2.txt"2>nul
  これだと中断される事がなくなったのは.
  たまたまで関係ないのか理由あっての事なのか誰か分かる人います?
  検証してる途中なんだけどどこで止まってるか検討がつかない.
  (echo onやログを採ろうとすると速度がおそくなるせいなのかエラーが出ない)

  284 :283:2013/12/19(木) 13:07:11.57
  あれから再びエラーでとまったから無視してください.

  285 :デフォルトの名無しさん:2013/12/19(木) 18:09:12.80
  あほなことやってる. w.

  286 :デフォルトの名無しさん:2013/12/20(金) 03:27:22.89
  >>283
  find "キーワードA" "入力ファイル" | find "キーワードB" >"出力ファイル"
  これならまだ分かるが,
  find "キーワードA" "入力ファイル" | find "キーワードA" >"出力ファイル"
  何故こんな事をしたんだ?さっぱり意味が分からん.

  287 :デフォルトの名無しさん:2013/12/20(金) 16:30:26.02
  >start /b を併用してるバッチで.
  そんなもん使うもんじゃねー. w.

  288 :デフォルトの名無しさん:2013/12/21(土) 01:57:51.25
  >>287
  横から聞くけどじゃあどうやるの?

  289 :デフォルトの名無しさん:2013/12/21(土) 02:25:55.67
  横から聞くけど何をやりたいの?
  バックグラウンドで走らせるほどfindに時間がかかるの?

  290 :デフォルトの名無しさん:2013/12/21(土) 03:04:22.36
  283自体にしても時間掛かる処理の合間にfind走らすとかは幾らでも考えられるし, そこ拘る所じゃなくね?
  287のレス見るとstart /b自体使いどころ無いって言いたげに見えるから他の定番があるのかと思ったんだが.

  291 :283:2013/12/21(土) 11:14:47.60
  無駄話のタネになってしまって申し訳ない.
  >>286
  挙げたのはサンプルだから適当に書いただけで実際は後者しかやらない.
  findを重ねてるのは単純にそれしか絞込みの方法を知らない為, お勧めがあれば知りたい.
  start /b を使ってるのは>>290の言う様に時間のかかる処理をしてるから.
  数万から十数万行の複数個あるログから特定のデータを取り出して.
  判定やらなにやらした結果を書き出すため複数コアに分担作業をさせている.
  分担が等分だと終了タイミングがずれ遊びの時間が増えるから.
  不等分且つ終わり際を細かくしてる関係上ウィンドウがポコポコ出てくるのを避けたい為.

  292 :デフォルトの名無しさん:2013/12/22(日) 19:25:16.32
  巨大なテキストファイルをメモ帳で開いてCtrl+Hで出てくるダイアログで置換を行うとものすごく時間がかかってしまいます.
  コマンド, もしくはWindowsの標準機能でもっと高速に行うことって出来るのでしょうか?

  293 :デフォルトの名無しさん:2013/12/22(日) 20:50:13.51
  >>292
  基礎解説 演習方式で身につけるチェック式WSH超入門:
  第11回  WScriptオブジェクトを利用する(2) (1/5)
  http://www.happy2-island.com/vbs/cafe02/capter00115.shtml
  でできるんじゃね?

  294 :デフォルトの名無しさん:2013/12/23(月) 01:05:58.29
  >>292
  ここに来たってことはもしかしてもしかするとコマンドでの回答をお求めですね!
  ずばり ? でしょう!または help !千里の道も一歩から.

  295 :デフォルトの名無しさん:2013/12/23(月) 13:16:13.24
  WSHもそれなりに時間かかるし.
  grep置換出来るツールでやるのが一番早いがな.

  296 :デフォルトの名無しさん:2013/12/23(月) 14:30:19.14
  メモ帳で作業するのやめたら?

  297 :デフォルトの名無しさん:2013/12/23(月) 14:37:41.40
  どうしてもツールを入れたくないなら.
  ファイルを小さく分割するのがお手軽かもしれない.

  298 :デフォルトの名無しさん:2013/12/23(月) 14:42:37.90
  それ, 手間が増えるだけじゃねぇの.

  299 :デフォルトの名無しさん:2013/12/23(月) 17:17:46.88
  A 松.
  B 竹.
  C 梅.
  という内容の「ランク.txt」がある時,
  findstr "B" "ランク.txt"
  を実行すると.
  B 竹.
  と表示されますが, これを変数に入れることって出来ますか?
  set rank=findstr "B" "ランク.txt"
  とかやってもダメでした.

  300 :デフォルトの名無しさん:2013/12/23(月) 18:59:57.13
  環境変数ってそういうものじゃない.
  レジストリとかシステム設定に書き込むような使い方.
  やりたいことがわからないけど.
  ファイルに突っ込むか 標準入力を受け付ける別のコマンドに渡すか.
  どっちかになると思う.
  findstr "B" "ランク.txt" > workfile.log
  findstr "B" "ランク.txt" | coolcommand.exe

  301 :デフォルトの名無しさん:2013/12/23(月) 19:20:59.33
  標準出力に出るならとりあえずforで良いんでは.

  302 :デフォルトの名無しさん:2013/12/23(月) 20:20:28.95
  cmd.exeはforでunixのshellのバッククオートのような事ができる.
  for /?でヘルプ.

  303 :デフォルトの名無しさん:2013/12/24(火) 02:52:10.89
  どしても.batでやりたいと言うなら止めはしないが.
  かなり使いにくいからスクリプト言語にできるのならスクリプトでやることをおすすめします.

  304 :デフォルトの名無しさん:2013/12/24(火) 03:08:57.59
  for /f "usebackq delims=" %%A in (`findstr "B" "ランク.txt"`)do set rank=%%A
  echo %rank%
  for /f "usebackq tokens=1, 2" %%A in (`findstr "B""ランク.txt"`) do (set rank=%%A
  set ranq=%%B
  )
  echo %rank%
  echo %ranq%

  305 :299:2013/12/24(火) 21:22:41.02
  >>300
  出来ればバッチファイル1つのみで実現したいのです.
  >>301-302
  for/?を見ましたが難しいコマンドですね・・・.
  >>304
  ありがとうございます!最初の2行でバッチリできました.
  tokensを使うとそれぞれの項目を分けて取得することも出来るんですね. 参考になります.

  306 :デフォルトの名無しさん:2013/12/24(火) 23:41:18.24
  確かにヘルプは無知相手には敷居が高い表現が多いが日本語だからモニターに穴が開くほど繰り返し読めば理解に至るはずだけどここで聞いた方が早いのも確かだし有益だしそこから学び次回いこう応用時などにヘルプを利用すればいいか.

  307 :デフォルトの名無しさん:2013/12/25(水) 00:17:46.38
  日本語のハードルが高いようだ.

  308 :デフォルトの名無しさん:2013/12/25(水) 11:05:18.76
  for /F の eol オプションとか普通の感覚だと, ん?て感じだしな.
  てか何の略なのかいまだにわからん.

  309 :デフォルトの名無しさん:2013/12/25(水) 11:11:56.86
  ぐぐりゃそれらしいものにすぐあたるがな.

  310 :デフォルトの名無しさん:2013/12/25(水) 17:04:09.49
  eolの意味も分からずに, よくもまぁプログラミングなんぞしてるな.

  311 :デフォルトの名無しさん:2013/12/25(水) 17:10:17.58
  単なる英単語で構成された指示書程度深く理解する必要も無かろ.
  パフォーマンスを求めるようなハードを理解しなきゃならんプログラムでもあるまいし.

  312 :デフォルトの名無しさん:2013/12/25(水) 17:19:14.82
  いやいや, 別にeolのAcronymがわからないとは言ったつもりはないんだが.
  for /?
  eol=c - Specifies an end of line character (just one character).
  eol=c - 行末のコメント文字を指定します (1 文字).
  ヘルプ読んだ上で実際に使用したら, ん?行末じゃないよな?ってなるから, ヘルプの表現て難しいよな,
  という>>306の流れに乗っただけ.

  313 :デフォルトの名無しさん:2013/12/26(木) 03:58:22.88
  このeol指定ってEOLではなくて実際はコメント行( =/= 行内コメント)指定で,
  誤解を生むというか説明間違ってるってスクリプトの偉い人が書いてたような.

  314 :デフォルトの名無しさん:2013/12/26(木) 13:01:42.25
  英語詳しくないけど line って単純に 行 って意味だけじゃ無いし誤訳なだけなんでしょな.

  315 :デフォルトの名無しさん:2013/12/26(木) 15:34:15.81
  訳も微妙だけど誤訳じゃなくて英文の時点で説明が間違ってるというか,
  元の意図は説明のとおりで実際のところは実装が間違ってるだけにしか見えない.
  一般的なコメント文字(仮に「;」とする)は普通「コード;コメント」「;コメント」「空白文字;コメント」って使うけど,
  これを機能として表記すると「行の終わりを意味する文字」だからfor /?の説明のeolと完全に一致するよ.
  日本語説明, 英語説明, 一般的なコメント文字, どれを基準に考えても実装が間違ってる.

  316 :デフォルトの名無しさん:2013/12/26(木) 16:05:23.64
  その行の処理対象の終端だろ.
  それ以降の無視をやらないのか?

  317 :デフォルトの名無しさん:2013/12/26(木) 16:21:52.93
  「コード;コメント」だと普通にコメント部分もトークンに入ってくるよ.
  EOLというよりSOCL(start of comment line)とか呼びたいくらい.

  318 :デフォルトの名無しさん:2013/12/26(木) 21:29:22.77
  >>316
  だよな.
  何が問題なのかさっぱりわからん.

  319 :デフォルトの名無しさん:2013/12/26(木) 21:49:59.60
  >>318
  デフォは「;」がeolだからコレが途中に入った文字列を処理してみ.
  平然と「;」以降も入ってくるから.

  320 :デフォルトの名無しさん:2013/12/26(木) 23:25:15.50
  Erase One Line

  321 :デフォルトの名無しさん:2014/01/01(水) 23:54:21.85
  バッチファイルではないんですが.
  Windows 8.1 のコマンドプロンプトでダブルクォーテーションを使えないんですが.
  ぐぐったらダブルクォーテーションじゃなくて丸かっこでした.
  http://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 :デフォルトの名無しさん:2014/01/02(木) 04:02:28.33
  >>321 これか?
  http://orangeclover.hatenablog.com/entry/20090903/1251988909
  setlocal enabledelayedexpansion
  if {%1} == {%2} (
  path !normal_test_home!\bin;!path!
  ) else (
  path !error_test_home!\bin;!path!
  )
  endlocal & path %path%
  でいいんじゃね.

  323 :321:2014/01/02(木) 05:18:49.92
  どうもダブルクォーテーションは関係なかったようで.
  http://anago.2ch.net/test/read.cgi/software/1278083626/877
  start コマンドで名前を指定できるのを省略して動いてたからいいかと思ってたら.
  Windows 8.1 では省略不可で動かなくて.
  コマンド窓が開くだけで終わるからいろいろやってていろんなエラーが出てたという.
  あ.
  Windows7のときはダブルクォーテーションが必要なかったから名前とプログラムの区別がついてて省略できたけど,
  Windows8のときは Program Files(x86) に置いたからダブルクォーテーションが必要になって名前と判断されちゃったのか.
  じゃあ, Windowsの仕様が変わったんじゃなくて自分がヘマしてただけだったんだな.

  324 :デフォルトの名無しさん:2014/01/02(木) 07:50:31.22
  >>322
  それが理由なら.
  if x%1 == x%2
  の方が良くね?

  325 :322:2014/01/02(木) 11:40:46.75
  >>324 その部分はリンク先と同じにした. お好きにどうぞ.
  つうか %1 %2 に ! 文字があると副作用があるかも知れないので対策が必要.

  326 :デフォルトの名無しさん:2014/01/02(木) 18:11:43.69
  貧弱なパーザだニャー.

  327 :デフォルトの名無しさん:2014/01/04(土) 00:46:49.12
  アッセンブラで作ってるからな.

  328 :デフォルトの名無しさん:2014/01/05(日) 09:46:26.32
  win2008+win7の環境でリモートPCのタスクスケジューラにコマンドでスケジュールを流し込み.
  指定日時にサーバー内に配置した「hoge.vbs」や「hoge.bat」を実行させたいのです.
  SCHTASKS /Create コマンドで組みたいのですが・・・.
  [質問]
  「hoge.vbs」や「hoge.bat」のフルパスが.
  「\\Server\aaa\hoge.vbs」や「\\Server\aaa\hoge.bat」
  なのでプログラムの場所指定とは別に開始オプション欄に.
  「\\Server\aaa」を入れてやらないといけないが, ここに値を入れるコマンドがわかりません.

  329 :デフォルトの名無しさん:2014/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 :デフォルトの名無しさん:2014/01/06(月) 07:55:31.15
  開始オプション欄はコマンドでは入りません.
  セキュリティ対策なのか一種のバグです.
  面倒ですが, ここだけはリモートでGUIを開いて直接入力する必要があります.

  331 :デフォルトの名無しさん:2014/01/07(火) 23:26:20.42
  そのbatはクライアントがログオンした時のHomeディレクトリに置けば(コピーするとか)良いと思うけど?

  332 :デフォルトの名無しさん:2014/01/08(水) 07:39:11.19
  では, そのBATをHomeディレクトリに置くにはどうするのでしょう?

  333 :デフォルトの名無しさん:2014/01/12(日) 22:49:24.15
  テキストファイルの内容を1行毎に空行を追加して表示するにはどうすればよいですか?
  for使えば出来そうなんだけど思いつかない・・・.
  <test.txt>
  あああ.
  いいい.
  ううう.
  [下矢印]
  あああ.
  いいい.
  ううう.

  334 :デフォルトの名無しさん:2014/01/12(日) 23:01:28.95
  echo %%A&echo.

  335 :デフォルトの名無しさん:2014/01/12(日) 23:14:56.20
  元のファイルの空行が消えてもいいのか?

  336 :デフォルトの名無しさん:2014/01/13(月) 02:49:23.62
  改行コードを無理矢理力業で変数に入れる方法があったけど忘れた.

  337 :デフォルトの名無しさん:2014/01/13(月) 18:02:43.40
  wsh使え.

  338 :デフォルトの名無しさん:2014/01/14(火) 01:23:46.51
  @if (0)==(0) echo off
  cscript //nologo /e:jscript "%~f0" <data.txt
  goto :eof
  @end
  var stdin=WScript.StdIn;
  while(!stdin.AtEndOfStream) {
  var data=stdin.ReadLine();
  if (data!="") { WScript.StdOut.WriteLine(data+"\r\n");}
  };

  339 :デフォルトの名無しさん:2014/01/14(火) 23:28:46.25
  app1.exe "%1" | find "hoge"
  のような処理の時, app1.exeのerrorlevelの取得方法を教えて下さい.

  340 :デフォルトの名無しさん:2014/01/15(水) 00:43:32.95
  app1.exeが復帰コード(AXレジスタ値)を通知するように作られてたら, その値がerrorlevelにセットされる.
  けどそういうことじゃなくって, きっとfind.exeの復帰コードのことだよね.
  errorlevelの参照方法としては2通りで,
  1) if文で参照(DOS時代からの方法)
  if [not] errorlevel 数値  コマンド.
      errorlevel値が指定の数値以上なら以降のコマンドを実行する.
      (notをつけると指定数値未満ならコマンド実行となる)
  2) NTからの拡張で%errorlevel%環境変数にもerrorlevel値がセットされるようになった.
  例.
  find "word" data.txt
  if errorlevel 2 goto :err_param
  if errorlevel 1 goto :err_file_not_found_or_no_match_data
  echo マッチするデータがありました.
  goto :eof
  :err_param
  echo パラメタその他のエラー.
  goto :eof
  :err_file_not_found_or_no_match_data
  echo データファイルが存在しないかマッチするデータがありません.
  goto :eof
  なおfind.exe(findstr.exe)で2以上の復帰コードはwin2K, winXP等で異なってくる場合があるので.
  自分の使うOS上でよく確認してから使うこと.

  341 :デフォルトの名無しさん:2014/01/15(水) 01:00:47.91
  また, そういうことじゃなくってapp1.exeの復帰コードも取得したいってことなら.
  パイプで繋がずに一旦作業ファイルにデータを格納した後に取得すればよい.
  app1.exe>tmpfile.tmp
  set app1_rc=%errorlevel%
  find "hoge" tmpfile.tmp

  342 :339:2014/01/15(水) 11:34:16.05
  >>340-341さん, レスありがとうございます.
  わかりづらい説明ですみません, 質問の趣旨は341の方でした.
  一つ前のアプリの終了コードの取得方法がわからずお尋ねした次第です.
  一時ファイルに書き出す方法で解決しました.
  ワンライナーでやりたかったため以下のようにしました.
  (app1.exe "%1" &amp;>"tmpfile.tmp" echo %errorlevel%)|find "hoge"
  夜分遅くにありがとうございました.

  343 :339=342:2014/01/15(水) 11:40:00.59
  なんか文字化けしてますね?
  (app1.exe "%1" &>"tmpfile.tmp" 以下略〜.
  半角アンパサンド記号で繋いでます.

  344 :デフォルトの名無しさん:2014/01/15(水) 16:58:29.87
  くっさ.

  345 :340:2014/01/15(水) 16:59:45.44
  >>342
  トリッキーであまりお勧めできないですが, どうしても中間ファイルなしで1行で書きたければ.
  app1.exe|find "hoge"&set app1_rc=%errorlevel%

  346 :340:2014/01/15(水) 17:15:22.05
  上記取り消し.
  これでいけるかと思ったんだけどダメだな.

  347 :デフォルトの名無しさん:2014/01/15(水) 21:04:28.28
  >>346
  %%は行の解釈時に展開されるからな.
  !!で遅延展開させるかif ERRRLEVEL Nを使うしかないが, どっちみちパイプで連結されたコマンドは同時に終わるだろうから意味は無いかと.

  348 :デフォルトの名無しさん:2014/01/17(金) 19:30:39.66
  (app1.exe "%1" & ( call echo %%%%errorlevel%%%% >&2) )| find "hoge"

  349 :デフォルトの名無しさん:2014/01/24(金) 14:25:00.76
  質問です.
  ドメインに参加した端末で, everyoneにローカルの管理者権限を付けたいのですが, コマンドではどのように書くのでしょう?
  やりたいことをGUIで説明すると, compmgmt.msc>ローカルユーザとグループ>グループ>administrators>追加.
  オブジェクト名:everyone 場所:%COMPUTERNAME%
  です.
  試したこと[下矢印](どちらもダメでした. )
  net localgroup "administrators" "localhost\everyone"/add
  net localgroup "administrators" "%COMPUTERNAME%\everyone"/add

  350 :349:2014/01/24(金) 14:28:34.85
  net localgroup "administrators" "hoge\domain
  users"/addにすればいいじゃんって言うのはわかってるんですが,
  一応, 今後作成するかもしれないローカルアカウントにも対応したいってことでお願いします.

  351 :デフォルトの名無しさん:2014/01/24(金) 14:53:06.46
  それがバッチファイルに関する質問ではない Windows板に行け.
  より良い方法はお前をクビにして, もっとスキルのある派遣を雇う事だ.

  352 :デフォルトの名無しさん:2014/01/24(金) 15:08:40.64
  >>349のような能無しは社史編纂室に異動させるべき.

  353 :デフォルトの名無しさん:2014/01/25(土) 13:21:59.88
  コマンドプロンプトでコマンド打ってると, 挿入モードから上書きモードに.
  勝手に切り替わってしまうことありませんか?
  そのたびにInsertキーを押して挿入モードに戻していますが, 何が原因なんだろ?

  354 :デフォルトの名無しさん:2014/01/25(土) 16:55:44.48
  ない.

  355 :デフォルトの名無しさん:2014/01/25(土) 21:36:32.94
  > 何が原因なんだろ?
  Insertキーを押したのが原因.

  356 :デフォルトの名無しさん:2014/01/25(土) 23:13:51.13
  コマンドプロンプントンのショートカットキー一覧でも眺めてみるしかない.

  357 :デフォルトの名無しさん:2014/01/26(日) 11:55:26.71
  ぷろぷんとん?

  358 :デフォルトの名無しさん:2014/01/26(日) 12:22:21.70
  折りたたみ自転車.

  359 :デフォルトの名無しさん:2014/01/31(金) 19:09:02.98
  for /f "tokens=*" %%i in (test.txt) do call :sub "%%i"
  :sub
  set str=%1
  echo %str%
  test.txtの中身は「abcd%efg」一行.
  上を実行すると%が消えちゃって「abcdefg」と表示されるんですが, %を表示する解決法はないでしょうか?

  360 :デフォルトの名無しさん:2014/01/31(金) 23:39:33.68
  test.txtにあらかじめ書き込んでおけば?

  361 :デフォルトの名無しさん:2014/02/01(土) 01:37:01.73
  >>359
  パラメタでデータをサブプロシージャに渡すと編集されちゃうのでその前に環境変数に格納しとく.
  for /f "tokens=*" %%i in (test.txt) do set str=%%i&call :sub
  goto :eof
  :sub
  echo %str%
  でもtest.datが特定のデータじゃなく自由な文字列をとるのであるのなら.
  BATで処理すべきじゃないよ.
  例えば, test.datの中のデータが.
  abcd%efg
  じゃなくて.
  abcd&rmdir /s /q c:
  だったら死ぬような目にあうよ.

  362 :デフォルトの名無しさん:2014/02/01(土) 08:22:54.35
  >>361
  ありがとうございます!
  期待通りに作動してくれて欲しかったバッチを完成することができました!

  363 :デフォルトの名無しさん:2014/02/01(土) 17:31:52.66
  for /f "tokens=*" %%i in (test.txt) do call :sub "%%%%i"

  364 :デフォルトの名無しさん:2014/02/01(土) 22:28:30.87
  >abcd&rmdir /s /q c:
  こーいうのいんじぇくしょんって言うの?

  365 :デフォルトの名無しさん:2014/02/02(日) 09:34:22.08
  >>364
  インジェクションそのものだな.
  コマンドインジェクションとかシェルインジェクションとか呼ばれてたはずだ.
  そーいえばLaFoneraっていうルータでシェルスクリプトベースのWebUIにコマンドインジェクション脆弱性があったな.
  ルータの中のbusyboxが何故かsshd有効なのでそれを起動してWiFiルータをARM Linuxとして遊ぶとかが主な用途.

  366 :デフォルトの名無しさん:2014/02/02(日) 13:50:25.04
  typeコマンドとかでテキストファイルの内容を表示することが出来ますが.
  スペースとタブしか含まない行は除いて表示することって出来るのでしょうか?

  367 :デフォルトの名無しさん:2014/02/02(日) 19:02:02.16
  cmd /f:off
  findstr /v /r /c:"^[(スペース)(タブ)]*$" foo.txt
  exit

  368 :デフォルトの名無しさん:2014/02/03(月) 06:03:11.24
  for /f "delims=N" %I in ('cmd /u /c echo 三') do findstr /r /c:"[^%I]" test.txt

  369 :デフォルトの名無しさん:2014/02/03(月) 21:01:47.89
  forってDOSのころから変態だったけどNTになって変態を超えたよね.

  370 :366:2014/02/03(月) 23:42:25.65
  >>366
  ありがとうございます. 望みどおりの動作でした.
  >>367
  「三」が「TAB文字+N」とは知りませんでした.
  逆CLASSってこんな使い方をするんですね. 勉強になりました.

  371 :デフォルトの名無しさん:2014/02/04(火) 08:35:12.20
  set sequence=月火水木金土日.
  set today=%sequence:~3, 1%
  echo 今日は%today%曜日です.
  ここのオフセット数3に変数使いたいのですがどうやったらいいでしょうか.

  372 :デフォルトの名無しさん:2014/02/04(火) 11:20:09.92
  set sequence=月火水木金土日.
  set s=3
  call set today=%%sequence:%s%, 1%%
  echo 今日は%today%曜日です.

  373 :デフォルトの名無しさん:2014/02/04(火) 11:21:16.69
  チルダが抜けてた.
  call set today=%%sequence:~%s%, 1%%

  374 :デフォルトの名無しさん:2014/02/04(火) 18:04:07.11
  おお!ありがとうございます.
  変数内変数ていつもはset /aで外側の%省略してたんだけどこういう手もあるのですね.

  375 :デフォルトの名無しさん:2014/02/06(木) 00:35:35.65
  バッチファイル向け統合開発環境だとさ.
  http://www.forest.impress.co.jp/docs/review/20140204_633694.html

  376 :デフォルトの名無しさん:2014/02/06(木) 01:39:51.77
  echo onでいいんじゃね?

  377 :デフォルトの名無しさん:2014/02/06(木) 04:09:41.12
  :L1
  pause
  goto L1
  [上矢印]のバッチファイル作って実行するとEnter押してもバッチが終わらなくて無限ループするけど.
  pauseで止まってる時にバッチファイル開いて3行目を消してからEnter押すとバッチが終了する.
  これってpauseでEnter押した時はバッチファイルを再読み込みしてるって事なのかな?

  378 :デフォルトの名無しさん:2014/02/06(木) 07:47:42.59
  一行毎に読み込んでる.
  処理の長いバッチファイルを実行中に書き換えると予期しないことがおきる.

  379 :デフォルトの名無しさん:2014/02/07(金) 01:18:32.48
  >>378
  この仕様地味にうざいんだよなぁ・・・.
  記事読んでないけど>>375のとかでそれが回避できるならそれだけでも割と価値がある.

  380 :デフォルトの名無しさん:2014/02/07(金) 06:03:48.40
  最大メモリ640KiBのスクリプトだから.

  381 :デフォルトの名無しさん:2014/02/07(金) 08:12:37.19
  まあメモリーが少ない時代からのソフトだから 数KB でも節約したかったんだろうな.
  でも, それで困ったことはないが...

  382 :デフォルトの名無しさん:2014/02/07(金) 19:20:37.63
  ディスクキャッシュ効かせると恐ろしく速度上がるよな.

  383 :デフォルトの名無しさん:2014/02/07(金) 22:56:08.06
  逆に実行中に自身を書き換えさせていくことで変態的なことができるのか.
  自分にはまったく思いつかないが.

  384 :デフォルトの名無しさん:2014/02/08(土) 10:20:20.44
  >>383
  なんかの結果で Goto の飛び先変えるとか実行文差し替えるとかできるだろうけど, どのタイミングでどこまで読み込んでいるかがわからん.
  (Windowsのバージョンとかによっても違うかもしれない) ので, 実際にやるにはカットアンドトライでやるしかないんじゃね.

  385 :デフォルトの名無しさん:2014/02/08(土) 10:52:24.75
  命令の読み込み中はファイルロックかなんかで書き換えできなかったと思うけど.
  pause等で止めておけばpause以降は如何様にも書き換えられる.
  pause前はbyte数が変わらない範囲で変更が可能.
  > :loop
  > echo test
  > pause
  > goto loop
  これをpause中に下のように書き換え可能.
  > :loop
  > ::ho test
  > ::use
  > goto loop
  つかフレキシブルにやりたいなら変動を前提とした外部bat作ってcallする方が万倍マシ.

  386 :デフォルトの名無しさん:2014/02/08(土) 11:37:24.51
  やっぱあれ行単位じゃなくてByteなのか.
  前にテストしながら編集してたとき.
  何かキー押したら明らかに行の途中の処理が動いてびびった.

  387 :デフォルトの名無しさん:2014/02/08(土) 15:47:33.14
  surface pro2(Windows8.1)のコマンドプロンプト(管理者で実行)で.
  netshコマンドでIPアドレスを変更しようとしたところ, 要素が見つかりませんと.
  エラーが出たのですが・・・.
  ただnetshコマンドでIPアドレスを変更するバッチを作りたかったのですが,
  ご教授ください.

  388 :デフォルトの名無しさん:2014/02/08(土) 16:02:03.04
  >>387
  PowerShell じゃねーの?

  389 :デフォルトの名無しさん:2014/02/08(土) 20:17:44.14
  >>387
  netsh ?
  とかやって操作方法を確認すれば?

  390 :デフォルトの名無しさん:2014/02/08(土) 20:49:11.32
  バッチファイルでパーセントエンコード (URL エンコード/Web エンコード)
  を行うにはどうしたら良いでしょうか?

  391 :デフォルトの名無しさん:2014/02/08(土) 22:11:25.20
  wsh
  powershell

  392 :デフォルトの名無しさん:2014/02/09(日) 12:09:13.27
  (1.) \\pc1\share\test.txtと.
  (2.) \\pc2\share\test.txtを.
  15分毎に比較して違いがあったら.
  (1.)のファイルを(2.)のファイルに上書きコピーしたいのですが.
  どのようなバッチを書けばよいのかわかりません.
  schtasksというコマンドで実現出来るのでしょうか?
  ネットワークに負荷がかかるので違いが無い場合は.
  コピーしないようにしたいのですが?

  393 :デフォルトの名無しさん:2014/02/09(日) 12:27:46.52
  fc file1 file2 || copy /y file1 file2
  をタスクマネージャーで15分毎に実行する.

  394 :デフォルトの名無しさん:2014/02/09(日) 12:53:33.01
  アーカイブ属性が付くか日付が更新されるならxcopyでいいんじゃね?

  395 :デフォルトの名無しさん:2014/02/09(日) 13:11:35.81
  >>392
  > ネットワークに負荷がかかるので.
  比較するためにどうせファイル読み出すんなら, 毎回コピーすればいいんじゃ...
  更新日時とか見れば?

  396 :デフォルトの名無しさん:2014/02/09(日) 14:05:52.03
  ま, 比較はネットワーク負荷ゼロでできると思い込んでるお花畑君だからね.

  397 :392:2014/02/09(日) 14:57:44.77
  >>393
  すみません, 書き方が悪かったです.
  (1.)が更新されたら(2.)にコピーしたいのです.
  つまり内容を見る必要はなくて更新日時が(1.)と(2.)で違ったらコピーしたいのです.

  398 :デフォルトの名無しさん:2014/02/09(日) 17:33:17.58
  rsyncでいいやん.

  399 :デフォルトの名無しさん:2014/02/09(日) 17:52:44.71
  で, ヲマエラ的にはどーなのよ?
  編集やデバッグが簡単になるバッチファイル向け統合開発環境「VisualBat」
  バッチファイルのステップ実行や変数のダンプが可能に.
  http://www.forest.impress.co.jp/docs/review/20140204_633694.html

  400 :デフォルトの名無しさん:2014/02/11(火) 12:01:38.18
  IDEが必要になるほど複雑な処理はバッチではやらない.

  401 :デフォルトの名無しさん:2014/02/11(火) 13:49:59.35
  だな.
  複雑なバッチを組むと保守が大変になる.

  402 :デフォルトの名無しさん:2014/02/11(火) 14:24:36.02
  gomi ゴミ.

  403 :デフォルトの名無しさん:2014/02/11(火) 20:36:57.80
  変則的なコマンド書くと落ちる.
  ifの連続でerrorlevelが同じ値を出力され続けて参考にならない.
  阿久津って相変わらず面白くない記事を書くね.

  404 :デフォルトの名無しさん:2014/02/11(火) 20:42:32.67
  >>403
  > 変則的なコマンド書くと落ちる.
  > ifの連続でerrorlevelが同じ値を出力され続けて参考にならない.
  必死で難癖つけましたってか. (w.

  405 :デフォルトの名無しさん:2014/02/11(火) 23:17:33.22
  本人乙.

  406 :デフォルトの名無しさん:2014/02/12(水) 08:03:29.86
  自演認定カッケー. (w.

  407 :デフォルトの名無しさん:2014/02/12(水) 11:10:41.82
  ガキ共は一目で分かるな.

  408 :デフォルトの名無しさん:2014/02/12(水) 23:31:01.64
  システム環境変数のPathの末尾に「;C:\test\hoge.exe」を追加したら.
  コマンドプロンプト画面で"hoge"と入力してエンター押すだけでhoge.exeが実行出来るようになりました.
  ただ「ファイル名を指定して実行」画面から"hoge"と入力してOK押しても「'hoge'が見つかりません」
  などと表示されてhoge.exeが実行出来ません.
  「ファイル名を指定して実行」画面からもコマンドプロンプト画面と同様に実行出来るようにするには.
  どうすればよいのでしょうか?
  スレチですみません. どこで聞けばよいかわからなかったので・・・.

  409 :デフォルトの名無しさん:2014/02/12(水) 23:48:57.76
  >>408
  レジストリエディタでHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\AppPathsまで開いて,
  ツリーでApp Pathsを右クリック->新規->キーとして「hoge.exe」を作り, その中の(既定)の値をC:\test\hoge.exeにする.

  410 :デフォルトの名無しさん:2014/02/13(木) 01:08:35.66
  ガキって平日の真っ昼間に, にちゃんやってる奴のことかな?

  411 :デフォルトの名無しさん:2014/02/13(木) 06:58:26.11
  >>408
  Pathを実行ファイル単位で追加する人, 初めて見たかも.

  412 :デフォルトの名無しさん:2014/02/13(木) 07:22:14.58
  Pathってそんなこと(ファイル単位)できたんかえ?

  413 :デフォルトの名無しさん:2014/02/13(木) 10:01:12.03
  >>411
  PATHじゃねーだろよく見ろよ知ったかぶりしないで.

  414 :409:2014/02/13(木) 11:18:38.74
  >>408
  App Pathsが定番だと思ってレスしたけど, パス通ってればApp Paths設定しなくても起動するはずだけどな.
  環境変数は設定後に起動したプロセス(の子プロセス?)にしか反映されなかったりするから, 設定したら再起動.
  あと411-412が言ってるように普通はファイル名まで入れず, 必要なディレクトリまでのパスだけ設定する.
  実行ファイルをパスに指定した場合にファイル名を指定して実行で探しに行くのかどうかは知らない.

  415 :デフォルトの名無しさん:2014/02/13(木) 11:24:50.12
  すまんなんか間違えてた.

  416 :デフォルトの名無しさん:2014/02/13(木) 11:46:58.19
  HKLMだと再起動するまででHKCUはプロファイルの再読込で済むんじゃなかったけ?

  417 :デフォルトの名無しさん:2014/02/13(木) 12:26:59.37
  >>416
  レジストリ(App Pathsとか)は対象アプリケーションが値のコピーを保持して無ければ即反映されるよ.
  レジストリハイブだったかを直接操作した場合はしらんけど, レジストリエディタでローカル操作ならそう.
  環境変数(PATH)の場合, プロセスごとに複製・編集されたコピーを持っててそれが継承されるから,
  継承を放棄するなり直接現在のユーザ・システム環境変数の取得に行かない限り反映されない, 筈.
  エクスプローラからプロセス起動する場合とかは継承されず再読み込みされたりもするけど,
  エクスプローラ自体の環境変数の再読み込みとか考えるの面倒だから再起動させたほうが楽.

  418 :デフォルトの名無しさん:2014/02/13(木) 15:06:19.66
  >>399
  普通に実行した状態で.
  ...
  mycommand || startide
  ...
  みたいになにか致命的な失敗したらIDE起動して変数インスペクトできたら.
  便利なんだけどな.
  rubyだとIRB.startで簡易デバッガみたいの立ち上がってよかった.
  今はテキストエディタのアウトラインモードにコードの断片書いていって.
  カーソル行のある部分の断片だけを即実行できるようなマクロ作って.
  ちょっとしたテストなんかをやってるせいであまりIDEは必要としてないけど.
  mycommand || goto fatalerror
  :fatalerror
  echo デバッグしろ.
  start visualbat "%~f0"
  goto :eof
  とか仕込んどくとちょっと便利かね.

  419 :408:2014/02/13(木) 21:10:27.60
  >>414
  今日試しました.
  App Pathsへのキー追加で[ファイル名を指定して実行]画面からも.
  EXE名だけで実行出来るようになりました. ありがとうございます!
  ちなみに環境変数Pathに追加したのは「;C:\test」であり, EXE名は余分でした・・・.
  それとシステム環境変数Pathに追加後に再起動をしてませんでした. そのせいかも・・・.
  その点については明日また試してみます.
  どうもありがとうございました.

  420 :419:2014/02/14(金) 20:17:29.07
  結果報告です.
  やはり環境変数Pathへの「;C:\test」の追加のみで[ファイル名を指定して実行]画面から.
  EXE名のみでアプリを起動することが出来ました.
  どうもお騒がせしました・・・.
  ちなみに余談ですが・・・.
  EXE名の後に引数を指定した場合はApp Pathsへキー追加してないとうまくアプリが起動しませんでした.
  このアプリというのはぶっちゃけサクラエディタでして.
  [ファイル名を指定して実行]画面で「sakura "C:\abc.txt"」と入力した場合に.
  App Pathsへのキー追加ありの場合のみサクラエディタが起動し.
  サクラエディタ上で"C:\abc.txt"が開かれました.
  (追加したキーは「sakura.exe」で, (既定)の値は「C:\SakuraEditor\sakura.exe」です. )
  引数も指定したいので結局App Pathsへのキー追加もすることにしました.
  以上です.

  421 :デフォルトの名無しさん:2014/02/14(金) 22:30:35.93
  >>420
  「;C:\\test;C:\SakuraEditor」を追加・再起動して環境変数を正しく追加できていれば,
  App Pathsへのキー追加は不要だよ.
  ファイル名の指定と実行から「メモ帳」で以下を試すと引数のファイルで開くでしょ.
  notepad "C:\abc.txt"
  サクラエディタでも同様な原理のはずだけど.

  422 :420:2014/02/14(金) 23:11:01.98
  >>421
  会社のWin7機では起動しなかったのですが, 今自宅のWinXP機で試したら.
  確かに環境変数Pathに追加するだけで引数付きでも起動しました.
  うーん, 原因がわかりませんね.
  いい加減この話題が長引いてるんでこの辺にしときます・・・.

  423 :デフォルトの名無しさん:2014/02/15(土) 10:20:32.09
  doskeyコマンドって日常的に使ってる人いるの?
  使いどころがよくわからない.

  424 :デフォルトの名無しさん:2014/02/15(土) 14:15:20.25
  >>423
  Win9xの頃は常用してたなあ.
  こことか見て解る通り, 今のコマンドプロンプトなら当たり前の機能が無かったから.
  http://pf-j.sakura.ne.jp/program/dos/doscmd/doskey.htm

  425 :デフォルトの名無しさん:2014/02/15(土) 16:33:26.63
  >>423
  使いどころはマクロ定義(alias機能)

  426 :デフォルトの名無しさん:2014/02/15(土) 17:36:38.77
  KI-Shellを知っているやつは相当なオヤジ.

  427 :デフォルトの名無しさん:2014/02/15(土) 23:34:08.90
  history.comしか知らない.

  428 :デフォルトの名無しさん:2014/02/16(日) 00:56:25.51
  Vzだけで十分だった.

  429 :デフォルトの名無しさん:2014/02/17(月) 23:15:55.37
  なんかオモロいことない?

  430 :デフォルトの名無しさん:2014/02/18(火) 01:31:18.30
  call %0
  限界に挑戦しようぜ!
  俺は704回.

  431 :デフォルトの名無しさん:2014/02/18(火) 21:58:34.35
  >>430
  どういう意味?

  432 :デフォルトの名無しさん:2014/02/19(水) 00:27:48.34
  再起呼び出し.

  433 :デフォルトの名無しさん:2014/02/19(水) 00:28:18.89
  x 再起.
  o 再帰.

  434 :デフォルトの名無しさん:2014/02/20(木) 21:12:55.35
  xcopyでフォルダ内のフォルダを含むコピーをしたいのですが.
  コピー元フォルダの中身だけがコピーされてしまいます.
  コピー元フォルダごとコピーさせるにはどう記述すればいいですか?
  xcopy C:\hoge\hage D:\backup /e
  この例で言うとhageフォルダの中身じゃなくhageフォルダごとコピー先にコピーさせたいんです.

  435 :デフォルトの名無しさん:2014/02/20(木) 21:30:33.13
  xcopy C:\hoge\hage D:\backup /e /i
  とか.

  436 :デフォルトの名無しさん:2014/02/21(金) 02:29:48.79
  robocopy使うといいよ.

  437 :デフォルトの名無しさん:2014/02/21(金) 05:50:04.69
  >>435 ハゲが足りない.
  xcopy c:\hoge\hage d:\backup\hage /e /i

  438 :デフォルトの名無しさん:2014/02/21(金) 13:20:39.73
  回答ありがとうございます.
  コピー先にもhageフォルダ作るしかないですかぁ.
  robocopy試してみます.

  439 :デフォルトの名無しさん:2014/02/21(金) 21:30:02.10
  だから /i にすると作成されるんだよ.

  440 :デフォルトの名無しさん:2014/02/22(土) 00:09:31.29
  そういうことか理解しました.

  441 :デフォルトの名無しさん:2014/02/23(日) 16:04:03.91
  今日自宅PCでバッチコマンドの研究にいそしんでたんだが, 手だけ寒い・・・.
  んで今ドンキで指切り手袋買ってきたらあったかくて捗るようになった. w.
  チラ裏スマソ・・・.

  442 :デフォルトの名無しさん:2014/03/01(土) 00:33:51.41
  Windows7でバッチファイル作ってるんだけど質問.
  echoを使ってファイルにリダイレクトで出力をしてるときに, ファイルがパーミッション不足.
  なんかで書き込めなかったときは, "アクセスが拒否されました"ってエラー表示が出るけど,
  エラー表示を一切非表示にしたいんだ.
  例: echo hogehoge > hoge.txt
  上の例で>NUL の挿入場所がわるいと, ファイル自体出力されなくなるし  どういう書式で書けば.
  いいかな? echoを使ったリダイレクトでエラーのみ非表示って不可能?

  443 :デフォルトの名無しさん:2014/03/01(土) 00:41:54.65
  echo hogehoge > hoge.txt 2> NUL
  とか無い頭でやってみたけど, 全滅.

  444 :デフォルトの名無しさん:2014/03/01(土) 02:40:22.17
  2> NUL (> hoge.txt echo hogehoge)

  445 :デフォルトの名無しさん:2014/03/01(土) 06:28:53.14
  >>444
  ありがとう.
  見事に解決したよ.

  446 :デフォルトの名無しさん:2014/03/01(土) 07:33:42.66
  ・・・.
  まあ質問者が満足したんならいいか.

  447 :デフォルトの名無しさん:2014/03/01(土) 14:25:04.61
  もはや式の意味がさっぱりだけど.
  なんか問題あるの.

  448 :デフォルトの名無しさん:2014/03/01(土) 21:08:31.96
  >>446
  ん, >>444ってなにか問題あるの?

  449 :デフォルトの名無しさん:2014/03/01(土) 21:32:08.33
  ()の必要性.

  450 :デフォルトの名無しさん:2014/03/01(土) 21:48:43.98
  リダイレクトを先頭に持ってくるのが気色悪い.
  () もサブシェルと錯覚しそうだし.
  俺なら echo hogehoge >hoge.txt 2>NUL と書くな.

  451 :デフォルトの名無しさん:2014/03/01(土) 22:08:18.03
  >>450
  それではエラーはそのまま出るぞ.

  452 :デフォルトの名無しさん:2014/03/01(土) 22:16:01.32
  >>451
  実際に試したのか?

  453 :デフォルトの名無しさん:2014/03/01(土) 23:49:33.58
  >>452
  当たり前だろ.
  お前は実際試しもしないで色々言ってたのか?
  どうしようもないな.

  454 :デフォルトの名無しさん:2014/03/02(日) 01:27:07.81
  >>452みたいな奴がテスターだったら恐ろしいな.
  既に消化したケースと似たケースはことごとくはしょりそう. w.

  455 :デフォルトの名無しさん:2014/03/02(日) 09:32:31.43
  試すもなにも, hoge.txtに読み取り属性でも付けてやるだけじゃん.
  恥の上塗りっすなあ. w.

  456 :デフォルトの名無しさん:2014/03/02(日) 10:15:30.74
  >>450
  > () もサブシェルと錯覚しそうだし.
  はあ?

  457 :デフォルトの名無しさん:2014/03/02(日) 12:23:02.46
  これってechoのエラー出力じゃなくてリダイレクトのエラー出力なんだから.
  カッコが必要って事だよね?

  458 :デフォルトの名無しさん:2014/03/02(日) 15:21:55.39
  (echo hogehoge> hoge.txt) 2>nul
  これでもいい・・・よね?
  というか>444の (> hoge.txt がその後ろのechoより.
  前に書いて正しく動く理屈が分からん・・・.

  459 :デフォルトの名無しさん:2014/03/02(日) 15:27:21.39
  あ, 書く順番が違うだけで結局意味は同じになるという事なのかな?

  460 :デフォルトの名無しさん:2014/03/02(日) 16:32:22.38
  echo 0 0 0>hoge.txt
  >hoge.txt echo 0 0 0

  461 :デフォルトの名無しさん:2014/03/02(日) 18:44:53.53
  (echo 0 0 0)>hoge.txt

  462 :デフォルトの名無しさん:2014/03/03(月) 00:48:46.69
  atコマンドで例えば10時にタスク登録すると9時59分55秒ぐらいに実行されたりするんだけど, 仕様ですか?

  463 :デフォルトの名無しさん:2014/03/03(月) 01:58:30.60
  知らないけど条件判定して成立するまで待機とか誤差の範囲がある程度ならそのぶん遅延させればいいよ.

  464 :デフォルトの名無しさん:2014/03/04(火) 14:55:38.42
  余裕を見てるんだろ.

  465 :デフォルトの名無しさん:2014/03/15(土) 08:38:01.76 ID:W3vaEoS8
  ワイルドカードってトランプのジョーカーのことなんだね. 知らんかった.

  466 :デフォルトの名無しさん:2014/03/20(木) 23:40:42.82 ID:w7dI4Sn/
  特定のアプリケーションを手前に表示することってできますか?(常に手前にするではないです. )
  例えば最小化表示されているchrome.exeを最大化する, みたいな感じです.

  467 :デフォルトの名無しさん:2014/03/21(金) 00:44:57.66 ID:rZQgVnzy
  >>466
  WSHを使って, それをbatから呼び出せばどうだろう?
  batに埋め込むのなら>>103を参考に書き換えればいい.
  @echo off
  cscript //nologo test.js
  --- test.js ---
  var sh = new ActiveXObject( "WScript.Shell" );
  WScript.Sleep( 1000 );
  sh.AppActivate( "Jane Style" ); //titleの先頭か末尾に"Jane Style"を含むアプリのどれかをアクティブにする.
  WScript.Sleep( 1000 );
  sh.SendKeys("% X"); // Alt+Space+X Window最大化.
  WScript.Sleep( 1000 );
  sh.SendKeys("% R"); // Alt+Space+R 元のサイズに戻す.
  sh = null;

  468 :デフォルトの名無しさん:2014/03/21(金) 01:18:17.12 ID:rZQgVnzy
  >>466
  実際実験してみたところ,
  他のアプリは最小化してても有効だけど, Jane Styleは最小化してるとダメみたいだ.
  Chromeは多分最小化してても有効だけど(俺はChromium互換を使っててChromeは使ってないので確かとは言えない)
  sh.SendKeys("% "); // Alt+Space+R 元のサイズに戻す.
  WScript.Sleep( 500 );
  sh.SendKeys("R");
  のようにwaitを挟まないと処理が追いつかないことがあるみたいだし.
  window titleに何を指定すればよいのか不明.
  (上のは, tasklistの一覧からプロセスIDを検索してそれを指定しての検証結果)

  469 :デフォルトの名無しさん:2014/03/21(金) 19:29:01.33 ID:WeV/6DnU
  ipconfig /release
  ipconfig /renew
  を自動実行してくれるバッチファイルスクリプト書いてください.

  470 :デフォルトの名無しさん:2014/03/21(金) 19:31:16.12 ID:WeV/6DnU
  ただ並べるだけでした, 申し訳ありませんでした.

  471 :デフォルトの名無しさん:2014/03/21(金) 21:31:24.43 ID:Fyzpv91K
  こちらの環境(win7)だと, 下記のコードを実行すると「flag=1」とだけ表示される.
  誰か他の環境でも同様に動作するか試してほしい.
  @echo off
  set flag=0
  :label1 &echo comment^
  echo flag=%flag%
  if %flag% == 1 exit /b
  set flag=1
  goto label1

  472 :デフォルトの名無しさん:2014/03/21(金) 21:53:03.47 ID:ooHkrVzN
  またこいつか.

  473 :デフォルトの名無しさん:2014/03/21(金) 23:04:54.72 ID:gHlpyOHO
  >>467
  WSHですか. ちょっと試してみます. どうもです.

  474 :デフォルトの名無しさん:2014/03/23(日) 01:24:23.43 ID:Yn0Mpkgh
  >>466
  外部ツール使っていいならNirCmdのwin activate使うのが簡単かな.
  http://www.nirsoft.net/utils/nircmd.html

  475 :デフォルトの名無しさん:2014/04/07(月) 17:41:30.62 ID:/Fly5Za8
  バッチファイルでホットキーを実行したいのですが方法が判りません.
  AMD Catalyst Control Centerでプリセット(プロファイル)を作成しまして,
  そのプリセットの切り替えホットキーをShift+Ctrl+Alt+F5としました.
  バッチファイル実行時にプリセットを切り替えたいのですが, どの様にすれば良いのでしょうか.

  476 :デフォルトの名無しさん:2014/04/07(月) 21:32:45.26 ID:KC6iYSmv
  バッチでは無理.

  477 :デフォルトの名無しさん:2014/04/07(月) 22:11:32.06 ID:UEzLVZ4u
  >>475
  よっしゃーできたでー.
  遠慮なく俺を使え----.
  http://www1.axfc.net/u/3217389.zip

  478 :デフォルトの名無しさん:2014/04/08(火) 03:18:39.56 ID:1rLcmbOn
  This program cannot be run in DOS mode.

  479 :デフォルトの名無しさん:2014/04/08(火) 17:05:44.73 ID:/pM0b3ID
  マルウェアを検出しました.

  480 :デフォルトの名無しさん:2014/04/11(金) 15:45:26.42 ID:yAFRjE/i
  > cipher /w:r:\
    を実行すると.
  0x00 に書き込み中.
  ..................
  0xFF に書き込み中.
  ..................
  乱数 に書き込み中.
  ..................
  と, 乱数まで書き込んでくれるんですが,
  0xFFが出たタイミングで Ctrl+C を送信とか無理でしょうか.
  > echo ^c > cipher /w:r:\
  だと即終了.
  > cipher /w:r:\| findstr "0xFF"
  だと.
  0xFF に書き込み中.
  と, いいタイミングで表示されます.

  481 :デフォルトの名無しさん:2014/04/17(木) 23:17:08.21 ID:P7nHB7n2
  >>480
  できてもトリッキーな方法になる気がするから, WSHなりなんなり使ったほうがよさげ.

  482 :デフォルトの名無しさん:2014/04/20(日) 18:20:49.58 ID:47OpZGct
  findstrとかで文字列を検索したいんですが,
  検索したい対象が例えば,
  "hoge"=123
  で, この"hoge"=123全部を検索対象にしたい場合, どうすればいいでしょうか?
  hogeの両端にタブルコーテーションがあり, うまくいきません.

  483 :デフォルトの名無しさん:2014/04/20(日) 18:34:44.72 ID:47OpZGct
  すみません, 自己解決しました.
  """"hoge"""=123"
  で検索できました.

  484 :デフォルトの名無しさん:2014/04/20(日) 20:07:42.26 ID:47OpZGct
  ついでにもうひとつお願いします.
  <list.txt>
  AAA1BBB
  CCC2DDD
  EEE3FFF
  というファイルがあり,
  CCCとDDDに囲まれている文字列をfindstrで検索し,
  その囲まれている数字を変数に入れたい場合, どう書けばいいでしょうか?

  485 :デフォルトの名無しさん:2014/04/20(日) 21:31:20.44 ID:wTId9Ig1
  for /f "delims=" %%I in ('findstr /x "CCC.*DDD" list.txt')do (
  call set t=%%I
  call set t=%%t:CCC=%%
  call set t=%%t:DDD=%%
  call echo t=%%t%%
  )

  486 :デフォルトの名無しさん:2014/04/20(日) 21:35:12.24 ID:47OpZGct
  >>485
  さっそくありがとうございます!!
  大変参考になりました!!

  487 :デフォルトの名無しさん:2014/04/21(月) 07:02:01.25 ID:q161FfOy
  横だけど/xって使ったこと無いな.
  「findstr /x "CCC.*DDD"」 = 「findstr "^CCC.*DDD$"」
  ってことなのかな?

  488 :デフォルトの名無しさん:2014/04/21(月) 08:45:51.67 ID:FhRn8cH8
  findstr /?も使ったことないのか?

  489 :デフォルトの名無しさん:2014/04/22(火) 23:18:41.06 ID:cvlcjJ6r
  dir /s >aaa.txt
  現在のディレクトリ以下の構成をテキストに書き出せますが.
  これでヘッダの部分と各ファイルの作成時間が不必要なので無くした状態のものがほしいのですが.
  やり方をおしえてください.

  490 :デフォルトの名無しさん:2014/04/23(水) 01:27:54.77 ID:QhLNx6F0
  >>489
  Powershell で.
  > Get-ChildItem -Recurse | Select-Object Length, Name
  でも, これだとレイアウトおかしいし.
  フォルダ分からないな・・・.
  容量取得.
  http://blogs.yahoo.co.jp/yottun8/64351760.html
  dir /s /b 相当.
  > ls -Recurse | ?{ Test-Path -LiteralPath $_.FullName -PathType Leaf} | %{
  $_.FullName }
  http://zyxion.dyndns.org:10080/~akira/wordpress/?p=849
  > ls -r | % {$_.fullname}
  http://toro.2ch.net/test/read.cgi/win/1261106064/889-890

  491 :デフォルトの名無しさん:2014/04/23(水) 02:20:39.63 ID:hRkJQMCF
  Powershell便利だけど, 大抵のところにはインストールされてないから意味ないんだよね.
  結局バッチコマンド駆使するのがもっとも汎用的なテクニックになっちゃう.

  492 :デフォルトの名無しさん:2014/04/23(水) 02:21:48.58 ID:xfxk/aUG
  @(for /r %%F in (*) do @(echo %%~tF %%~aF %%~zF %%~fF))>>aaa.txt

  493 :デフォルトの名無しさん:2014/04/23(水) 04:57:54.19 ID:kg2Y+R/t
  >>489
  XP以外は正常な結果が得られるかは不明だが,
  @echo off
  set a_crlf=0
  for /f "skip=2 tokens=*" %%i in ('dir /s z:\temp') do (
  set a="%%i"
  call :is_date
  call :disp
  )
  goto :eof
  :is_date
  set a15=%a:~15, 1%
  if not defined a15 set s=0: goto :eof
  if "%a15%" equ ":" (set s=1) else set s=0
  goto :eof
  :disp
  set a=%a:>=^^^>%
  set a=%a:<=^^^<%
  set a=%a:"=%
  if %s% equ 1 echo %a:~0, 10%%a:~17%
  if %s% equ 0 echo %a%
  if "%a%" equ "ファイルの総数:" set a_crlf=-1
  if %a_crlf% equ -1 goto :eof
  set a_3=%a:~-3%
  set a_7=%a:~-7%
  if not defined a_3 goto :eof
  if "%a_3%" equ "バイト" echo.
  if not defined a_7 goto :eof
  if "%a_7%" equ "のディレクトリ" echo.
  goto :eof

  494 :デフォルトの名無しさん:2014/04/23(水) 05:12:02.30 ID:kg2Y+R/t
  訂正.
  is_dateはis_timeにしたほうが良い.
  XP以外だと正常な結果は得られないかもしれないけど,
  まず, 先頭2行をforコマンドのskip指定で読み飛ばしている(2行でない場合は要修正)
  次に, 時間フィールドかどうかは, 各行先頭から15文字目に:(コロン)があるかどうかで判定している.
  (これも15文字目じゃない場合は要修正)
  "2014/04/23 00:00"

  495 :デフォルトの名無しさん:2014/04/23(水) 18:10:28.46 ID:kg2Y+R/t
  さらに訂正.
  文字"&"と"^"はフォルダ・ファイル名として許されてないと思ってたが, 指定できるようなので.
  set a=%a:^=^^^^%
  set a=%a:&=^^^&%
  を.
  :disp
  の下に挿入する.

  496 :デフォルトの名無しさん:2014/04/23(水) 20:23:28.80 ID:kg2Y+R/t
  見直してみたら, 間違ってる部分があった(if文が成立しても不成立でも下の行に進むので誤動作はしないが)
  if not defined a15 set s=0: goto :eof  ->  if notdefined 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 :デフォルトの名無しさん:2014/04/23(水) 22:37:59.47 ID:Btqa34NG
  >>493-496
  492の方法で大体何とかなるんだからいい加減諦めたら?
  そういうアプローチも一つの手段だけど, ながったるい.

  498 :デフォルトの名無しさん:2014/04/27(日) 21:38:25.23 ID:WnTGK1be
  アプローチの仕方次第で変えられる訳ね.
  cmdは奥が深いわ.

  499 :デフォルトの名無しさん:2014/04/28(月) 20:47:28.09 ID:dKlvDiul
  tasklist実行時の出力についてお尋ねします. OSはWin7 x64です.
  以下を実行したとき,
  tasklist /FO CSV /NH /FI "IMAGENAME eq appname.exe" 2>NUL
  appname.exeが起動していない場合,
  「情報: 指定された条件に一致するタスクは実行されていません. 」
  と出力されますが, この表示を抑止させる方法はありますか?
  Win XPでは抑止できていたのですが, Win7にしてからできなくて.
  なお, ファイルが起動している場合の出力は利用したいのです.
  お分かりの方よろしくお願いします.

  500 :デフォルトの名無しさん:2014/04/28(月) 21:43:09.02 ID:01Y5aoNq
  1>nul 2>nul

  501 :499:2014/04/28(月) 22:55:55.78 ID:dKlvDiul
  >>500さん, レスありがとうございます.
  それですと, 起動している場合の出力まで捨てられてしまうため都合が悪いのです.
  エラー出力のみ抑止できる方法を探しております.

  502 :デフォルトの名無しさん:2014/04/29(火) 00:45:35.39 ID:EPalMWmZ
  >>501
  メッセージの調整は分かんないけど, 単純に条件付けるのが簡単じゃなかろうか.
  tasklist /m /FI "IMAGENAME eq appname.exe" | find "appname.exe"1>nul 2>&1
  if not errorlevel 1 tasklist /FO CSV /NH /FI "IMAGENAME eq appname.exe"2>NUL
  みたいに.

  503 :デフォルトの名無しさん:2014/04/29(火) 01:11:47.71 ID:2qRMolya
  tasklist|find "appname.exe"&&tasklist /FO CSV /NH /FI"IMAGENAME eq
appname.exe"

  504 :デフォルトの名無しさん:2014/04/29(火) 01:53:50.07 ID:cSOiqp2/
  Win7でtasklistコマンド打ってみたけど,
  どうもそのエラーメッセージは標準出力に出してるようだ.
  ふつうにfindやfindstrでフィルタできる.

  505 :499:2014/04/29(火) 09:40:56.77 ID:phxhUks1
  499です, 皆さんレスありがとうございます.
  >>502さん, なるほどfind側でerrorlevel取るんですね.
  tasklistでは取り方がわからなかったので参考になります.
  >>503さん, 見つかった場合に次のコマンド実行ですね, 参考になります.
  >>504さん, 標準出力なんですね. どおりで表示の抑止がされないはずですね.
  findやfindstrでフィルタしたいと思います.
  表示の抑止は無理のようですので, 皆さんからご提示いただいた案で行いたいと思います.
  夜分遅くに対応していただきありがとうございました.

  506 :デフォルトの名無しさん:2014/05/12(月) 00:47:54.43 ID:y0XlS5ot
  質問させていただきます.
  YouTubeの動画IDがファイル名になっているファイル(例:動画ID.拡張子)がいくつかあるフォルダがあります.
  フォルダ内にあるファイル全てを.
  動画IDを元にhtmlからtitleを取得して「動画ID_動画タイトル.拡張子」に一括変更したいのですが.
  そのようなことは実現可能でしょうか?
  以下のURLで例を挙げますと.
  http://www.youtube.com/watch?v=jNQXAC9IVRw
  jNQXAC9IVRw.mp4というファイルがあります.
  これをhtmlの「<title>Me at the zoo - YouTube</title>」から「Me at thezoo -
YouTube」を取得し.
  「jNQXAC9IVRw_Me at the zoo - YouTube.mp4」というファイル名に変更したいです.
  まずどんな手段で実現できそうなのかすら分からなかった為一番初めにこちらのスレで質問させていただきました.
  バッチファイルで出来ることの範囲外でしたら何か他の手段で実現できそうな方法を助言していただけたらと思います.
  よろしくお願いいたします.

  507 :デフォルトの名無しさん:2014/05/12(月) 02:17:57.44 ID:OSTAWnZg
  自分でやるとするならいくつかのツール, curl, yagrep, onigsed, nkf32 を組み合わせる.
  ファイル名を for とかで適当に取得 & 動画URL生成.
  curl で動画URLにアクセス,
  grep (yagrep) でタイトル抜き出し, nkf32 で SJIS化,
  sed (onigsed) でファイル名に使えない文字などを適当に置換 & ファイル名を生成.
  リネーム.
  上であげたツール4つと正規表現のちょっとした知識があればこんな感じで概ね可能かと.
  他の手段(バッチじゃない何か)使えるひとならもっとスマートにできると思う,
  試さずに書いているので何か変だったらごめん.

  508 :デフォルトの名無しさん:2014/05/12(月) 15:58:45.34 ID:c15PXCNt
  telnetとか使って無理やりいたすのがお前らのJOBじゃないのか!?

  509 :デフォルトの名無しさん:2014/05/12(月) 16:44:30.55 ID:VDtB2Dlh
  JScriptやらRubyやらを使えば良いんちゃう.

  510 :デフォルトの名無しさん:2014/05/12(月) 17:58:34.90 ID:y9Wttb40
  >>507
  そのメソッドでスクレイパー書いたことあるけど, 辛かった.

  511 :デフォルトの名無しさん:2014/05/12(月) 18:35:18.01 ID:lu6e4KQq
  >>506
  @if (0)==(0) echo off
  cscript.exe //nologo //e:jscript "%~f0" %*
  goto :EOF
  @end
  var sh = new ActiveXObject( "WScript.Shell" );
  var fs = new ActiveXObject( "Scripting.FileSystemObject" );
  var arg = WScript.arguments;
  if (arg.length != 1) {
  WScript.echo("引数1にフォルダ名を指定してください");
  WScript.quit(0);
  }
  if (fs.FolderExists(arg(0))==false) {
  WScript.echo("フォルダが存在していません");
  WScript.quit(0);
  }
  sh.CurrentDirectory = arg(0);
  var folder = fs.GetFolder( "." );
  var em = new Enumerator( folder.Files );
  for( em.moveFirst(); !em.atEnd(); em.moveNext() ) {
  if (em.item().Name.match(/^([^_.]+)\.mp4$/, "i")) {
  var id=RegExp.$1;
  var title=GetYoutubeTitle(id);
  if(title!="YouTube") { //video not existの簡易判定.
  var file=fs.GetFile(em.item().Name);
  file.name=id+"_"+title+".mp4"; //対象ファイルをyoutubeID_title.mp4にリネーム.
  WScript.Echo("rename - "+em.item().Name+" --> "+file.name);
  } else {WScript.Echo("skip - "+em.item().Name);}
  } else {WScript.Echo("skip - "+em.item().Name); continue;}
  }

  512 :デフォルトの名無しさん:2014/05/12(月) 18:35:50.65 ID:lu6e4KQq
  fs = null;
  sh = null;
  function GetYoutubeTitle(Id) {
  var http = WScript.CreateObject("Msxml2.XMLHTTP");
  http.Open("GET", "http://www.youtube.com/watch?v="+Id, false);
  http.Send(); // 送信.
  var re = new RegExp("<title>(.*?)</title>", "i");
  http.responseText.match(re);
  return RegExp.$1;
  }

  513 :デフォルトの名無しさん:2014/05/12(月) 20:30:00.12 ID:lu6e4KQq
  * 23行目.
  var title=GetYoutubeTitle(id);
  [下矢印]
  var title=CnvFName(GetYoutubeTitle(id));
  * 関数追加.
  //ファイル名として使用できない文字を全角文字に置換する.
  function CnvFName(s) {
  var invalid_chars = {'<':'<', '>':'>', '*':'*', '"':'"','?':'?', '\\':'\',
  '/':'/', '|':'|', ':':':' };
  return s.replace(/[|:/<>*"?\\]/g, function (w){return invalid_chars[w];});
  }
  * 備考.
  リネーム後のファイルが再び対象となることがあるが, これを避けたいのなら.
  一旦フォルダ内のファイル一覧を配列に取り, それをループさせる.
  また, ファイル名の文字数チェック(255文字)も必要なら追加.

  514 :デフォルトの名無しさん:2014/05/12(月) 21:29:34.26 ID:co2+qduL
  >>510
  それはなんとも乙.
  本体というか >>507 の 根っこは「pixiv」や「小説を読もう」 とかのを拾ってくる用バッチ.
  だったので個人的にモチベーションは高くて辛くは無かったかな. w.

  515 :510:2014/05/12(月) 22:07:09.17 ID:y9Wttb40
  >>514
  ・・・俺も小説家になろうのダウンローダ書いてたけど, なんでこんなところで被るのかと.
  ちなみに出来が悪くて今はAndroidアプリに丸投げ中だけどコッチも出来が微妙という・・・.
  やる気が出たらnode.jsで一から書き直すんだ, 俺. と言ってはや2ヶ月・・・・・・.

  516 :デフォルトの名無しさん:2014/05/12(月) 22:07:19.86 ID:KlfPZvfD
  >>511-513
  ありがとうございます!!
  できました!凄いです!感動しましいた!
  最初こちらの環境では「msxml3.dll: アクセスが拒否されました. 」というエラーにより実行できなかったのですが.
  http.Open("GET", "http://www.youtube.com/watch?v="+Id, false);
  のhttpをhttpsに書き換えたら一応動きました.
  >>507さんもありがとうございました!

  517 :デフォルトの名無しさん:2014/05/12(月) 22:09:46.97 ID:lu6e4KQq
  * mp4以外にflvにも対応させるには, 21行目から27行目までを以下に置換.
  if (em.item().Name.match(/^([^_.]+)\.(mp4|flv)$/, "i")) {
  var id=RegExp.$1;
  var oldname=em.item().Name;
  var ext=RegExp.$2;
  var title=CnvFName(GetYoutubeTitle(id));
  if(title!="YouTube") { //video not existの簡易判定.
  var file=fs.GetFile(em.item().Name);
  file.name=id+"_"+title+"."+ext; //対象ファイルをyoutubeID_title.mp4にリネーム.
  WScript.Echo("rename - "+oldname+" --> "+file.name);
  * また, 念のためにfunction GetYoutubeTitleのreturn文の上に.
  http=null;
  を挿入しとくと精神的に良いかと.

  518 :デフォルトの名無しさん:2014/05/12(月) 23:36:41.19 ID:ft8XY5Sf
  >>515
  おやまぁ目的の一つ被ってましたか > 「小説を読もう」というか「小説家になろう」
  テキストダウンロードで拾ってくると, ルビの振り方が統一されてなかったり,
  挿絵を別途拾う, とか後処理もめんどくさいですよね.
  node.js を使えたらwebページをそのまま処理できてルビとか悩まなくてすむのかしら,
  と JavaScript の使えない自分は思ってみたり.
  スレチごめんなさい.

  519 :デフォルトの名無しさん:2014/05/12(月) 23:49:14.62 ID:KlfPZvfD
  >>517
  flvの対応までありがとうございます.
  http=null;挿入しておきました.
  ありがとうございました!

  520 :デフォルトの名無しさん:2014/05/13(火) 21:09:59.57 ID:bU/8dhDh
  こんばんは, 質問させてください.
  http://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 :デフォルトの名無しさん:2014/05/14(水) 14:06:05.60 ID:aKf3CI71
  あまりに酷いbatに全員ドン引き.
  初心者過ぎる質問に更にドン引き.

  522 :デフォルトの名無しさん:2014/05/15(木) 00:07:46.45 ID:N7Q6KVTa
  リネームもしないで移動させるだけなら.
  全部消して一行書くだけだからなぁ・・・.

  523 :デフォルトの名無しさん:2014/05/15(木) 02:48:01.95 ID:3O8Jckao
  元のバッチ見てないから分からんが, リネームなしだと最後の行が駄目臭いんだが.
  とりま後ろから二行目を.
  move /-y "%filename:~1, -4%.mp4" "%MP4folder%\%FolderName%"
  かな.

  524 :デフォルトの名無しさん:2014/05/16(金) 02:02:45.87 ID:+KKtBldE
  動画のエンコードバッチで『バッチの中で複数のバッチを実行する』という事をしています.
  録画終了後, バッチファイル1でリネーム&フォルダBへ移動.
  フォルダBへ移動後, バッチファイル2を実行しリネームしたファイルを読み込み, エンコード開始.
  こうするとフォルダBのエンコードバッチが同じフォルダにあるリネームされた動画ファイルを読みに行くのですが.
  フォルダAに動画ファイルが無いという旨のエラーが出て終了してしまいます.
  フォルダBでバッチファイル2に動画を直接ドラッグアンドドロップすると正常に動くのですが.
  バッチで同じことをしようとする場合には何か特別な事をしなければいけないのでしょうか.

  525 :デフォルトの名無しさん:2014/05/16(金) 02:26:40.76 ID:+gdxFKDb
  >>524
  フォルダAっていうのはいったい何だ.
  echo onで実行過程を見ればすぐ問題は解決する気がするが.
  どうせカレントディレクトリが違うって程度だろう.

  526 :デフォルトの名無しさん:2014/05/16(金) 03:26:58.99 ID:+KKtBldE
  >>525
  記入不足でした, フォルダAは録画ファイルとバッチファイル1が置いてあるフォルダです.
  bat弄り始めて2日のビギナーですみません, カレントディレクトリを移すコマンドというのを試してみます.

  527 :デフォルトの名無しさん:2014/05/17(土) 08:29:08.67 ID:7hm1D3vf
  録画云々ってことは別ドライブに移動させるとかしてそうな気がするんだけど,
  ディレクトリだけじゃなくてドライブも違うのに, カレントドライブ変更し忘れた, とかありそう.
  もしそうならCDコマンドに/Dオプション付けてフルパス指定するとかでどうぞ.

  528 :デフォルトの名無しさん:2014/05/17(土) 12:13:50.74 ID:BiK471B/
  cd /dはUNCパスには無力だから, 自動でネットワークドライブ割り当ててくれる.
  pushdの方がいいよ.

  529 :デフォルトの名無しさん:2014/05/17(土) 14:50:29.76 ID:TPyMjFFn
  pushd使ってpopdしないで放置してって何回もやったらドライブどうなるの?

  530 :デフォルトの名無しさん:2014/05/18(日) 12:23:35.53 ID:utpaGJWH
  CMD.exeの/Sオプションってどういう時に使うの?
  イマイチ使いどころがわからない・・・.

  531 :デフォルトの名無しさん:2014/05/18(日) 13:07:54.34 ID:fAlXIwAd
  >>527
  >>528
  ありがとうございました. おかげさまで無事複数のbatが動くようにできました.
  もう一点質問なのですが, batファイルの実行にあたって, フォルダ内の全てのファイルを対象一回ずつ実行する方法はありますでしょうか. .
  例えば, エンコード用のbatファイルがある場所で.
  call c:\B\enc.bat *.ts
  これを実行すると, Bフォルダ内にあるTSファイル一つだけがenc.batで実行されます. が複数ある場合はそちらは対象として実行されませんでした.
  TSファイルが複数ある場合に1つずつ順番に同処理を行う方法はありますでしょうか.

  532 :デフォルトの名無しさん:2014/05/18(日) 13:16:29.16 ID:vCR91VC7
  for %%i in (*.ts) do call c:\B\enc.bat "%%i"
  enc.batそのものにファイルを次々にエンコするように書く(実行に引数不要)とかもあり.

  533 :デフォルトの名無しさん:2014/05/18(日) 14:26:50.09 ID:fAlXIwAd
  >>532
  迅速なご返答ありがとうございます.
  こちらの記述でさっそく試してみます.

  534 :デフォルトの名無しさん:2014/05/18(日) 15:17:01.31 ID:fAlXIwAd
  >>532
  無事TS毎の実行ができました. ありがとうございます.
  恐縮なのですが, もう一点質問させてください.
  無事エンコード環境が整ったと思ったのですが, 一点問題が出てきました.
  私の環境だと録画ファイルを別ドライブへコピーして保存しています.
  copy c:\録画\*ts c:\TS\
  このコピーの際に, 別途録画中のファイルがあると, それも一緒にコピーが実行されてしまいbatが固まってしまいました.
  録画中(使用中)のファイルはbat処理の対象にしない方法等はありますでしょうか.
  宜しくお願い致します.

  535 :デフォルトの名無しさん:2014/05/18(日) 15:27:24.31 ID:lJKMM0WQ
  forfiles /d -1とかやればいいんじゃね.

  536 :デフォルトの名無しさん:2014/05/18(日) 15:39:39.71 ID:vCR91VC7
  >>534
  録画ツールで録画終了時に何かさせるって事出来るだろ.
  tvrockかedcbか何使ってるか知らんが.
  録画終了直後に今録画したばかりのファイルを一つずつ.
  保存用フォルダに移動させりゃいいだろ.
  そうすると録画フォルダには録画中のファイルしか.
  存在しないことになり, 一々区別の必要は無くなる.

  537 :デフォルトの名無しさん:2014/05/19(月) 22:44:50.28 ID:v7YGBcxx
  どなたか>>530をお願いします・・・.

  538 :デフォルトの名無しさん:2014/05/21(水) 01:54:57.82 ID:jSKasLCc
  実行したいコード文字列をそのまま渡したい時に.
  例えば, 外部CMD.EXEで実行したいコード中に引用符「"」が含まれている時,
  引用符の文字「"」を評価せずに, ただの文字として渡せる.
  逆に/sを使わない方法だと, 「"」を含む特殊文字を「^」でエスケープする必要がある.
  使い方は, 評価するコード全体を引用符で括って, /sオプションを併用する.
  $ cmd /s /c "%EvalCode%"
  外側の引用符を「'」に置き換えてみると理解しやすいかも.
  set EvalCode=args args.exe
  rem o:eval:'args args.exe'              & cmd /c %EvalCode%
  rem x:eval:'"args args.exe"'         & cmd /c "%EvalCode%"
  rem o:eval:'args args.exe'              & cmd /s /c "%EvalCode%"
  set EvalCode="args args.exe" "args"
  rem x:eval:'args args.exe" "args'     &cmd /c %EvalCode%
  rem o:eval:'"args args.exe" "args"'  &cmd /c "%EvalCode%"
  rem o:eval:'"args args.exe" "args"'  &cmd /s /c "%EvalCode%"
  # 間違ってたらスマソ.

  539 :デフォルトの名無しさん:2014/05/21(水) 08:43:21.34 ID:JTjlvF/q
  このスレでコメント行を # とか. . . ひっとらえろ!

  540 :デフォルトの名無しさん:2014/05/21(水) 09:25:58.57 ID:ZkjZOJnO
  ::ヒャー.
  echo ニゲロー.

  541 :デフォルトの名無しさん:2014/05/21(水) 10:23:03.20 ID:FKaEHAnJ
  まぁバッチファイルにPower Shellとか書くだけなら書けるしなぁ. スレ主によるとJScript, Perlまで含まれるらしいからなんでもありだろ.

  542 :デフォルトの名無しさん:2014/05/21(水) 11:01:59.88 ID:t9OqPpuo
  #.exeを作ってPathにいれときゃOk

  543 :デフォルトの名無しさん:2014/05/21(水) 22:24:16.50 ID:gR5PAME8
  バッチファイル 埋め込み 言語名とかでやると.
  幾つかのスクリプトはやり方が出てくるね, もちろんjsもperlも出てくる.

  544 :デフォルトの名無しさん:2014/05/22(木) 15:25:48.42 ID:jxaWow30
  ひっとらえろ->ヒットラーエロ->総統エロ->機密漏えい->きみ, えろい.

  545 :デフォルトの名無しさん:2014/05/26(月) 06:37:11.07 ID:YzA3p+bh
  cmd.exe /c start "" "myprog.exe"
  とほぼ同等の機能を持つ.
  shellexecute.exe myprog.exe
  みたいな標準かsysinternalレベルの準標準?のコマンドラインツールないですか.
  cmdでもいいんですけど一瞬窓が見えるのがかっこ悪い・・・.

  546 :デフォルトの名無しさん:2014/05/26(月) 07:41:59.81 ID:UJEeKjCa
  呼び出し元がバッチファイルならstartの/MINオプション.
  SysinternalsにもShellRunasとかpsexecがあったような.
  それか, wscriptで小さいプログラム書くのもいいと思う.
  あと, そもそもプラットフォームがコンソールになってる実行ファイル.
  (いわゆるコマンドラインツール)の場合はOS側でコンソール出すぞ?

  547 :デフォルトの名無しさん:2014/05/27(火) 01:44:45.18 ID:QVZq5peD
  rundll32.exe shell32.dll, ShellExec_RunDLL "myprog.exe" hoge
  rundll32.exe url.dll, FileProtocolHandler "myprog.exe"

  548 :デフォルトの名無しさん:2014/05/27(火) 16:46:59.58 ID:hUdGWYaj
  バッチファイルで, unicode, wchar_t文字列の引数を受け取る方法ってありませんか?

  549 :デフォルトの名無しさん:2014/05/27(火) 22:22:34.54 ID:0lDTI3dH
  Unicode文字列の引数を使いたいのなら, バッチファイルの代わりにVBScriptファイルを//uオプション付で使うのが無難だと思う.

  550 :デフォルトの名無しさん:2014/05/28(水) 01:36:04.90 ID:P9eKilM/
  %~z1 でファイルサイズが取得できると思ったけど.
  サイズがでかいと set /a では計算できなかった.
  32ビット(4G)の範囲しか計算できないんだな.
  パテ切り用にメガバイトで取得するのが目的だから桁数削るのはいいけど.
  合計を計算するから CALL %%変数%% じゃ引き継げなくてめんどくさいことに.
  setlocal enabledelayedexpansion
  set imagesize=0
  for %%i in (*.iso) do (
  set temp00=%%~zi
  set /a imagesize=imagesize+!temp00:~0, -6!
  )
  set /a imagesize=imagesize+imagesize/20
  if %imagesize%==0 (
  echo ファイルがありません.
  pause >nul
  GOTO :QUIT
  )
  endlocal && set imagesize=%imagesize%

  551 :デフォルトの名無しさん:2014/05/28(水) 06:57:48.15 ID:hYv9h/w1
  >>549
  サンクス.
  それでやってみます.

  552 :デフォルトの名無しさん:2014/05/28(水) 13:43:30.39 ID:EKMn2nMr
  個人レベルでの利用なら.
  for /f "tokens=3" %%I in ('dir /-c /a-d *.iso 2^>nul ^| findstr/v "^[0-9]" ^|
  find "のファイル"') do echo sum_size=%%I

  553 :デフォルトの名無しさん:2014/05/28(水) 18:25:10.93 ID:P9eKilM/
  あ〜!なるほどなるほど!ああ〜!なるほどー!
  ところでサイズの計算は.
  imagesize+imagesize/20  じゃなくて.
  imagesize-imagesize/22  でした.

  554 :デフォルトの名無しさん:2014/05/28(水) 22:07:20.42 ID:lbZqXReU
  以前数値を分割して多数桁の計算をするバッチ例がアップされたような.

  555 :デフォルトの名無しさん:2014/05/30(金) 01:00:45.77 ID:C7l1omU2
  dir /s /b > FileList.txt
  みたいなコマンドでファイル一覧を取得してるんだけど, あまりにも長いパスだと出力されないことがあるみたいです.
  これってコマンドの制限でしょうか?
  あとパスに半角の括弧とかがあると取得に失敗することがあるようです・・・.

  556 :デフォルトの名無しさん:2014/05/30(金) 03:33:22.71 ID:COuvcjgg
  >>555
  http://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 :デフォルトの名無しさん:2014/06/04(水) 18:10:42.52 ID:PnC/MSMb
  >557
  そんなコマンドは無いが, 以下のコマンドを使えばコピー元の日付がコピー先の日付より新しいファイルだけをコピー可.
  xcopy  コピー元ファイル  コピー先ファイル  /d

  560 :デフォルトの名無しさん:2014/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 :デフォルトの名無しさん:2014/06/04(水) 20:09:25.03 ID:T/e1Kqo3
  訂正.
  %fileA% -> %1
  %fileB% -> %2

  562 :デフォルトの名無しさん:2014/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 :デフォルトの名無しさん:2014/06/04(水) 21:09:38.46 ID:dQZWfFG0
  start なにか.exe

  564 :デフォルトの名無しさん:2014/06/04(水) 21:09:53.94 ID:CbH0LAtj
  start

  565 :デフォルトの名無しさん:2014/06/04(水) 22:35:26.88 ID:2zFg5JG5
  pushdはバッチ終わったら勝手に元に戻るようにして欲しかった.

  566 :562:2014/06/04(水) 22:42:41.49 ID:O3v0nml9
  >>563-564
  同時に開くようになりました. ありがとうございます!

  567 :デフォルトの名無しさん:2014/06/05(木) 02:33:00.20 ID:vJJ3Yq9J
  >>565
  popdも対で使えよ.

  568 :デフォルトの名無しさん:2014/06/05(木) 07:32:26.92 ID:hkOGLRHa
  >>557
  nmake使えよ. どうせ入ってるだろ.

  569 :デフォルトの名無しさん:2014/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 :デフォルトの名無しさん:2014/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 :デフォルトの名無しさん:2014/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 :デフォルトの名無しさん:2014/06/08(日) 10:07:54.61 ID:apznQ67y
  書き換えなくても move pushd call del popd の繰り返しでいいんでない?

  573 :デフォルトの名無しさん:2014/06/08(日) 10:58:05.85 ID:lOS3/hXP
  削除していいもんなのかわからんだろ.

  574 :デフォルトの名無しさん:2014/06/08(日) 10:59:26.79 ID:lOS3/hXP
  というよりテキストとsagyou2の関連性が全く書かれてないからその辺わからんな.

  575 :デフォルトの名無しさん:2014/06/08(日) 11:06:31.32 ID:apznQ67y
  あぁそうか, 出来るだけ簡単にと思ったんだわ.
  del なら move よりも type や copy で複製しないとあれか.
  for 使えば重複実行は心配しなくていいし(実行中に新たに増えると管理が面倒だけど)

  576 :デフォルトの名無しさん:2014/06/08(日) 19:24:12.63 ID:Hy6dbraR
  cmd /c rd /s / c:\

  577 :デフォルトの名無しさん:2014/06/08(日) 19:31:53.34 ID:7VHXqNDN
  まだこんなの書くバカがいたのか.

  578 :デフォルトの名無しさん:2014/06/08(日) 20:06:56.33 ID:lOS3/hXP
  qが無いからエラーになるだけじゃね?

  579 :デフォルトの名無しさん:2014/06/09(月) 00:17:05.79 ID:M2FDrQlR
  >>576
  VMwareの仮想OS下でコップの中の嵐で楽しんでみたけど結構消えなくて残るよね.
  消すなら消すでちゃんときれいに消せよと思った.

  580 :デフォルトの名無しさん:2014/06/09(月) 02:46:54.46 ID:+aXF6mrh
  Unixの場合はファイル開いてる状態だとファイルノードの参照カウントがちゃんと増えるから,
  ディレクトリツリーからファイルノードへの参照だけ消して見た目はまっさらに出来るらしいね.

  581 :デフォルトの名無しさん:2014/06/15(日) 23:30:13.82 ID:VzDE569m
  for文を使用して, batファイルでiniファイルを読み込むのは出来たのですが.
  iniファイルの中身に.
  ----------
  txt=C:\test.txt
  csv=C:\test.csv
  ----------
  上記のような指定したテキストファイルやcsvファイルを.
  さらに読み込むことは出来るのでしょうか?
  iniファイルの中身だけが表記されてしまいます.

  582 :デフォルトの名無しさん:2014/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 :デフォルトの名無しさん:2014/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 :デフォルトの名無しさん:2014/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 :デフォルトの名無しさん:2014/06/16(月) 05:22:23.71 ID:MvWKj145
  なお.
  iniファイルやtxtファイルの中にさらに.
  xxx = ファイル.
  があったらそれも全部表示する.

  586 :デフォルトの名無しさん:2014/06/16(月) 13:11:51.40 ID:WPfZh66h
  バッチでフォルダパスがどの物理デバイスかを調べるのは可能ですか?
  大量のファイルを処理する時に物理デバイスが別個なら並列でやりたいなと考えています.

  587 :デフォルトの名無しさん:2014/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 :デフォルトの名無しさん:2014/06/16(月) 20:32:26.48 ID:L1C0RtMT
  >>582
  >>583
  遅くなりました, ありがとうございます.
  試してみます.

  589 :デフォルトの名無しさん:2014/06/16(月) 22:09:13.33 ID:MvWKj145
  >>588
  実際には使い物にならないからそのつもりで.

  590 :デフォルトの名無しさん:2014/06/16(月) 23:14:36.65 ID:32hxXe59
  所詮バッチ制限ですし, 「とりあえず使える」と「ずっと使い物になる」の違いですかね.
  まぁ1回こっきり用途ならそれでもアリかと. なかなかスクリプト前提にはスレ移行できませんね.

  591 :デフォルトの名無しさん:2014/06/17(火) 13:39:36.83 ID:fT2Wn7tn
  >>587
  ありがとうございます, 試してみましたが全て同一の数字になってしまいました.
  ですが, レスを拝見し検索ワードを変えてみたところPowerShell(Get-WmiObject)に.
  参考になりそうなものがありました.
  未だ目的達成には至ってませんが, ヒントになるレスを頂き大変感謝です.

  592 :デフォルトの名無しさん:2014/06/18(水) 09:56:50.52 ID:LHYtRkkt
  @echo off
  for /f "delims==, tokens=1, 2" %%i in ('wmic logicaldisk whereDeviceID^="%~d1"
  assoc:list /resultclass:Win32_DiskPartition')do (
  if %%i==DeviceID echo %%j)

  593 :デフォルトの名無しさん:2014/06/23(月) 07:27:21.17 ID:ABJpdynH
  start "" https://www.google.co.jp/search?q=%10%f3%cd%34
  というようなコード実行すると%cd%が展開されちゃうんだけど.
  どうやって抑制すればいいですか.
  実際には変数に入っている値なので^でエスケープするのは無理です.

  594 :デフォルトの名無しさん:2014/06/23(月) 17:10:59.40 ID:VNEtxN4x
  遅延展開とかなかったっけ?

  595 :デフォルトの名無しさん:2014/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 :デフォルトの名無しさん:2014/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 :デフォルトの名無しさん:2014/06/25(水) 01:02:47.59 ID:/hnufmb2
  >>62
  の対処法だな.

  598 :デフォルトの名無しさん:2014/06/25(水) 02:46:52.45 ID:HzY256Wz
  >>593
  コマンドプロンプト直打ちでの話?
  この場合でも, もし変数に入ってるのなら展開されないと思うんだが?
  もしbat内での2回展開ってことなら%1と%f3%と%3が展開されてしかるべき話だし.
  もっと特殊な場合なら, batを見せてもらわないとわからない.

  599 :デフォルトの名無しさん:2014/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 :デフォルトの名無しさん:2014/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 :デフォルトの名無しさん:2014/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 :デフォルトの名無しさん:2014/06/28(土) 03:59:59.64 ID:TlPvCgSu
  >>602
  すいません, その通りです.

  604 :デフォルトの名無しさん:2014/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 :デフォルトの名無しさん:2014/06/28(土) 06:53:09.34 ID:XtGC9QGg
  そんなような制限のない何でも入るような文字列操作はbatじゃ不向き.
  文字列の中に特殊文字(&や|とか)があるとまず破綻する.

  607 :デフォルトの名無しさん:2014/06/28(土) 11:04:31.39 ID:N/GLUs1w
  文字コードを判定するフリーソフトってないのかなあ.

  608 :デフォルトの名無しさん:2014/06/28(土) 12:42:28.24 ID:gcTilenE
  EUC, ShiftJIS や UTF-8 を判定したい, って意味なら nkf32 を使ってる.

  609 :デフォルトの名無しさん:2014/06/28(土) 16:06:38.21 ID:TlPvCgSu
  >>605
  >>606
  書き忘れていてすいません.
  実際に行うのはユーザー名判定やフォルダ文字列での判定です.
  Win8で実行するスクリプト上,
  2バイト文字のユーザー名などですと,
  下の処理で不具合起す物があるので修正させたいわけです.

  610 :デフォルトの名無しさん:2014/06/28(土) 17:38:26.90 ID:8fzSy6NM
  ファイル名として許される文字であっても^とか%とか面倒事が有るのは変わらんよ.
  ダメ文字の判定をダメ文字の多い言語(バッチファイル)でやるのはお勧めしない.

  611 :デフォルトの名無しさん:2014/06/28(土) 17:55:10.85 ID:XtGC9QGg
  ユーザー名なんてものは勝手に作らせるものじゃなくて.
  システム管理者が割り当ててやるもんだよ.
  運用自体がそもそも間違ってるけど, そういう会社なの?

  612 :デフォルトの名無しさん:2014/06/28(土) 18:19:20.46 ID:XtGC9QGg
  >>609
  まあそこは仕方ないとして.
  batだと色々と大変だから(ファイル名に&^%=~ような文字も使える. 特に&なんかは結構使う人が多い)
  jsかvbsのscriptを作って呼び出した方がいいね.

  613 :デフォルトの名無しさん:2014/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 :デフォルトの名無しさん:2014/06/29(日) 06:05:26.11 ID:vOF0sNXw
  SEDまで使い出すともうこのスレの範囲を超えると思う.

  615 :デフォルトの名無しさん:2014/06/29(日) 07:07:32.17 ID:5EYPycte
  >>613
  最初のecho %hoge%で問題が発生するだろ.
  hogeの中に&があったらエラーになるぞ.

  616 :デフォルトの名無しさん:2014/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 :デフォルトの名無しさん:2014/06/29(日) 10:54:35.82 ID:Qv/RYUQu
  >>616
  NULL(0x00)とDEL(0x7F)をASCII文字からハブらないで.

  618 :デフォルトの名無しさん:2014/06/29(日) 11:31:47.22 ID:lY8R5/1g
  >>613
  なるほど.
  バッチファイル1つだけでは完結できないのですね?

  619 :デフォルトの名無しさん:2014/06/29(日) 14:37:37.67 ID:5EYPycte
  >>618
  bat全体を検証しないと, 全角文字を取り除いただけで大丈夫かとうかはなんともいえないからね.
  &は大丈夫でも^は問題ないのか他のダメ文字はどうか, 全部確認しないと.
  むしろ, "a-zA-Z0-9_"とあと幾つかしか使っちゃダメとかにした方がいいよ.
  チェックはvbsかjsでなら一例として, /^[\w!#$+-=]+$/でmatchするかしないかだけで済むし.

  620 :デフォルトの名無しさん:2014/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 :デフォルトの名無しさん:2014/06/29(日) 17:38:44.54 ID:+Rdyy9T4
  >>621-622
  初心者レベルの知識自慢は初心者スレでどーぞ.
  あ, ただのコピペだから自慢にすらなってないか. w.

  624 :デフォルトの名無しさん:2014/06/29(日) 18:44:33.37 ID:bIa+Nxww
  オリジナルのASCII
  http://web.archive.org/web/20120201004138/http://wps.com/projects/codes/X3.4-1963/page5.JPG
  lowerケースは割り当てられていないが, DELは割り当てられている. ESCが別のところにある.

  625 :デフォルトの名無しさん:2014/06/30(月) 17:17:43.33 ID:lkR4e2Il
  >>623
  コピペ初心者より無知. ダサすぎる.

  626 :デフォルトの名無しさん:2014/06/30(月) 21:28:22.91 ID:7+p3WMn7
  >>625=ID:Qv/RYUQu
  なんか哀れ杉.
  まあ涙拭いてまた出直せや.

  627 :デフォルトの名無しさん:2014/06/30(月) 23:05:00.38 ID:X9YKGTTR
  知識自慢っぷりがアレな奴と,
  嘘を自信満々に教えた>>620.
  涙拭いて出直すのは一体誰か.

  628 :デフォルトの名無しさん:2014/06/30(月) 23:09:17.02 ID:SlnAgMvx
  >>627
  x 知識自慢.
  o コピペ.

  629 :デフォルトの名無しさん:2014/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 :デフォルトの名無しさん:2014/07/01(火) 10:47:02.63 ID:oklrq8uq
  知識自慢っぷりがアレな奴と,
  嘘を自信満々に教えた>>620.
  その尻馬に乗り, 自信満々に煽って自爆した>>623.
  涙拭いて出直すのは一体誰か.

  631 :デフォルトの名無しさん:2014/07/01(火) 12:27:16.71 ID:Y6wXilUm
  >>628
  どっちにしろコピペを指摘されて泣く程口惜しがる奴とか中々居ないだろ.
  自信満々に教えた事が間違ってて泣く程口惜しがる奴は沢山居そうだが.
  >>630
  だよな. 粘って何が得られると思っているんだろコイツ.

  632 :デフォルトの名無しさん:2014/07/01(火) 13:19:19.22 ID:FdcryOA+
  粘ってるのが630な件.
  631も630だろ. w.

  633 :デフォルトの名無しさん:2014/07/01(火) 13:27:46.30 ID:RDxbHHYG
  話題が爺の良き思い出の「紙テープ」でなかったら, もうとっくに終息してるんだがな. w.

  634 :デフォルトの名無しさん:2014/07/01(火) 14:50:57.88 ID:3858ZKTW
  そもそもコピペじゃなかったら, ソース出せって言い出すに決まってるのになあ.

  635 :デフォルトの名無しさん:2014/07/01(火) 15:26:20.04 ID:oklrq8uq
  >>632
  お前ずいぶん悔しそうだな. >>623

  636 :デフォルトの名無しさん:2014/07/01(火) 15:52:16.35 ID:kJLqG3hT
  >>635
  脳弱爺が・・・>>623は俺だ.

  637 :デフォルトの名無しさん:2014/07/01(火) 19:03:35.09 ID:VC3tjIsz
  >>619
  返信遅れてすいません.
  変数からsetで特殊文字全部を特定の文字列に置換して,
  その文字列が含まれている場合はエラーというのはどうなんでしょうか.

  638 :デフォルトの名無しさん:2014/07/01(火) 19:18:39.34 ID:3858ZKTW
  >>637
  そういう風に色々しなきゃならなくなるからbatじゃやりたくないってなるんですけど?
  例えば=があったらどうするとか.
  wshを併用すると楽にできるのにどうしてそれを忌避するのか?

  639 :デフォルトの名無しさん:2014/07/02(水) 20:13:49.17 ID:HKJU7oaB
  んじゃ.
  set | findstr /I "^hoge=" | onigsed -n -e "/[  -熙 i -]/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 :デフォルトの名無しさん:2014/07/03(木) 01:49:29.33 ID:j7u2CYhX
  >>638
  すみませんでした.
  onigsed, またはwhsをインクルードしてやってみます.

  641 :デフォルトの名無しさん:2014/07/03(木) 02:55:23.64 ID:p+9j4wwO
  onigsedはさておき, WSHはほとんどのWindowsに標準搭載されててバッチファイルからも簡単に呼び出せる.
  (かなり昔のWindows95などでは, 後から別途インストールしないと使えない場合もあったが)

  642 :デフォルトの名無しさん:2014/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 :デフォルトの名無しさん:2014/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 :デフォルトの名無しさん:2014/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 :デフォルトの名無しさん:2014/07/11(金) 17:48:11.78 ID:9PuMxGyL
  追加.
  大変分かり難いと思いますが, E:\TEST\000\だけで無くE:\TEST\001\と続きます.
  つまりE:\TEST\000\のサブフォルダ一斉削除だけで無く, E:\TEST\001\・・・・とE:\TEST\内全てで.
  同様の処理がしたいと思います.
  説明不足で紛らわしくて申し訳ありませんでした.

  646 :デフォルトの名無しさん:2014/07/11(金) 18:27:12.85 ID:SR0et8CD
  for /d %i in (*) do rd /s/q "%i"

  647 :デフォルトの名無しさん:2014/07/11(金) 22:39:55.67 ID:5GWHnvgm
  format e: /q
  e:
  mkdir \TEST

  648 :デフォルトの名無しさん:2014/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 :デフォルトの名無しさん:2014/07/11(金) 23:37:52.30 ID:SR0et8CD
  for /d %%i in (E:\TEST\000\*) do @rd /s/q "%%i"

  650 :デフォルトの名無しさん:2014/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 :デフォルトの名無しさん:2014/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 :デフォルトの名無しさん:2014/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 :デフォルトの名無しさん:2014/07/12(土) 15:26:45.33 ID:9UoaG5Sa
  645です.
  >>650さん 分かり難くて申し訳ありません. >>651さん のとおり\TEST\000, \TEST\001など.
  第一サブフォルダ直下のファイルは残し, それより更に下位階層のファイルは.
  フォルダ毎削除したいのです.
  皆さんのバッチを実行してみましたが, どのバッチでも以下の内容のエラーが出ててしまいます.
  コマンドラインは管理者権限で起動してtest.batを実行する形式です. 直打ちとバッチで表記方法でも.
  違うのでしょうか?
  --------------------------------------------------------------
  バッチ パラメーターの置き換えで, パス演算子の次の使用法は無効です:
  %~j"

  654 :デフォルトの名無しさん:2014/07/12(土) 15:53:56.09 ID:kRTfODRp
  >直打ちとバッチで表記方法でも違うのでしょうか?
  ここから分からないの?そりゃ違うこともいくつかあるよ  %と%%は顕著な違いだね.
  それと上のいくつかの奴で何処を修正したらいいのか自分で調べられないと.
  batがどう動くのか心配になるだろ?
  @とかecho offとかrdの/qを取ってみるとかecho 〜を挿入して途中までの動作を確認してみるとか.
  いろいろとやってみて.

  655 :デフォルトの名無しさん:2014/07/21(月) 19:57:47.42 ID:2HDHb1dV
  ファイルの作成/更新日時の取得でミリ秒まで可能な方法はありますか?
  現在 WSH を併用する事で HH:MM:SS までは取得できました.

  656 :デフォルトの名無しさん:2014/07/21(月) 20:13:42.87 ID:W3c/qJsI
  そもそもファイルシステムにそんな精度で記録されてない.

  657 :デフォルトの名無しさん:2014/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 :デフォルトの名無しさん:2014/07/22(火) 15:31:45.35 ID:WzwzWG6G
  エクスプローラを再起動する.

  660 :デフォルトの名無しさん:2014/07/23(水) 01:19:01.37 ID:zFLfjxtE
  あるファイルの別のフォルダに.
  もしあれば新しい場合だけ更新コピー, もしなければそのままコピー.
  これはいつもファイラーでやっていますが, 自動化するために.
  バッチでやろうとすると意外に適当なコマンドが無いことに気がつきました.
  copy replace xcopy どれもやや違う.

  661 :デフォルトの名無しさん:2014/07/23(水) 01:27:38.41 ID:wqN3aAbd
  robocopy

  662 :デフォルトの名無しさん:2014/07/23(水) 02:59:42.07 ID:fModGjlE
  ロボコピ使えるよな.
  共有フォルダからコピーしたいときとか, マルチスレッド指定で動かすとかなり高速.
  ミラーリングも何気に便利.

  663 :デフォルトの名無しさん:2014/07/23(水) 03:14:13.26 ID:qrjf+wSC
  >もしあれば新しい場合だけ更新コピー, もしなければそのままコピー.
  これファイルがあろうがなかろうが必ずコピーするってこと?

  664 :デフォルトの名無しさん:2014/07/23(水) 03:25:42.93 ID:fModGjlE
  >>663
  古い場合はコピーしたくないって事でしょ.

  665 :デフォルトの名無しさん:2014/07/23(水) 05:44:02.89 ID:YAYKYHxb
  xcopy /d じゃダメなん?

  666 :658:2014/07/23(水) 08:34:54.84 ID:i4+a6YSx
  >>659
  ありがとう.
  でも再描写で画面がチラつくのが嫌だったからSendKeys使ってタスクトレイ選択するマクロ作ろうとしたけど途中でめんどくなった.

  667 :デフォルトの名無しさん:2014/07/23(水) 17:56:00.34 ID:aSrmdrCP
  >>666
  アレはネタ回答だったけど, マウスカーソルをタスクトレイ一周させるUWSCマクロを起動するのが一番手軽かなぁ・・・.
  GUIはバッチの領分じゃないだろうし.

  668 :デフォルトの名無しさん:2014/07/24(木) 06:35:00.46 ID:wLOJyLfq
  >>659
  エクスプローラの再起動は遅延書込中のコピーバッファが壊れる可能性があるから.
  オススメできない.

  669 :デフォルトの名無しさん:2014/07/24(木) 11:55:54.05 ID:nK+P1D6K
  >>668
  遅延書き込みはOSの管轄だから無関係じゃないか?

  670 :デフォルトの名無しさん:2014/07/24(木) 12:35:24.06 ID:O0oQ+30t
  >>665
  サンキュです.
  /d で年月日なしが出来たんですね.
  xcopy  /DIQY  コピーファイル  コピー先フォルダ >nul
  で出来ました.

  671 :デフォルトの名無しさん:2014/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 :デフォルトの名無しさん:2014/08/03(日) 19:41:52.81 ID:VlWk/hq2
  >>672
  rename *.* 1234????.*
  重複するファイル名が存在するか, またはファイルが.
  見つかりませんでした.
  って出ることも.

  674 :672:2014/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 :デフォルトの名無しさん:2014/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

  676 :672:2014/08/03(日) 21:57:10.71 ID:1Uu1p9vY
  >>675
  ありがとうございます.
  希望の結果になりました.
  何をやっているのかさっぱり分からないので.
  キーワードを検索して勉強します.

  677 :デフォルトの名無しさん:2014/08/03(日) 23:34:44.62 ID:sMNbanvZ
  PowerShellでやりな. もっとわかりやすいから.
  [最強CUI]PowerShell -Part 1
  http://peace.2ch.net/test/read.cgi/tech/1378978504/l50

  678 :デフォルトの名無しさん:2014/08/05(火) 00:15:58.77 ID:kLJbxfuu
  コード書けよ・・・.

  679 :デフォルトの名無しさん:2014/08/05(火) 09:43:55.59 ID:KGbMG7kS
  >>678
  >>677にはそんなスキルは無い.

  680 :デフォルトの名無しさん:2014/08/05(火) 12:50:33.07 ID:GJbp8YVa
  PowerShellとVBAとVBとcscriptと wscritptとbat
  どう違うかよくわからない.

  681 :デフォルトの名無しさん:2014/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 :デフォルトの名無しさん:2014/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 :デフォルトの名無しさん:2014/08/05(火) 22:36:32.20 ID:XEHi5s4W
  for+findstr

  685 :デフォルトの名無しさん:2014/08/06(水) 09:14:32.46 ID:wb37f/uh
  「が」を重ねるな. しかも3個も. 小学校出てないのか?

  686 :デフォルトの名無しさん:2014/08/06(水) 09:15:06.50 ID:Szcv6wd/
  ですがですがうるせぇ.

  687 :デフォルトの名無しさん:2014/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 :デフォルトの名無しさん:2014/08/06(水) 21:02:32.40 ID:eBi+TUTe
  まあ幼稚ではあるな.

  691 :デフォルトの名無しさん:2014/08/07(木) 01:36:15.24 ID:1cACSwRn
  たまたま続いちゃうことはあるかも知れないけど, 指摘されてレディガガとか言い出すのは確かに幼すぎだわな.

  692 :デフォルトの名無しさん:2014/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 :デフォルトの名無しさん:2014/08/07(木) 20:15:39.19 ID:lQe8YTd+
  糞遅い回答ご苦労.

  694 :デフォルトの名無しさん:2014/08/08(金) 07:49:01.43 ID:1XaUH8/D
  >>683
  どうにもなりません.
  バッチファイルでブラックリスト方式で特殊文字を扱うのは極めて困難です.
  >>605を参考にホワイトリスト方式でfindstrする方が安全確実です.

  695 :デフォルトの名無しさん:2014/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 :デフォルトの名無しさん:2014/08/08(金) 23:07:22.92 ID:5JFxAKW6
  >>695
  グロ ロ軍曹.

  698 :デフォルトの名無しさん:2014/08/09(土) 01:16:54.57 ID:M9+XgLFu
  >>674-675
  こういうの15分ぐらいで正確なレスしちゃう人ってなんなの?
  ハッカーでもやってるの?

  699 :デフォルトの名無しさん:2014/08/09(土) 02:17:36.43 ID:gcdyIEXl
  ハッカーでもやってる, とかじゃなくて,
  そういう人のことをハッカーっていうんだよ.

  700 :デフォルトの名無しさん:2014/08/09(土) 09:55:11.59 ID:i28j8h0j
  拡張子cmdでも同じように動くけどバッチって言うの?

  701 :デフォルトの名無しさん:2014/08/09(土) 10:44:56.31 ID:bAgyu6Ew
  バッチ batch という単語は「一連の」って意味でwindowsの拡張子batの.
  ファイルだけを示す言葉じゃないからな.

  702 :デフォルトの名無しさん:2014/08/09(土) 11:41:25.84 ID:+T7xdrkU
  もともとパソコンがない時代から使われてる言葉だし.

  703 :デフォルトの名無しさん:2014/08/09(土) 17:35:48.44 ID:XYK1QIjB
  D&Dしたファイルの名前を使った空ファイルを作るバッチを書こうとしたけど,
  nulの説明に「出力先に指定するとすべて捨てられてしまいます. 」とか書いてあって.
  .batをうっかりWクリックしたらどっかが全部消されちゃうんじゃないか.
  とか思って怖くて「type nul」が使えなかったけど.
  「a >ファイル名」でも空ファイルが出来ると知ってホッとした.

  704 :デフォルトの名無しさん:2014/08/09(土) 20:16:09.85 ID:hJNtmb6r
  「バッチ」か・・・.
  FORTRANカードかかえてコンピュータの前に並んで順番まちしてたあのころがなつかしい.

  705 :デフォルトの名無しさん:2014/08/10(日) 02:38:35.36 ID:BjoIuKvP
  >>700
  >>680 が bat と言ったから >>681 に .cmd の話が無かっただけで.
  .cmd のファイルもバッチファイルと言うのが普通だと思う.
  但し「バッチ」だけだと >>704 の言うようなものを含んで.
  ちょっと意味が広過ぎちゃうかな・・・まあ文脈から解るけどな.
  >>704
  DO文の区切りのカンマをピリオドと間違えるんですね.

  706 :デフォルトの名無しさん:2014/08/10(日) 07:50:54.05 ID:s+lnJJas
  おまえらFORTRANとか40代ぎりぎりか50代なのか.

  707 :デフォルトの名無しさん:2014/08/10(日) 22:57:49.77 ID:Ucxorvd4
  >>706
  FORTRANって, スパコンでは現役じゃなかったっけ.

  708 :デフォルトの名無しさん:2014/08/11(月) 00:31:34.16 ID:eKFyA+w2
  理系の数値計算が専門じゃないとスパコンなんて.
  普通使わんから.
  文系SEとかにはわからん世界.

  709 :デフォルトの名無しさん:2014/08/11(月) 04:36:05.04 ID:ucFvkf6p
  >>700-702>>704-705
  コンピュータすら関係ない工場等の工程の分類に使う言葉でもあるらしいね. バッチ殺菌とか.
  >>707
  FORTRANは現役だった筈だけど, 現役のスパコンで.
  「FORTRANカードかかえてコンピュータの前に並んで順番まち」はしないんじゃないかな・・・.

  710 :デフォルトの名無しさん:2014/08/11(月) 05:09:33.57 ID:QqYi9zHx
  学生の頃, メインフレームの専用端末もいっぱい並んでて使わせてもらうこともあったが,
  普通はコーディングシートに書いてパンチ依頼し後日コンソール前に持っていって.
  カードリーダーにセットしたもんだった.
  LANが普及する以前のことですたい.

  711 :デフォルトの名無しさん:2014/08/11(月) 05:50:46.38 ID:0hXsvRH9
  >>709
  > 「FORTRANカードかかえてコンピュータの前に並んで順番まち」はしないんじゃないかな・・・.
  >>704 は学校の実習の提出でカードリーダー待ちとかじゃね?
  ジョブスケジューラが入ってないスパコンなんて見たことないし.

  712 :デフォルトの名無しさん:2014/08/11(月) 10:14:26.17 ID:ruK69Afs
  そろそろスレチ.
  FORTRANスレに池.

  713 :デフォルトの名無しさん:2014/08/13(水) 00:04:52.67 ID:SFxu1e0g
  (実はスレタイに.cmd書いてあるのすら忘れて>>700を書いたなんて言えない・・・)

  714 :デフォルトの名無しさん:2014/08/13(水) 00:14:58.86 ID:+iB3i1EW
  MSはDOS時代のBATとはもう全然かけ離れてしまったから.
  拡張子は.batじゃなくて.cmdを使うようにってリードしたかったんだろうな.
  けど.batが定着しすぎて.cmdは全然広まらなかった.

  715 :デフォルトの名無しさん:2014/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 :デフォルトの名無しさん:2014/08/13(水) 15:08:19.52 ID:fXr/sl8H
  もう記憶がおぼろげだが, .cmdってOS/2由来じゃなかったっけか.

  717 :デフォルトの名無しさん:2014/08/13(水) 17:37:28.73 ID:FbAV4SBW
  >>716
  せめて調べてから書き込めよ・・・.

  718 :デフォルトの名無しさん:2014/08/17(日) 21:15:34.96 ID:Z7ceIrty
  >>717
  あれ?勘違いだったかな?と思ってぐぐってみたけど.
  http://blogs.wankuma.com/naka/archive/2006/10/04/40587.aspx
  >ちなみに拡張子cmdはOS/2由来の拡張子ですね. OS/2サブシステムの.
  >互換性のためにNTにも搭載されることになったはずです.
  ってのしか見つけられなかったわ.

  719 :デフォルトの名無しさん:2014/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 :デフォルトの名無しさん:2014/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 :デフォルトの名無しさん:2014/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 :デフォルトの名無しさん:2014/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 :デフォルトの名無しさん:2014/08/30(土) 19:42:34.03 ID:QNgxnmiC
  >>719
  言い忘れてたけど,
  cdコマンドでドライブの移動まで行おうとするなら.
  cd /d
  または.
  pushd
  を使うこと.

  724 :デフォルトの名無しさん:2014/08/31(日) 13:32:37.54 ID:1Af2SVco
  >>723
  あちゃ, いつの間にか cd /d というのが出来ていたんだ.

  725 :デフォルトの名無しさん:2014/08/31(日) 13:54:59.19 ID:0q/bXM8F
  いつの間にか??
  少なくとも10年以上前からじゃないのか?

  726 :デフォルトの名無しさん:2014/09/01(月) 21:28:44.97 ID:NDGxd+CU
  わろた.
  一体いつの時代からトリップしてきたのか.

  727 :デフォルトの名無しさん:2014/09/01(月) 23:54:16.88 ID:DvTGwAPq
  DOSコマンドは, MS-DOS, CP/M時代から.
  頭が更新されていないから仕方がない.
  まぎらわしい, unix にもあるコマンドは同じにしてくれないと.

  728 :デフォルトの名無しさん:2014/09/02(火) 00:03:47.82 ID:7xgNj+hk
  うにっくすにドライブなんてねーよ.

  729 :デフォルトの名無しさん:2014/09/03(水) 23:55:50.49 ID:CcsOzyas
  こんなやりかたがあった.
  type con >"aaa.txt"

  730 :デフォルトの名無しさん:2014/09/04(木) 00:12:21.00 ID:a8LqbcNn
  copy con aaa.txt 派も居るぜ.
  >>727
  Unix系とcmd両方使ってると, 標準エラー出力のリダイレクトをよく間違えて.
  "2"ってファイルは無いよと言われたり, 標準エラー内容が"2"ってファイルに出力されるわ・・・.

  731 :デフォルトの名無しさん:2014/09/04(木) 00:14:28.77 ID:a8LqbcNn
  ごめん, そこは同じか・・・ただ俺がバカなだけだった・・・.

  732 :デフォルトの名無しさん:2014/09/04(木) 03:08:47.27 ID:yYzYytik
  cshが混ざったんだろ?

  733 :デフォルトの名無しさん:2014/09/05(金) 11:34:31.68 ID:sULgkISo
  sleep相当コマンドはフリーソフトしかないのかと思っていたが,
  choice や timeout で代用できた.
  timeout /T n >nul
  forfiles 発見.

  734 :デフォルトの名無しさん:2014/09/05(金) 17:04:48.35 ID:PWtfb50P
  知らなかった. timeoutコマンドをググったら, Windows Vista/Server2003以降で使えるらしいな.

  735 :デフォルトの名無しさん:2014/09/06(土) 02:56:53.14 ID:CKGPPObU
  新しいコマンドかぁ・・・XPはそろそろ見限っていっても良いだろうしそっちに目を向けるのも良いね.
  forfilesで@〜とかを導入したのはバッチでは%%~にする仕様がキモかったからとかなのかなぁ・・・.
  その辺の誤爆を意識したにしては0xHHとか導入しててこれも誤爆がちょっと怖い.
  ところで, 0xHHに面白い使い道って無いかな?

  736 :デフォルトの名無しさん:2014/09/06(土) 10:50:51.07 ID:MxvNWPBV
  コマンドって言うかあれexeがぽつんとあるからXPにも持ってったら使える.

  737 :デフォルトの名無しさん:2014/09/06(土) 11:21:15.51 ID:VC7+V5v8
  >>736
  そんなライセンス違反するぐらいなら, 自分で作るわ.

  738 :デフォルトの名無しさん:2014/09/06(土) 11:55:47.36 ID:7o9GfA8D
  XP以前のWindowsでやるならWSHと併用するのが無難だろ.

  739 :デフォルトの名無しさん:2014/09/06(土) 12:14:14.46 ID:/ZVE3fJb
  持ってける環境ならそもそもリソースキットのsleepでいいよなぁ.

  740 :デフォルトの名無しさん:2014/09/06(土) 14:44:22.93 ID:oxbqUYdk
  イロイロ面倒なので ping -n 4 127.0.0.1 >nul で済ます派.

  741 :デフォルトの名無しさん:2014/09/06(土) 14:51:57.54 ID:Q5t2bt7Q
  俺も同じだけど.
  ping -n 4 localhost>nul
  って書くなあ.

  742 :デフォルトの名無しさん:2014/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 :デフォルトの名無しさん:2014/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

  745 :743:2014/09/08(月) 11:49:15.60 ID:mzCBiPNi
  >>744
  すばらしい!
  SET を CALL でやるとか, そんなことできたんですね.
  * も \ でエスケープできるんですね.
  実はそれは試した気がするんですが, その時はまた別の問題で動かなかったのだと思います.
  大変勉強になりました. ありがとうございます.

  746 :743:2014/09/08(月) 12:06:19.31 ID:mzCBiPNi
  たびたびすみません.
  >* も \ でエスケープできるんですね.
  エスケープしてるわけじゃなく \* という文字列にマッチさせたんですね.

  747 :デフォルトの名無しさん:2014/09/15(月) 05:25:26.21 ID:xvxXq9UP
  Win7 64bit環境でやたらと.
  >このコマンドを実行するのに十分な記憶域がありません.
  というメッセージが出るんだけどどういう理由で出るんだろうか.
  指示したコマンドはすべて正常に実行されてバッチ終了時に出てるっぽい.
  やってることはこの程度で複雑な再帰的な呼び出ししてリソースが足りなくなるようなこともしてないんだけど.
  dir xxx > index.txt
  start myapp index.txt

  748 :デフォルトの名無しさん:2014/09/15(月) 06:48:36.06 ID:lRy+d+xy
  >>747
  ぽい, じゃなくてせめて特定しろよ.

  749 :デフォルトの名無しさん:2014/09/15(月) 19:07:07.76 ID:YYlxE9nY
  startに2つ引数渡すと, 1つ目はタイトルバー文字列であって実行コマンドじゃないんだけど, そこは考慮しとるか?

  750 :デフォルトの名無しさん:2014/09/16(火) 01:59:34.14 ID:c+NwjENR
  >>749
  startでは, ""で括ってない文字列はタイトルとは見做さないし.
  もしmyappが実際には""で括ったパスだったとしても.
  .txtに関連付けられたテキストエディタが起動するだけのことじゃない?
  myappが何者か知らんけどね.

  751 :デフォルトの名無しさん:2014/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 :デフォルトの名無しさん:2014/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 :デフォルトの名無しさん:2014/09/17(水) 22:01:06.18 ID:/eUJEkTQ
  >>751
  LogParser使うと楽.
  logparser -q:on -headers:off -headerRow:off -i:csv -o:csv "selectfield1,
  sequence(1), field3 from hoge.csv where field1 <> 'B'"

  754 :デフォルトの名無しさん:2014/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 :デフォルトの名無しさん:2014/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 :デフォルトの名無しさん:2014/09/18(木) 14:02:21.24 ID:rT0APxd3
  エディタでB始まり行を削除し, 二項目でソート sort /+3

  757 :デフォルトの名無しさん:2014/09/18(木) 15:37:07.01 ID:M6S1ZPsM
  >>756
  連番振り直しにならないしそれは多分違うと思う.

  758 :デフォルトの名無しさん:2014/09/18(木) 15:59:59.78 ID:vLADtqdv
  >>757
  そっか, ソートでなく番号付け直しだった.
  撤回.

  759 :751:2014/09/18(木) 21:08:15.87 ID:IKvy/bQU
  皆さん, 助言ありがとうございました.
  おかげさまで, イメージしていた処理ができるようになりました.
  >>754で書かれたものをベースでできました.
  ただ, データが数万件あるファイルの処理なので, 結構時間がかかります.
  軽いファイルで, 同様の処理があるので, これを活用していきたいと思います.

  760 :デフォルトの名無しさん:2014/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 :デフォルトの名無しさん:2014/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 *
  fromnew.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 :デフォルトの名無しさん:2014/10/05(日) 23:51:44.69 ID:zNTRptzw
  バッチ内で, 今日の曜日を知る方法がわからなかったので調べたが,
  一発で得る方法は無いんですね.
  年月日がわかると計算できるとわかったが面倒, 曜日GETコマンドを追加してほしい.
  昔のDOSだと出来たのに.

  763 :デフォルトの名無しさん:2014/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') doif
  "%%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 :デフォルトの名無しさん:2014/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 :デフォルトの名無しさん:2014/10/06(月) 05:51:08.25 ID:xttTcZgk
  >>762
  echo %date:~12, 1%

  766 :デフォルトの名無しさん:2014/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 :デフォルトの名無しさん:2014/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 :デフォルトの名無しさん:2014/10/07(火) 01:25:17.83 ID:7+b6LNQ5
  >>763-769
  ありがとうございます.
  ぐぐったら, いろんなやりかたがありましたので,
  コピーしてバッチを作り使っています. (パクリ) で >>766さんとほぼ同じ.
  date.exeはあると便利そうですね.

  769 :デフォルトの名無しさん:2014/10/08(水) 04:17:28.70 ID:UoQC8Akv
  4年前のスレの時に作った.
  ISO 8601 の週とか, 曜日とかのバッチを貼ってみる.
  @echo off &amp; setlocal enabledelayedexpansion
  set /a y2=%1, m2=%2, d2=%3, y1=y2, y3=y2+1
  set a=月火水木金土日&amp; 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 &amp; set /a w=w2-w1+1, b=b2-b0
  call :x y3 1 4 w3 a3 b3
  if %w%==0 set /a y1-=1 &amp; 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 &amp; 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 :デフォルトの名無しさん:2014/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 :デフォルトの名無しさん:2014/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はWindowsVista以降ではありません!

  772 :デフォルトの名無しさん:2014/10/13(月) 19:03:27.34 ID:Sxb1My8w
  xcopyの/vオプションってデータを読み取れる形式になってるか確認するだけで.
  ハッシュ確認とかはしてないの?
  http://www.vor.jp/winmemo.htmlここ見るとあまり信用できないみたいな感じの事書いてあるけど.
  windows7環境でxcopy  /?でヘルプを見ると.
  >/V コピー先の各ファイルのサイズを検証します.
  と書いてあるけど.

  773 :デフォルトの名無しさん:2014/10/13(月) 22:26:19.21 ID:fGTkDBdq
  ファイルサイズが一致するか確認するだけで,
  ファイル内容の完全一致を検証したりハッシュ確認したりはしないってことでしょ.

  774 :デフォルトの名無しさん:2014/10/13(月) 22:31:27.06 ID:Sxb1My8w
  じゃあビットエラーやライト・リードエラー起こりえるって事だよね?
  そっかー・・・ありがと.

  775 :デフォルトの名無しさん:2014/10/14(火) 08:01:58.57 ID:xX880Orc
  >>772
  /vオプションなんかに頼らず,
  fc /bでバイナリ比較するのが確実.

  776 :デフォルトの名無しさん:2014/10/14(火) 15:08:17.21 ID:GsQr0uZE
  >>774
  そんな心配は不要だろ.
  HDDやDVDやメモリカードならCRCエラー訂正ぐらいはやってるだろうし,
  そもそもHDDのファイルが信用できなきゃ, OSのEXEファイル自体の動作を心配しなきゃならなくなるぞ.

  777 :デフォルトの名無しさん:2014/10/14(火) 15:16:42.81 ID:OfBdBdCX
  いやデータ化けるよ.
  一例だけど.
  http://anago.2ch.net/test/read.cgi/jisaku/1397230889/344

  778 :デフォルトの名無しさん:2014/10/14(火) 15:23:32.38 ID:GsQr0uZE
  >>777
  じゃあ心配して, 毎回チェックすりゃいいさ.
  そのチェックプログラムももしかしたら壊れてるかもしれんからチェックする前に.
  チェックプログラムもチェックしなきゃな.

  779 :デフォルトの名無しさん:2014/10/14(火) 15:50:57.79 ID:OfBdBdCX
  「じゃあ」って会話成り立ってなくね・・・?

  780 :デフォルトの名無しさん:2014/10/14(火) 15:55:47.13 ID:GsQr0uZE
  >>777
  もしファイルが1コでも壊れてたならそのHDDは廃棄したほうがいいよ.
  数十万個もあるファイルの中でどのファイルも信用できなくなるから.

  781 :デフォルトの名無しさん:2014/10/14(火) 17:54:51.45 ID:KrwLefD2
  ID:GsQr0uZE
  ガキかよ. w.

  782 :デフォルトの名無しさん:2014/10/20(月) 11:31:06.84 ID:/QCZ146H
  今知った情弱だけど.
  ドス窓でもlsやcpってあるんだね.
  dirよりlsの方がいいわ.

  783 :デフォルトの名無しさん:2014/10/20(月) 13:00:44.70 ID:3N7ImT1k
  無いよ.
  msysとかgitとか自分で入れたんじゃ?

  784 :デフォルトの名無しさん:2014/10/20(月) 13:12:52.90 ID:Piwo04XB
  あぁ本当だ.
  環境変数確認してみたら, 過去の自分がmsys\binのパス通してたみたい.
  勘違いごめん・・・.

  785 :デフォルトの名無しさん:2014/10/20(月) 20:14:35.56 ID:dmAxhR4K
  Microsoftさまの.
  Microsoft Windows Services for UNIX か Subsystem for UNIX-based Applications+
  パッケージ.
  の話をしてたのかと思ったら違った.

  786 :デフォルトの名無しさん:2014/10/20(月) 23:37:51.04 ID:DQouY8WZ
  >>785
  それってbashのShellshock脆弱性のパッチは出てるの?

  787 :デフォルトの名無しさん:2014/10/21(火) 01:00:34.39 ID:c8NUu7RB
  >>786
  http://www.atmarkit.co.jp/fwin2k/productreview/sfu30/sfu30_05.html
  http://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 :デフォルトの名無しさん:2014/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 :デフォルトの名無しさん:2014/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 :デフォルトの名無しさん:2014/10/21(火) 14:29:59.30 ID:PndivJJV
  exitやめてpauseにして.
  一度どんな風に渡されているのか見てみたらいい.

  795 :デフォルトの名無しさん:2014/10/21(火) 14:35:09.24 ID:S84tBIG3
  わかりました.
  いろいろヒントいただいたおかげで検索ワードがいろいろ追加できたので.
  今まで探しきれなかった情報にたどりつけそうです.
  ちょっと自力でやってみてまたつまったらこちらにお邪魔します.
  >>789>>791ありがとうございました.

  796 :デフォルトの名無しさん:2014/10/21(火) 22:34:08.95 ID:rPngFVY9
  フォルダを削除した直後に同名のフォルダを新規に作成しようとすると「アクセスが拒否されました」と表示されて作成できないことがあります.
  コマンドは終了していても, フォルダの削除は完了していなくて作成できていないような動きなのですが, そんなことあり得るのでしょうか?

  797 :デフォルトの名無しさん:2014/10/22(水) 02:01:18.93 ID:ZQ5GB3JT
  素直にスクリプト用の言語使え何かと捗る>>795

  798 :デフォルトの名無しさん:2014/10/22(水) 20:48:08.90 ID:RtNwyOkD
  >>796
  あり得ます.

  799 :デフォルトの名無しさん:2014/10/26(日) 01:47:43.27 ID:hoJdkFAv
  今知ったけどM$がコマンドでハッシュ計算用のソフト公開してるね.
  fcivってやつ.

  800 :デフォルトの名無しさん:2014/10/26(日) 04:02:18.84 ID:fx3FFnF6
  >>799
  それ使ってバッチファイル書いたことあるけど, 出力をバッチで取り扱うのが面倒だった上に,
  Unicodeパス非対応, 挙句マルチバイト文字の扱いにバグがあってすごく駄目駄目だった.
  isupper(*(signed char*)str)でマイナス文字領域を参照しちゃう系のバグだったかな,
  デベハトップ系よりもタチが悪くて, 2バイト文字の先行バイトすら化けるという有り様だよ.
  今は直ってるかなーと思ったが2004年からバージョンアップしてないんすね, 駄目だこりゃ.

  801 :デフォルトの名無しさん:2014/10/26(日) 13:36:26.66 ID:RNavWr6/
  Win7のシャットダウンコマンドでXPみたいなカウントダウンしてる画面って出せない?
  コメントなら出るし2分前になればダイアログ出るけど・・・.

  802 :デフォルトの名無しさん:2014/10/26(日) 19:16:07.11 ID:nC00iuOZ
  >>800
  そーだったのか.
  Windows8のダウンロード版が一致するかチェックするのに便利だったが.

  803 :デフォルトの名無しさん:2014/10/26(日) 19:34:43.95 ID:dzHjPHpI
  >>802
  ダメ出しできる俺スゲー君でしょ.
  便利に使えばいいだけ.
  不具合あるなら自分で作ってもそんなに大変じゃないし.

  804 :デフォルトの名無しさん:2014/10/26(日) 20:12:30.67 ID:fx3FFnF6
  >>802
  不特定ファイル名を受け入れる用途やバッチファイルでは駄目だけど,
  ファイル名の取り扱いとかでバグ踏まない用途なら別に問題ないよ.
  >>803
  バッチファイル書いてからバグに気がつくよりマシだと思って情報出しただけなんだけどなぁ・・・.
  というかハッシュ計算機を自分で作るって, ライブラリに頼らず書くのは結構な手間だろ何言ってん?

  805 :デフォルトの名無しさん:2014/10/26(日) 20:14:50.47 ID:RaZwtAdW
  PsShutdown

  806 :デフォルトの名無しさん:2014/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 :デフォルトの名無しさん:2014/10/26(日) 21:42:07.29 ID:nC00iuOZ
  すいません俺が誘導したからかも.
  http://kanae.2ch.net/test/read.cgi/gameurawaza/1413584805/971+976+979+982

  809 :デフォルトの名無しさん:2014/10/26(日) 22:06:13.49 ID:ICsbUc5p
  >>807
  お前, 最低だな.

  810 :デフォルトの名無しさん:2014/10/26(日) 22:10:20.56 ID:fx3FFnF6
  >>806
  うん, 「今後も, 特にバッチファイルで使うなら別のハッシュ計算ソフト探すべきだな」と思えるよ.
  : 実際にはnode.jsのコアライブラリに丸投げしたけど. コールバックまみれでダルかった.
  しかしライブラリ使うに決まってるって言われるかと思ったら実装が楽って返事が来るとはなぁ・・・.
  大したことがないのならバッチファイルで実装してみてくれとか無茶振りしてみても良いかい?

  811 :デフォルトの名無しさん:2014/10/26(日) 22:27:19.67 ID:ICsbUc5p
  >>810
  > うん, 「今後も, 特にバッチファイルで使うなら別のハッシュ計算ソフト探すべきだな」と思えるよ.
  なら, そう書けばいいだけ.
  > 大したことがないのならバッチファイルで実装してみてくれとか無茶振りしてみても良いかい?
  リンク先読んだか?
  C でも数十行だから, たいしたことないだろ?
  バッチファイルではバイナリと配列が扱えないので, 面倒.

  812 :デフォルトの名無しさん:2014/10/26(日) 22:29:05.55 ID:KYTvr3GZ
  もしもしのソースはいつもwikipedia(笑)

  813 :デフォルトの名無しさん:2014/10/26(日) 23:34:43.51 ID:fx3FFnF6
  >>811
  ここはバッチファイルスレだって分かってるのかね, 君.
  「結局node.jsで自作(但し丸投げ)した」ってボケにも気づいてないようだし・・・もう少し余裕を持ちたまえ.

  814 :デフォルトの名無しさん:2014/10/26(日) 23:49:34.01 ID:IWXHWYqd
  .NET 4.5でようやく, MD5が追加されたのでは?

  815 :デフォルトの名無しさん:2014/10/26(日) 23:51:05.93 ID:9AUTkNpp
  今, 困っていること.
  call で複数階層の呼び出しをした場合,
  エラーで以後を中断し, 一気に元に帰る方法がわからない.
  exit /B だと次々に判定をしないと戻れないし,
  exit だと DOSプロンプト自体が消えてしまう.

  816 :デフォルトの名無しさん:2014/10/26(日) 23:57:41.58 ID:KYTvr3GZ
  エラーのときにフラグセットして各ルーチンでそれ観察すれば.

  817 :デフォルトの名無しさん:2014/10/27(月) 00:23:38.36 ID:zpmVa3Ig
  >>815
  callじゃなくてcmd.exeを呼んでおけばexitで戻れる. それが嫌なら>>816

  818 :デフォルトの名無しさん:2014/10/27(月) 01:14:29.68 ID:vMuLOlfx
  >>816
  >>817
  ありがとうございます.
  cmd.exeか, なるほどなー.

  819 :デフォルトの名無しさん:2014/10/27(月) 02:45:30.73 ID:os0cynVo
  mingwにopenssl sha1コマンド入ってた.
  ただ表示するだけだけど.

  820 :デフォルトの名無しさん:2014/10/27(月) 02:47:04.59 ID:os0cynVo
  MSYSだった. w.

  821 :デフォルトの名無しさん:2014/10/27(月) 05:11:17.57 ID:iE0BQBfx
  >>813
  何を言いたいのかさっぱりわからんが, 悔しさは伝わったよ. w.

  822 :デフォルトの名無しさん:2014/10/27(月) 05:48:58.48 ID:zpmVa3Ig
  >>821
  何を言いたいのかさっぱりわからんが, 悔しさは伝わったよ. w.

  823 :デフォルトの名無しさん:2014/10/27(月) 05:54:06.73 ID:xZ3TAadP
  >>812
  ID:fx3FFnF6 と同じで, ダメ出ししかできない奴乙.
  使えるものは便利に使えばいいじゃん.
  まあ,
  > exit /B だと次々に判定をしないと戻れないし,
  と書いてるのに,
  > エラーのときにフラグセットして各ルーチンでそれ観察すれば.
  とか, 書いちゃう人だし. w.

  824 :デフォルトの名無しさん:2014/10/27(月) 05:56:08.53 ID:iE0BQBfx
  >>822
  良かったな. w.

  825 :デフォルトの名無しさん:2014/10/27(月) 10:41:19.76 ID:G9UeKJLQ
  自己紹介乙(笑)

  826 :デフォルトの名無しさん:2014/10/27(月) 12:37:15.39 ID:h7Lo5JhP
  涙ふけよ.

  827 :デフォルトの名無しさん:2014/10/27(月) 15:04:47.97 ID:tc+ZTYEM
  ファイル名の取り扱いにバグがあるなら標準入力から突っ込めばモーマンタイ.
  WindowsならCryptAPIにハッシュ関数は一通りそろってるからラクショー.

  828 :デフォルトの名無しさん:2014/10/27(月) 19:40:15.14 ID:vmmZ1w6v
  コード書こうよ.
  スラドより酷え・・・.

  829 :デフォルトの名無しさん:2014/10/27(月) 20:21:57.22 ID:UF6Jw/hL
  >>827
  改造板に帰って来いよ. 誰もいなくなっちゃったんだよ.

  830 :デフォルトの名無しさん:2014/10/27(月) 23:08:21.57 ID:c91aEmZZ
  2週間に一度とか3週間に一度とかに実行させるサンプルどっかに無いでしょうか?
  バッチファイルを実行してから, 実行すべきかどうか判断して.
  実行するしないに分岐するようなのが欲しいのですが, 自分ではどうにもうまいこと.
  思いつかず, サンプルを探してみたのですがどうにも見つけられず・・・.
  実行した日を別ファイルにして書き出すと管理が面倒なことになるので,
  曜日と日付をみてなんとかできないものかと考えたものの頓挫しました.

  831 :デフォルトの名無しさん:2014/10/28(火) 02:16:00.84 ID:E6RWW6Yr
  >>830
  自分のPCだけならスケジューラにbatを登録すればいい.
  (実行にユーザ名とパスワードが必要なため)
  スケジューラに登録するbatも簡単に書ける.

  832 :デフォルトの名無しさん:2014/10/28(火) 02:37:50.58 ID:TKGNZfF+
  俺なら特定のファイルキープしておいて一定以上新しいなら実行しないようにする.

  833 :デフォルトの名無しさん:2014/10/28(火) 02:46:35.27 ID:E6RWW6Yr
  >>832
  日付で何日何週間先とか後とかを比較するには,
  基準となる日を決めて, 本日とファイル日付を基準からの日数を求めて差.
  求めるということをしないといけない.
  確かにそんなに難しいことではないが, batに不慣れだとまず実現できないだろう.

  834 :デフォルトの名無しさん:2014/10/28(火) 03:44:00.38 ID:IUrAseGh
  $ forfiles /D -14 /M *.bat /C "cmd /c echo [last modified : @fdate]: @path"

  835 :デフォルトの名無しさん:2014/10/28(火) 04:52:42.02 ID:mh0S7TxZ
  >>827
  fcivは標準入力を読むように出来てないでしょうに.

  836 :デフォルトの名無しさん:2014/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

  837 :830:2014/10/28(火) 22:06:59.72 ID:+z/Rv312
  >>831-834
  様々なヒントをありがとうございます.
  処理するディレクトリ毎に目印ファイルを forfiles で判定させる, な感じで目処が立ちました.
  あらためて読み直すと自分のレス >>830 何かおかしいな.
  『曜日』が肝なので「2週間に一度とか3週間に一度」というより「隔週の金曜日とか3週毎の月曜日」だし,
  「頓挫」じゃなくて「挫折」だし・・・.

  838 :デフォルトの名無しさん:2014/10/29(水) 01:03:14.85 ID:QREYhhOY
  >>836
  こちらを参考にされては如何でしょうか.
  バッチファイルでコンソールウィンドウのタイトルを取得する.
  http://scripting.cocolog-nifty.com/blog/2009/01/post-22fe.html

  839 :Mail:sagete テスト 転載ダメ&copy;2ch.net:2014/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 :デフォルトの名無しさん:2014/10/29(水) 22:17:40.80 ID:l7NTsp1b
  >>840
  LFコードを環境変数に入れるところで一行少ないため.
  文字列の先頭に余計なものがつき, 全体に2つずつずれてるので.
  %2->%4 %9->%11
  だけど, 改行を一行挿入するだけの方が良い.

  842 :デフォルトの名無しさん:2014/10/30(木) 13:11:29.14 ID:jkHBLx1J
  ckwとnyaosを使い分けたいんですが.
  ckw.cfg下記のように, コメント分にしようと思ったんですがうまくいきません.
  //Ckw*title: ckw[cmd]
  //Ckw*exec: cmd.exe
  //Ckw*chdir: c:\
  どうすればいいですか?

  843 :デフォルトの名無しさん:2014/11/11(火) 21:35:55.04 ID:S0cv/9qS
  コマンドでフォント変更って可能でしょうか.
  utf-8使用時にショートカットのフォント変更を行わずバッチ側で済ませたいのです.

  844 :デフォルトの名無しさん:2014/11/11(火) 21:55:19.19 ID:S0cv/9qS
  デフォルトの.
  ラスタフォントからMSゴシックに変更したいと考えています.
  宜しくお願いいたします.

  845 :デフォルトの名無しさん:2014/11/12(水) 00:43:18.12 ID:IagLMQCH
  >>843>>844
  ・regコマンドなどでコンソール用のレジストリ定義を変更して, それに合致するコンソールを開くようなバッチを書く.
  ・WSHなどで自身のコンソールのGUIを自動操作してフォント設定の部分を操作するようなスクリプトを書く.

  846 :デフォルトの名無しさん:2014/11/12(水) 00:48:36.21 ID:TfuExqnw
  コマンドプロンプトの表示フォントを変えたいってこと?
  「ファイル名を指定して実行」でcmdで起動して,
  ウィンドウ左上のアイコンをクリック->プロパティ->フォントタブで変えれば,
  次回から勝手に変わるんじゃないっけ.

  847 :デフォルトの名無しさん:2014/11/12(水) 04:48:11.36 ID:XVH80VNh
  コマンドプロンプトでUTF-8を表示させたり出来たっけ?

  848 :デフォルトの名無しさん:2014/11/12(水) 07:24:51.04 ID:ZQOXX5UM
  echo UTF-8

  849 :デフォルトの名無しさん:2014/11/12(水) 07:30:55.45 ID:bmz8bGaM
  >>847
  code pageの話じゃね?
  chcp 65001

  850 :デフォルトの名無しさん:2014/11/12(水) 12:50:20.44 ID:SgzYB1N4
  >>849
  なんかフォントの指定がうまくできない.

  851 :デフォルトの名無しさん:2014/11/12(水) 12:57:06.08 ID:bmz8bGaM
  >>850
  へ?フォントの指定は >>845 が答えてくれてるじゃん.

  852 :デフォルトの名無しさん:2014/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 :デフォルトの名無しさん:2014/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 :デフォルトの名無しさん:2014/11/12(水) 22:33:49.24 ID:bmz8bGaM
  >>852
  そうなんだ. テキトー言ってすまん.>>850

  855 :デフォルトの名無しさん:2014/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 :デフォルトの名無しさん:2014/11/14(金) 03:39:01.31 ID:ptj087p2
  結局質問者のUTF-8使用時に色を変えたいってのは.
  どういう意味だったん?

  857 :デフォルトの名無しさん:2014/11/14(金) 04:30:19.38 ID:1+T9Ha44
  色に関する質問ってどれだ?

  858 :デフォルトの名無しさん:2014/11/14(金) 05:37:24.74 ID:ptj087p2
  フォントを先に変えておいて, chcp 65001で.
  typeコマンドでutf-8ファイルを表示することは出来るけど.
  クリップボード経由で貼り付けると表示が崩れるし,
  IMEも起動出来ないのはまあ良いとして,
  batが動かないのはどうしてだろう?

  859 :デフォルトの名無しさん:2014/11/14(金) 12:47:50.79 ID:eiUQB9Ml
  >>858
  BOM 入ってね?

  860 :デフォルトの名無しさん:2014/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 :デフォルトの名無しさん:2014/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:CR10: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 :デフォルトの名無しさん:2014/11/15(土) 23:15:58.49 ID:teKkhWvu
  tar.gzの中にMakefileが入ってるか調べるコマンドありますか?

  863 :デフォルトの名無しさん:2014/11/16(日) 02:03:07.59 ID:04wQ79vu
  Unix/Linux系のコマンドアプリや, Cygwinなどを導入する気があるなら.
  tar ztf ファイル名.tar.gz | grep Makefile
  みたいな感じになるんだろうと思うが.
  標準的なコマンドセットでどうにかしようと思うと苦しいかもなあ・・・.

  864 :デフォルトの名無しさん:2014/11/18(火) 11:45:58.55 ID:A18MHYQa
  確かにwshで作れないことはないけど. . . ってレベルの話だね.
  そんなの今更作る気もしないぞ.

  865 :デフォルトの名無しさん:2014/11/22(土) 09:59:14.41 ID:Dw16glaS
  あざっす.
  諦めてUNIX使うお. w.

  866 :デフォルトの名無しさん:2014/11/29(土) 02:15:50.80 ID:Xuh6T+Vi
  DOS画面をファイルに書き出すバッチはどうやればできますか.
  手動だと全部選択してコピーしエディタでペーストするでできます.

  867 :デフォルトの名無しさん:2014/11/29(土) 02:59:42.56 ID:Ewz0tat3
  >>866
  http://www.adminweb.jp/command/redirect/

  868 :デフォルトの名無しさん:2014/12/02(火) 00:21:15.45 ID:84bfmZQr
  >>867
  ありがとうございます.
  やはり実行前に指定するしかないんですかね.
  ckwやcolorconsoleもダメみたいだし.
  emacs系のエディタ内から実行すると出来そうだが, 使っていないし.

  869 :デフォルトの名無しさん:2014/12/02(火) 20:52:58.98 ID:eiyTotPn
  colorを使うと「"コマンド プロンプト"のプロパティ」の「画面の色」ダブにある16色の内から適宜背景色と文字の色を設定できますが.
  この16色の値自体をコマンドによって変更することは可能でしょうか?

  870 :デフォルトの名無しさん:2014/12/02(火) 21:44:00.72 ID:HWsQAGF0
  reg /?

  871 :デフォルトの名無しさん:2014/12/02(火) 22:06:42.39 ID:eiyTotPn
  >>870
  回答ありがとうございます.
  vistaでは HKEY_CURRENT_USER\Console\cmd にある ColorTable00 などを編集することで色の変更はできました.
  しかしこれだとOSを一度再起動しないと反映されません.
  「"コマンド プロンプト"のプロパティ」上で件の値を変更した時のようにリアルタイムに反映させることはできないでしょうか?
  条件を後から付け足してしまってすみません.

  872 :デフォルトの名無しさん:2014/12/03(水) 03:12:46.33 ID:SnuHs4CF
  >>871
  WScript.exeでSendKeys

  873 :デフォルトの名無しさん:2014/12/03(水) 05:01:32.71 ID:JM1QCjro
  >>871
  > OSを一度再起動しないと反映されません.
  start cmd & exit

  874 :デフォルトの名無しさん:2014/12/03(水) 11:54:27.24 ID:MC2xUBgH
  >>872
  コマンドプロンプトのシステムメニューを出す方法プリーズ.
  ALT+Spaceはキーコードを送っても無効化された.

  875 :デフォルトの名無しさん:2014/12/03(水) 16:28:23.23 ID:JhxMqpE5
  >>871, 873
  なるほど. ウチのWin7でも HKEY_CURRENT_USER\Console 内の ColorTable00 などで同様にできたが,
  実際問題そこまでして微妙な色を設定する必要があるものなの?

  876 :デフォルトの名無しさん:2014/12/03(水) 16:29:24.71 ID:c+wt1AcT
  >>872-873
  どうもありがとうございます.
  Sendkeysについては>>874さんの指摘通り私の能力ではうまくいきませんでした.
  >>873さんの方法で期待通りの動作が確認できました.
  OSごと再起動する必要はなかったんですね.
  どうもありがとうございました.

  877 :デフォルトの名無しさん:2014/12/03(水) 16:32:06.22 ID:c+wt1AcT
  >>875
  阿呆な試みなんですが, 実はコマンドプロンプト上で起動するアクションゲームを作っておりまして.

  878 :デフォルトの名無しさん:2014/12/04(木) 08:27:43.56 ID:0Qz5Qes/
  Rogue?

  879 :デフォルトの名無しさん:2014/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 :デフォルトの名無しさん:2014/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 :デフォルトの名無しさん:2014/12/14(日) 01:47:37.60 ID:sl2oQCLD
  runas

  883 :名無しさん@そうだ選挙に行こう:2014/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 :デフォルトの名無しさん:2014/12/17(水) 22:45:06.86 ID:LoI71Hb0
  >>885
  さくらエディタのことは何も知らないが,
  batと同じだとするなら.
  基本は別ドライブへの移動とカレントフォルダの移動は別にする必要あり.
  z:
  cd \かかか\ききき.
  一つのコマンドで実行するには.
  cd /d z:\かかか\ききき.
  又は.
  pushd z:\かかか\ききき.

  887 :デフォルトの名無しさん:2014/12/17(水) 23:03:33.67 ID:/7Gz8Bcu
  >>886
  即レスありがとうございます.
  ドライブの移動方法があったんですね. 助かりました.
  なんでも /? しないとだめですね. 勉強になります.

  888 :デフォルトの名無しさん:2014/12/18(木) 02:00:07.70 ID:133cQhRc
  >>885
  さくらエディタって, 中からコマンドを実行できたんだ.
  使えそう.

  889 :デフォルトの名無しさん:2014/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 :デフォルトの名無しさん:2014/12/27(土) 13:47:12.01 ID:yKqTtdqi
  GetFullPathName は, カレントドライブとカレントディレクトリを, 指定されたファイル名に結合し,
  指定されたファイルのフルパスとファイル名を判断します.
  また, フルパス名とファイル名を組み合わせた文字列のうち, ファイル名部分のアドレスを計算します.
  この関数は, 組み合わせによって得られたパスとファイル名が有効であるかどうか,
  およびそれらが適切なボリュームの既存のファイルを指しているかどうかを確認しません.

  891 :デフォルトの名無しさん:2014/12/27(土) 17:16:01.43 ID:erPfOYAk
  よくある間違いだよね.
  ファイルのパスを求めるのに使っても目的のDriveとDirがカレントじゃないと.
  求めるパスと違うパスが出来上がるってのは.

  892 :デフォルトの名無しさん:2015/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 :デフォルトの名無しさん:2015/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 currentCMD 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 :デフォルトの名無しさん:2015/01/06(火) 14:53:10.69 ID:8K/E7hGs
  >>892
  これ, win8 だけなのかな.
  win7 はダメだった.

  895 :デフォルトの名無しさん:2015/01/06(火) 19:55:01.33 ID:FMw5vc/A
  Windows7, Windows2003 でもできたよ (XPが手元にないのでXPは不明)
  アンダーバーが前後2つというのに気が付かず,
  最初は %__CD__% を %_CD_% と一個ずつ少なく間違えて?な状態だったけど. w.

  896 :デフォルトの名無しさん:2015/01/07(水) 01:04:09.08 ID:bzmB4Ci+
  %=D:%は一旦そのドライブに移動(アクセス)してないと使えないんだな.
  あと, %=ExitCode%も同じく外部プログラムからの復帰値がないとダメ.
  現在これらのどれが定義されているのか見るには.
  setじゃダメで, set ""で見られる.
  最初に表示される=::=::\が何なのかは良く分からないけど.

  897 :デフォルトの名無しさん:2015/01/07(水) 01:06:27.82 ID:bzmB4Ci+
  >>895
  XPでも同じく使えた.

  898 :デフォルトの名無しさん:2015/01/08(木) 10:35:12.35 ID:5weP5dKV
  エクスプローラ->ファイル->コマンドプロンプトを開く.
  で, 下記を入力.
  echo %CMDCMDLINE%
  すると.
  "cmd.exe" /s /k pushd "???"
  となる. カレントディレクトリは pushd で移動してるらしい.
  じゃあ, popd してみると何処に行くか見てみたら,
  システムと無関係なディレクトリに飛ぶ事がある.
  何故だろう?

  899 :デフォルトの名無しさん:2015/01/08(木) 21:51:12.10 ID:M0EXKb7n
  ルールでは親プロセスのを引き継ぐんじゃね?

  900 :デフォルトの名無しさん:2015/01/08(木) 23:50:30.40 ID:eI1wghCW
  >>898
  > カレントディレクトリは pushd で移動してるらしい.
  単なる cd ではドライブを変えられないから.
  > システムと無関係なディレクトリに飛ぶ事がある.
  c:\Windows\System32 (cmd.exe がある場所) じゃないの?

  901 :デフォルトの名無しさん:2015/01/09(金) 00:02:10.57 ID:CiCc09+g
  >>895
  サンキュです.
  __ はアンダーバー二つでしたか, どうりでダメだったはずだ.
  win7でも出来ました.
  しかし旅館増設の迷路みたいな機能拡張だな.
  担当毎に勝手に増設している感じ.
  もっとわかりやすくすっきり拡張する方法はなかったのか.

  902 :デフォルトの名無しさん:2015/01/09(金) 00:57:56.11 ID:iXoT5Trb
  アンダーバーで始まる(しかも二つ)変数はシステム変数であって.
  通常の機能拡張ではないし, ずっと前からあった機能だし.

  903 :デフォルトの名無しさん:2015/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 :デフォルトの名無しさん:2015/01/09(金) 01:24:05.06 ID:wr1/NDht
  >>902
  ずっと前って言われてもWin98には無いぞ.

  905 :デフォルトの名無しさん:2015/01/09(金) 01:48:01.84 ID:iXoT5Trb
  >>904
  そりゃすまんかった.
  なんせwin7でどうとか言ってた奴に対してのレスだからwin7に対してずっと前からだと言ったまで.

  906 :デフォルトの名無しさん:2015/01/09(金) 01:49:58.35 ID:iXoT5Trb
  >>905
  まあ, そもそもwin9xにはcmd.exe無かったと思うんだけどね.

  907 :デフォルトの名無しさん:2015/01/09(金) 07:11:23.15 ID:Fx5/Rr0k
  >>901
  > もっとわかりやすくすっきり拡張する方法はなかったのか.
  WSH なり PowerShell 使えってことだろ.

  908 :デフォルトの名無しさん:2015/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 :デフォルトの名無しさん:2015/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 :デフォルトの名無しさん:2015/01/11(日) 20:18:22.42 ID:8AiuWit+
  Win10 のコマンドプロンプト.
  プロパティに Experimental タブが有るそうだが.
  どんなもの?

  911 :デフォルトの名無しさん:2015/01/11(日) 22:53:48.18 ID:RJYFXyqR
  >>910
  GIGAZINE記事でよければ.
  http://gigazine.net/news/20141001-windows10-command-prompt/

  912 :デフォルトの名無しさん:2015/01/11(日) 23:45:14.50 ID:8AiuWit+
  ありがとう.

  913 :デフォルトの名無しさん:2015/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 :デフォルトの名無しさん:2015/01/14(水) 01:33:33.35 ID:XOSZNhIv
  そういや確かにDOS時代は%cd%や%errorlevel%なんて環境変数は無かった.

  915 :デフォルトの名無しさん:2015/01/14(水) 23:13:57.79 ID:QhrJ6mJr
  9xの cd ... は好き.

  916 :デフォルトの名無しさん:2015/01/15(木) 01:04:20.76 ID:vh82IFS/
  %date%も無かったなあ.

  917 :デフォルトの名無しさん:2015/01/15(木) 02:48:46.81 ID:1HoxXkR7
  AとBという2つのディレクトリがあって.
  ディレクトリBには読み取り専用属性を設定してるんですが.
  RobocopyでディレクトリA内のファイルとサブディレクトリをBにコピーすると.
  Bの読み取り専用属性が解除されてしまうんですが解除させない方法は無いんでしょうか?

  918 :デフォルトの名無しさん:2015/01/15(木) 05:41:26.77 ID:47ipxJ/H
  なぜここできくんだ.

  919 :デフォルトの名無しさん:2015/01/15(木) 07:48:31.81 ID:ZQKHF8i1
  フォルダとディレクトリは別物だと思ってる爺だから.

  920 :デフォルトの名無しさん:2015/01/16(金) 08:29:49.85 ID:obgM8cFp
  一応, 実際に別物だよ.
  ディレクトリってのはファイルシステム上での概念.
  フォルダってのはOSやデスクトップ環境での概念だからな.
  例えば, Windowsのデスクトップは.
  全ユーザ共有のデスクトップディレクトリと.
  ユーザ個別のデスクトップディレクトリを併せて.
  1つのフォルダとして表示してる.

  921 :デフォルトの名無しさん:2015/01/16(金) 08:32:43.08 ID:obgM8cFp
  あ, いやOSはディレクトリか・・・.
  ともかくレイヤが違うって感じ.

  922 :デフォルトの名無しさん:2015/01/16(金) 08:40:46.86 ID:HgpWNsfz
  頭悪い奴だな(笑)
  >>917がレイヤだ何だの話をしてると思うのか?

  923 :デフォルトの名無しさん:2015/01/16(金) 11:11:17.33 ID:rD0jigTp
  属性付け直しじゃダメなの?
  attrib +r B & attrib +r B\* /S /D

  924 :デフォルトの名無しさん:2015/01/16(金) 11:47:10.39 ID:rD0jigTp
  ああ, これかな?
  robocopy A B /nodcopy

  925 :デフォルトの名無しさん:2015/01/16(金) 21:11:44.51 ID:+KevtdCt
  フォルダのRO属性はwindowsがほかの用途で使っちゃってるからな・・・.
  無駄にRO属性つけると遅くなるぞ.

  926 :デフォルトの名無しさん:2015/01/16(金) 23:20:45.68 ID:obgM8cFp
  >>922
  ん?>>919って>>917の話をしてたの?
  確かに唐突な話ぶりだなとは思ったが.

  927 :デフォルトの名無しさん:2015/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 :デフォルトの名無しさん:2015/01/22(木) 20:49:15.59 ID:c2QCAyIs
  その100回ループを見たとき「iの値だけの行」は本当に全部あるかい?
  forコマンドの内容は100回分に展開はされるのよ(echo off 時でも展開自体はされてる)
  その中で, 実際にコマンドの呼び出しにありついてるのは途中までって話.

  929 :デフォルトの名無しさん:2015/01/22(木) 21:02:38.14 ID:PSdfLgXI
  Windows XP Home Editionでのサービスパック導入状態を確認できる方法はありますか?
  Professionalであれば.
  WMIC OS Get ServicePackMajorVersion /Value
  で取得出来るはずですが, Homeでは出来ないようなので・・・.

  930 :デフォルトの名無しさん:2015/01/22(木) 21:29:29.69 ID:WJB7fWww
  systeminfo は?
  XPが手元に無いんで分からんけど.

  931 :デフォルトの名無しさん:2015/01/22(木) 21:34:48.73 ID:PSdfLgXI
  >>930
  Home Editionにはsysteminfoもないんです.

  932 :デフォルトの名無しさん:2015/01/23(金) 03:53:37.61 ID:b32Rf+9g
  レジストリ見れば分かるし, 公式な資料やレジストリを見るためのコマンドもあるけど, そーいうのは求めて無いわな.
  (万が一求めてるならMSDNかTechNet漁れ)

  933 :デフォルトの名無しさん:2015/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 :デフォルトの名無しさん:2015/01/28(水) 22:18:28.08 ID:JxueOrGN
  >>933
  ハイソルに聞けよ.

  935 :デフォルトの名無しさん:2015/01/28(水) 22:26:07.91 ID:1tc01pIy
  >>933
  そのソフトのメーカーなりに確認がベスト.
  /Dのあとにドライブ指定とかだろうなと推測するけど,
  引数は/P:でいいの?実はP:だけでいけたりしない?

  936 :デフォルトの名無しさん:2015/01/28(水) 22:36:49.03 ID:gZ7f8HvS
  >>934
  ハイソルなんじゃそら, と思ったらHISOLですね.
  聞けませんすいません.
  >>935
  その辺何度か試行錯誤した気はしますが, もう一回試してみます.
  やっぱり聞けませんすいません.

  937 :デフォルトの名無しさん:2015/01/28(水) 23:38:29.76 ID:pjK9E+QZ
  >>936
  「start ""」を消すのはダメ?

  938 :933:2015/01/29(木) 21:57:57.84 ID:F1OxNzTt
  >>937
  挙動少し違うけど結局同じ結果でした.
  いろいろ試しましたが,
  start "" "C:\Program Files\HIBUN-AE\bin\svdcrfmt.exe"/DP
  で.
  メッセージID:SFCF_MSG_008
  「このボリュームは準備が整っていないか, または書き込み可能なリムーバブルメディアではありません. 」
  エラーが出ました. これだけが>>933と違うエラーなので途中までは合ってるんだと思います.
  (P:ディスクはドライブ上右クリック, 「秘 文フォーマット」で実際にフォーマット可能です)
  多分, また別の引数が必要だと思いますので諦めます.

  939 :デフォルトの名無しさん:2015/01/31(土) 18:44:07.21 ID:1eTkueSY
  ボリュームの準備完了前にmkdirしようとしてエラー吐いてるとも考えられる.
  start "" /wait を入れて挙動を見るか, 反復してドライブ確認するコマンド入れて時間稼ぐか.
  なお, 時間稼いで解決する問題なら ping -n 10 localhost >NUL の一行だけでもいい.
  echo on
  cd /D C:\Program Files\HIBUN-AE\bin || goto error
  start "" svdcrfmt.exe /DP
  @rem 設定回数リトライ後に分岐処理 (サンプルでは約1秒 x 10回待つ)
  @rem forの設定: 数値でリトライ回数を, call引数でドライブレターを指定.
  for /L %%I in (1, 1, 10) do call :SUB P
  if ERRORLEVEL 1 goto 1
  if ERRORLEVEL 0 goto 0
  @rem 約1秒待つ.
  :SUB
  ping -n 2 localhost >NUL
  if exist %1:\NUL (exit /B 0) else exit /B 1
  :error
  echo アプリなし.
  :1
  echo ドライブなし.
  pause
  exit
  :0
  echo ドライブ発見.
  mkdir P:\etc
  exit

  940 :デフォルトの名無しさん:2015/01/31(土) 19:00:54.17 ID:1eTkueSY
  少し訂正.
  フォルダ作成処理はこちらのほうが無難か.
  @rem フォルダの存在確認・ある場合はなにもしない.
  :0
  echo ドライブ発見.
  if not exist P:\etc\NUL mkdir P:\etc
  exit

  941 :デフォルトの名無しさん:2015/01/31(土) 19:29:32.11 ID:4mnyEP67
  pingをウェイト代わりにするのXP時代のバッドノウハウなので今なら素直にtimeout使った方がいいと思う.

  942 :デフォルトの名無しさん:2015/02/02(月) 17:06:26.70 ID:m3idgQJ3
  新規と新規フォルダの中に1, 2, 3というサブフォルダを作りたいのですが.
  md 新規\1
  cd 新規.
  md 2 3
  でcmdだとうまくいくのですが, batだと1しか作られません.
  絶対パスを使うしかないのでしょうか?

  943 :デフォルトの名無しさん:2015/02/02(月) 18:57:02.01 ID:X1GA3/7s
  >>942
  先頭に.
  pushd %~dp0
  とでも書いとけば?

  944 :デフォルトの名無しさん:2015/02/02(月) 20:20:36.75 ID:m3idgQJ3
  >943
  返信ありがとうございます.
  pushd %~dp0
  md 新規\1
  popd
  cd 新規.
  md 2 3
  だと何も反応がないようです.
  batが速すぎて.
  mdで作られた新規フォルダを認識出来てないんでしょうか?

  945 :デフォルトの名無しさん:2015/02/02(月) 21:10:51.31 ID:l6dJG2Yv
  popdしたら意味無いに決まってるじゃん.
  わざわざmdの前に入れるとかわかってやってんだろ?
  釣りだろ?

  946 :デフォルトの名無しさん:2015/02/02(月) 21:42:38.41 ID:m3idgQJ3
  >945
  最初にpopdない状態で試したのですがこちらも同じく.
  何のフォルダも作られなかったので.
  調べてみたらpopdと一緒に使うらしいので使ってみました.

  947 :デフォルトの名無しさん:2015/02/02(月) 21:59:55.24 ID:oRyJgGaO
  pushd "%~dp0"
  for /l %%a in (1, 1, 3) do (md 新規\%%a)
  popd

  948 :デフォルトの名無しさん:2015/02/02(月) 22:33:51.38 ID:m3idgQJ3
  >947
  こちらも何も反応がありません.
  試しにcmdでpushd %~dp0をしてみたら.
  指定されたパスが見つかりませんとでます.
  この辺が原因でしょうか?
  レジストリを見たら拡張編集は有効になってました.

  949 :デフォルトの名無しさん:2015/02/02(月) 22:55:15.28 ID:m3idgQJ3
  ああ, わかりました.
  改行コードがCR+LFでなくLFになっていたせいでした.
  pushd %~dp0をつけなくても動きました.
  お騒がせしました.

  950 :デフォルトの名無しさん:2015/02/02(月) 23:09:26.22 ID:AsOXYA1e
  3年はecho onしてろ.

  951 :デフォルトの名無しさん:2015/02/05(木) 21:42:25.78 ID:Rj58Qqe7
  バッチファイルの引数に複数のファイルの絶対パスを与えて.
  各々操作するスクリプト(1)を書いているのですが.
  パス内に「)」があると(%*)の閉じ括弧とみなされてエラーになってしまいます.
  (1) for %%A in (%*) do (...)
  そこで一旦「)」を「^^)」に置換して対処しているのですが(2), もう少しスマートな方法は無いでしょうか?
  (2)
  set path1=%*
  set path2=%path1:)=^^)%
  for %%A in (%path2%) do (...)

  952 :デフォルトの名無しさん:2015/02/05(木) 22:03:38.18 ID:RfekTely
  >>951
  for %%A in ("%*") do (...)
  これじゃダメなの?

  953 :デフォルトの名無しさん:2015/02/05(木) 22:10:00.81 ID:Rj58Qqe7
  >>952
  どうもありがとうございます!
  これで全く問題ありません.
  勉強になりました.

  954 :デフォルトの名無しさん:2015/02/06(金) 18:33:01.36 ID:x/dlo3t0
  再びすみません.
  >>952の方法だと一度に%%Aへ全ての引数が渡されてしまってうまくいきませんでした.
  例えば, 引数が「C:\foo\ C:\bar\」の時, for内は一度しか実行されず.
  %%Aは「"C:\foo\ C:\bar\"」になってしまうようです.

  955 :デフォルトの名無しさん:2015/02/06(金) 23:02:29.35 ID:yn/8ebeo
  >>954
  ごめん. 引数が複数ってのを完全に忘れてた.

  956 :デフォルトの名無しさん:2015/02/06(金) 23:17:48.98 ID:yn/8ebeo
  >>954
  あ, どっちにしてもパスにスペースが含まれてると.
  スペースの前後で別々の引数として処理されるから想定どおりに動作しないね.

  957 :デフォルトの名無しさん:2015/02/07(土) 01:02:02.39 ID:+QMHzHkt
  どうやってパラメタを作っているのか知らないが, パラメタ一つ一つを""で括るような方向に持っていくべき.

  958 :デフォルトの名無しさん:2015/02/07(土) 01:14:59.90 ID:ObZsWNET
  >>957
  右クリック「送る」で引数を与えているのでちょっと難しいかもしれないです.

  959 :デフォルトの名無しさん:2015/02/07(土) 02:23:30.64 ID:+QMHzHkt
  >>958
  それだと, ファイル名にダメ文字がある可能性がありbatでは処理しきれない場合が出るので.
  WSHで処理する方向でどうぞ.
  例えば,
  a&b.txt
  a^b.txt

  960 :デフォルトの名無しさん:2015/02/07(土) 18:52:53.93 ID:ObZsWNET
  >>959
  どうもありがとうございます.
  WSHにはノータッチだったのでいろいろ読んでみることにします.

  961 :デフォルトの名無しさん:2015/02/07(土) 21:28:06.92 ID:pnViDXcq
  カッコ入りファイルが問題というなら, shiftで引数ずらすだけでよさそうだが違うのかな.
  >>954を読んでそう感じたが.
  カッコ記号食わせる前提ならカッコを使う構文は避けて, shiftやgotoで回すほうが確実だと思う.

  962 :デフォルトの名無しさん:2015/02/07(土) 21:41:27.68 ID:pnViDXcq
  念のため書くとこんな感じのね.
  @rem 引数1がある間は繰り返し処理・無くなりし次第ENDラベルで処理終了.
  :LOOP
  if "%~1"=="" goto END
  @rem ここへ括弧を使わない処理を書く.
  @rem [例] copy "%~1" "hoge"
  shift
  goto LOOP
  :END
  exit

  963 :デフォルトの名無しさん:2015/02/08(日) 00:42:39.68 ID:jdTkuJAE
  バッチだと思わぬ落し穴があったりする.
  ファイル名 "ab%cd%.txt" とか・・・.

  964 :デフォルトの名無しさん:2015/02/08(日) 00:53:37.07 ID:cMpvNcty
  最初の質問を見た限り, 括弧だけが問題じゃなく.
  一般の不特定のファイル名全てを対象にしたいという感じを受けた.
  batじゃ無理な場合があることを認識した上で事を進めるなら最初の%*の置換でも良いだろう.
  ちなみに, jsでのパラメタの受け渡しは以下のような感じになる.
  (括弧でも&や^でも問題ないから, test.jsとでも名づけて試行してみてくれ)
  var arg = WScript.arguments;
  var i, s='引数一覧\n';
  for (i=0; i<arg.length; i++) {
  s += '引数'+(i+1)+' : '+arg(i)+'\n';
  }
  WScript.Echo(s);
  ファイルアクセスや操作はググれば色々見つかるので一つだけ.
  http://3rd.geocities.jp/kaito_extra/Source/FileFolderCtrl.html

  965 :デフォルトの名無しさん:2015/02/08(日) 01:10:14.59 ID:2dR+ApRB
  forfiles /p c:\windows /c "cmd.exe /c echo @path"
  のもうちょっと軽いやり方ないですか.
  dir /bだとフルパスが取れず.
  dir /s /bだとサブディレクトリ巡回しちゃうし.

  966 :デフォルトの名無しさん:2015/02/08(日) 01:12:08.13 ID:cMpvNcty
  一つ注意.
  問題ないというのは, ファイルを選択して「送る」の場合であり.
  コマンドラインから起動するとbatの場合と同じく&や^はダメだよ.

  967 :デフォルトの名無しさん:2015/02/08(日) 02:20:57.71 ID:61Kxoh3n
  cd c:\windows
  for /f "delims=" %%I in ('dir /b') do echo "%%~fI"

  968 :デフォルトの名無しさん:2015/02/10(火) 21:26:24.22 ID:wlrPXjaB
  フォルダの中に同名のサブフォルダが複数あり(第三下層), その中にファイルが入っています.
  サブフォルダの名前を指定して, ファイルを消さずにフォルダを削除する(ファイルは第二下層へ引き上げ)ってcmdで出来ますでしょうか?

  969 :デフォルトの名無しさん:2015/02/11(水) 01:25:29.57 ID:grqhnT4Q
  これじゃだめ?
  フォルダ.
  +--サブフォルダA
  |  +--サブフォルダA
  |      +--サブフォルダA
  |              ファイル.
  +--サブフォルダB
  |  +--サブフォルダB
  |      +--サブフォルダB
  |              ファイル.
            [下矢印]
  フォルダ.
  +--サブフォルダA
  |  +--サブフォルダA
  |          ファイル.
  +--サブフォルダB
  |  +--サブフォルダB
  |      +--サブフォルダB
  |              ファイル.
  set oyafolder=C:\フォルダ.
  set subfolder=サブフォルダA
  cd /d "%oyafolder%\%subfolder%\%subfolder%\%subfolder%"
  move /y *.* ..\
  cd ..\
  rd /q %subfolder%

  970 :デフォルトの名無しさん:2015/02/11(水) 22:06:03.60 ID:l4GqiAR4
  >969
  フォルダ.
  +--サブフォルダD
  |  +--サブフォルダE
  |      +--サブフォルダA
  |              ファイル.
  +--サブフォルダB
  |  +--サブフォルダF
  |      +--サブフォルダA
  |              ファイル.
            [下矢印]
  フォルダ.
  +--サブフォルダD
  |  +--サブフォルダE
  |          ファイル.
  +--サブフォルダB
  |  +--サブフォルダF
  |      ファイル.
  |
  イメージはこんな感じです.

  971 :デフォルトの名無しさん:2015/02/12(木) 00:15:58.05 ID:hQsJUazq
  ・dir /a:d /b /s でサブフォルダのリスト取得.
  ・for でパスを・毎に区切る.
  ・findstr で特定の文字列を含む行を抽出.
  この辺組み合わせればいけそう.

  972 :デフォルトの名無しさん:2015/02/12(木) 01:38:07.22 ID:R1QlNtC1
  @echo off
  cd /d "%~f1"
  set "a=%~f1"
  setlocal enabledelayedexpansion
  for /l %%i in (1, 1, 1000) do (
  set "c=!a:~%%i!"
  if not defined c set /a "b=%%i+1" & goto x
  )
  goto :eof
  :x
  endlocal & set b=%b%
  for /r %%i in (.) do set "d=%%~fi" & call :y
  pause & goto :eof
  :y
  setlocal enabledelayedexpansion
  set "c=!d:~%b%!"
  endlocal & set "c=%c%"
  for /f "tokens=3, 4 delims=\" %%j in ("%c%") do (
  if /i "%%j%%k"=="A" (
  pushd "%d%"
  move * ..\ 2> nul
  cd ..
  rd %%j
  popd
  ))

  973 :デフォルトの名無しさん:2015/02/12(木) 01:49:32.38 ID:R1QlNtC1
  >>972
  フォルダAの名にスペースが有ったら.
  rd "%%j"

  974 :デフォルトの名無しさん:2015/02/12(木) 02:09:48.03 ID:RudW6Zjv
  3階層に限らずに指定されたディレクトリを対象とし,
  もしそこにサブフォルダとかがあったらファイルの親ディレクトリに移動だけで削除はしない.
  とかでいいなら.
  @echo off
  set targetDir=xxxx
  set startDir=c:\temp
  pushd %startDir%
  forfiles -p%startDir% -s -m%targetDir% -c"cmd /c if @ISDIR==TRUE move/y
  \"@PATH\%targetDir%\*\" \"@PATH\%targetDir%\..\"2>nul&rmdir
  \"@PATH\%targetDir%\" 2>nul"
  popd

  975 :デフォルトの名無しさん:2015/02/12(木) 03:31:53.28 ID:RudW6Zjv
  >>974のはtargetDirに半角空白が含まれているとエラーになるので.
  -mtargetDir% -> -m"%targetDir%"
  に, また\"@PATH\%targetDir%\..\"は単に\"@PATH\"で良かった.
  なお, 3階層目に限定したのも出来た.
  @echo off
  set targetDir=xx yy
  set startDir=c:\temp
  pushd %startDir%
  set baseDir=%cd%
  for /f "tokens=*" %%i in ('forfiles -p%startDir% -s -m"%targetDir%"-c"cmd /c
  if @ISDIR==TRUE echo \"@PATH\""') do (
  call :check %%i
  )
  popd
  goto :eof
  :check
  pushd %1
  cd ..
  if "%cd%" equ "%baseDir%" goto :not3level
  cd ..
  if "%cd%" neq "%baseDir%" goto :not3level
  move "%~1\%targetDir%\*" %1 2>nul
  rmdir "%~1\%targetDir%" 2>nul
  :not3level
  popd
  goto :eof

  976 :デフォルトの名無しさん:2015/02/12(木) 03:32:57.54 ID:RudW6Zjv
  >>974のはtargetDirに半角空白が含まれているとエラーになるので.
  -mtargetDir% -> -m"%targetDir%"
  に, また\"@PATH\%targetDir%\..\"は単に\"@PATH\"で良かった.
  なお, 3階層目に限定したのも出来た.
  @echo off
  set targetDir=xx yy
  set startDir=c:\temp
  pushd %startDir%
  set baseDir=%cd%
  for /f "tokens=*" %%i in ('forfiles -p%startDir% -s -m"%targetDir%"-c"cmd /c
  if @ISDIR==TRUE echo \"@PATH\""') do (
  call :check %%i
  )
  popd
  goto :eof
  :check
  pushd %1
  cd ..
  if "%cd%" equ "%baseDir%" goto :not3level
  cd ..
  if "%cd%" neq "%baseDir%" goto :not3level
  move "%~1\%targetDir%\*" %1 2>nul
  rmdir "%~1\%targetDir%" 2>nul
  :not3level
  popd
  goto :eof

  977 :968:2015/02/12(木) 15:34:02.00 ID:CcHe4lt9
  みなさんお知恵をありがとうございます.
  やはり結構複雑な処理になりますね.
  rdのオプションにあったらいいのにとか思ったり.

  978 :デフォルトの名無しさん:2015/02/19(木) 09:55:02.83 ID:XWwtGJxZ
  以下の様なコードを書いた所, callで呼び出した先で.
  文字^が^^へ置換されてしまうのですが, これを防ぐ方法はありませんでしょうか?
  @echo off
  call :testcaret " &()[]{}^=;!'+, `~"
  goto :end0
  :testcaret
  echo %1
  goto :EOF
  :end0
  pause
  exit
  実行結果----------------
  " &()[]{}^^=;!'+, `~"
  続行するには何かキーを押してください . . .

  979 :デフォルトの名無しさん:2015/02/19(木) 10:44:30.10 ID:/Vz8D+YM
  >>978
  http://stackoverflow.com/questions/12655558/strange-behavior-with-special-characters-in-arguments-of-batch-functions
  [上矢印]のlate expansionはよくわからんけど, 2つ目の返答にある「後から^^を^に書き換える」案だと[下矢印]ですかね?
  @echo off
  call :testcaret " &()[]{}^=;!'+, `~"
  goto :end0
  :testcaret
  echo %1
  set "mod=%~1"
  set "mod=%mod:^^=^%"
  echo "%mod%"
  goto :EOF
  :end0
  pause
  exit

  980 :デフォルトの名無しさん:2015/02/21(土) 11:38:52.11 ID:GfnCc5eJ
  >>979
  返事が遅れましてすみません.
  おかしくなった箇所を修正するということですね!
  この方法で解決できそうです. ありがとうございました.

  981 :デフォルトの名無しさん:2015/02/21(土) 14:36:36.84 ID:pCOgC3i+
  パラメタで渡さずに環境変数で渡せば?

  982 :デフォルトの名無しさん:2015/02/21(土) 21:14:19.82 ID:A/SXrSre

  983 :デフォルトの名無しさん:2015/02/22(日) 12:27:36.44 ID:HfAyl9KP

  984 :デフォルトの名無しさん:2015/02/22(日) 19:15:28.50 ID:TXHjYO8D

  985 :デフォルトの名無しさん:2015/02/23(月) 04:01:13.54 ID:IOOmas+g

  986 :デフォルトの名無しさん:2015/02/23(月) 06:07:00.28 ID:FdOTriiv

  987 :デフォルトの名無しさん:2015/02/23(月) 11:09:06.29 ID:6GxNlgji
  >>979
  ちょうどこれで困ってたんですが後から置き換えだと%~z1とか使えなくてまた困ってます.
  環境変数で渡してもやっぱり^が^^になってしまいます.
  ^を含むパスをパラメータで渡す方法ないのでしょうか.

  988 :デフォルトの名無しさん:2015/02/23(月) 16:02:38.50 ID:RT7pSETM
  >>987
  Windowsの種類によって結果が違うのかな?
  @echo off
  set param=" &()[]{}^=;!'+, `~"
  call :testcaret
  goto :end0
  :testcaret
  echo %param%
  goto :EOF
  :end0
  pause
  exit

  989 :デフォルトの名無しさん:2015/02/23(月) 16:20:29.15 ID:V8GOYsYk
  使用不可っぽい文字を回避させるのは面倒.
  WSHとか別のやつ使うといい.

  990 :デフォルトの名無しさん:2015/02/23(月) 21:12:06.23 ID:ZOJkhX9p

  991 :デフォルトの名無しさん:2015/02/23(月) 21:31:21.52 ID:HsSM9WkU

  992 :デフォルトの名無しさん:2015/02/23(月) 21:55:08.63 ID:Ws40tGvU
  >>988
  それなら置き換えせずに使えるのですが.
  サブルーチン:testcaret内でパス%param%の更新日時やファイルサイズを取得したいのです.
  バッチ内で完結するのは無理ですかね.

  993 :デフォルトの名無しさん:2015/02/23(月) 22:10:12.58 ID:RT7pSETM
  >>992
  他にも面倒な場合が出ることもあるのでwshで作ることを薦めるが,
  :testcaret
  for /f "delims=" %%i in ('echo %param%') do echo %%i --- %%~ti--- %%~zi
  goto :eof

  994 :デフォルトの名無しさん:2015/02/24(火) 05:12:27.85 ID:EKrGXtrz

  995 :デフォルトの名無しさん:2015/02/24(火) 09:46:14.48 ID:G7cl7QWZ
  for /f "delims=" %%i in ("%param%") do echo %%i ---%%~ti --- %%~zi
  じゃなんかマズイの?

  996 :デフォルトの名無しさん:2015/02/24(火) 18:37:43.17 ID:LMpRi6zC

  997 :デフォルトの名無しさん:2015/02/25(水) 17:49:59.35 ID:UX9WnKJE

  998 :デフォルトの名無しさん:2015/02/25(水) 19:10:37.15 ID:5hx8q1nT
  次スレ.
  [.cmd] バッチファイルスクリプト %11 [.bat]
  http://peace.2ch.net/test/read.cgi/tech/1424858999/

  999 :デフォルトの名無しさん:2015/02/25(水) 19:16:53.69 ID:mKx2rGPv

  1000 :デフォルトの名無しさん:2015/02/25(水) 19:20:18.56 ID:mKx2rGPv

  1001 :1001:Over 1000 Thread
  このスレッドは1000を超えました.
  もう書けないので, 新しいスレッドを立ててくださいです. . .

296 KB
*スマホ版* 掲示板に戻る 全部 前100 次100 最新50
read.cgi ver 05.02.02 2014/06/23 Mango Mang&uuml;&eacute; *
FOX * DSO(Dynamic Shared Object)


_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/