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


[.cmd] バッチファイルスクリプト %11 [.bat]
http://peace.2ch.net/test/read.cgi/tech/1424858999/l50
http://echo.2ch.net/test/read.cgi/tech/1424858999/l50
2ちゃんねる*スマホ版**掲示板に戻る*全部1-最新50
レス数が1000を超えています. これ以上書き込みはできません.
[.cmd] バッチファイルスクリプト %11 [.bat]

  1 :デフォルトの名無しさん:2015/02/25(水) 19:09:59.39 ID:5hx8q1nT
  拡張子が .cmd または .bat のバッチファイルのスクリプティング(プログラミング)に関わる.
  質問, テクニック(JScript, Perl等の埋め込みなど含む), 関連情報のためのスレです.
  [*] 何でも無理矢理バッチでやろうとせず, WSH等の使用も検討しましょう.
  前スレ.
  [.cmd] バッチファイルスクリプト %10 [.bat]
  http://peace.2ch.net/test/read.cgi/tech/1374205515/
  それ以前の過去スレ.
  %9 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 :デフォルトの名無しさん:2015/02/25(水) 19:46:08.29 ID:v67AOmy/

  3 :1:2015/02/25(水) 20:30:42.86 ID:5hx8q1nT
  今回はスレタイに[転載禁止]と表示させないため, "sageteoff"を, >1のメール欄に入れてます.
  ("ageteoff"でもOKらしいが)
  次回以降のスレ建て時も同じ配慮が必要になると思うので注意しましょう.
  詳細は以下の記事を参照.
  http://info.2ch.net/index.php/%E6%96%B0%E7%94%9FVIPQ2
  また, 今回は前スレが, >>997に達しても次スレの話題を誰も発言しなかったため, もう少しで誘導が間に合わなくなるところでした.
  こんな事がないよう, 次スレは>>980の人が建てる方向で願います.
  (建てる途中で連投規制に巻き込まれて次スレに誘導できなくなる可能性も考慮すべきかも)
  更に余談ですが http://www.forest.impress.co.jp/docs/news/20150216_688532.html
  でも報じられている通り,
  来月3日の火曜日から2chブラウザ開発が許諾制となります.
  ( http://i.imgur.com/2TcDYzo.png は昨日の午前0時現在における2chブラウザのAPI対応状況一覧らしい)
  2chブラウザを使っている人は, これに備えてボード一覧取得URLを以下のURLに変更しておくほうがいいかも.
  http://kita.jikkyo.org/cbm/cbm.cgi/20.p0.m0.jb.vs.op.sc.nb.bb.29.nv/-all/bbsmenu.html

  4 :デフォルトの名無しさん:2015/02/26(木) 21:20:03.84 ID:rvCGpWQW
  最近作ったバッチ cdif.bat
  環境チェック用に.
  rem cdif.bat
  @echo off
  if '%1'=='' exit /B 255
  pushd D:\temp <- .defファイルを保存する場所.
  setlocal
  set z=%*
  set y=%z: =%
  set x=%y:/=%
  %* > %x%.txt
  if not exist %x%.def goto _new
  set errorlevel=
  diff %x%.def %x%.txt
  if %errorlevel% == 0 goto _end
  :_new
  copy /Y %x%.txt %x%.def >nul
  :_end
  endlocal
  popd
  パラメ-タにコマンドを置くと前回実行結果との違いを表示する.
  例.
  cdif whoami /all
  cdif net start
  cdif assoc

  5 :デフォルトの名無しさん:2015/02/28(土) 13:23:16.31 ID:Vf0Nycmv
  転載禁止で何か不都合があるんですかね.

  6 :デフォルトの名無しさん:2015/02/28(土) 16:21:11.47 ID:YYADq1Ex
  >>5
  見た目がうざい.
  転載禁止は嫌儲が運動した結果の出来事.
  2015年3月3日以後に Spyle 以外の専ブラが使えなくなるのも嫌儲が運動した結果.
  嫌儲に手を貸す必要はない.
  そもそも転載禁止と表示しても, 法的措置どころか苦情すら入れてないのが現実.
  何の効力もない.

  7 :6:2015/02/28(土) 16:26:28.85 ID:YYADq1Ex
  ちなみに僕は, >1 ではないけど, 自分が立てるときは非表示にしてるよ.

  8 :デフォルトの名無しさん:2015/02/28(土) 16:56:20.46 ID:M5P8h0pv
  >>4
  存在チェック手を抜くと完走しないどころか, 場合によっては泣き見るよ.
  pushd D:\temp || mkdir D:\temp &amp;&amp; pushd D:\temp
  WHERE app1.exe
  if not %ERRORLEVEL%==0 goto :eof
  などね. まあWHEREがないOSには向かないけど.
  あるいはこんなのか for %%I in (app1.exe app2.exe) do if /I "%%~$PATH:I"=="" goto :eof

  9 :デフォルトの名無しさん:2015/02/28(土) 17:01:28.28 ID:M5P8h0pv
  なんか文字化けしてるんで訂正. 一行目はアンド記号2つね.
  pushd D:\temp || mkdir D:\temp && pushd D:\temp

  10 :デフォルトの名無しさん:2015/02/28(土) 17:13:03.89 ID:/zEhZlSp
  >>9
  2chではしたらばやまったりと違い, 普通に&って書けばいいよ.
  if not exist app1.exe goto :eof

  11 :9:2015/02/28(土) 17:35:28.42 ID:M5P8h0pv
  >>10
  教えてくれてありがとう, 確かに化けないね.
  書き込む環境によるのかな?Vimエディタのchaliceプラグインから書いた.
  次からは気をつけるよ.
  >>4
  もうひとつ訂正. app1.exeはdiff.exeに読み替えてほしい.
  win8, 8.1は知らないけど7proには無かったので.

  12 :デフォルトの名無しさん:2015/03/01(日) 01:13:03.66 ID:3pqosVHZ
  >>11
  ありがとうございます.
  windows標準に diff.exe が無いのをうっかりしていました.
  入手するか, 似た機能のスリーソフトが必要でした.
  diff.exe はgnu フリーソフトです.

  13 :デフォルトの名無しさん:2015/03/01(日) 09:21:11.77 ID:lUru30LD
  何でもかんでも小文字で書いてるようでは, な・・・. w.

  14 :デフォルトの名無しさん:2015/03/01(日) 10:40:56.37 ID:auZLsY4i
  小文字と半角が区別できない人がいると聞いて.

  15 :デフォルトの名無しさん:2015/03/01(日) 18:14:23.46 ID:iMUnkbvv
  >>12
  表示とエラーレベル確認だけならFCコマンドがあるよ.

  16 :デフォルトの名無しさん:2015/03/02(月) 17:20:43.72 ID:uyLNdg9p
  >>14
  中学出たらまた来いやド素人.

  17 :デフォルトの名無しさん:2015/03/07(土) 12:52:17.55 ID:z12PK9QI
  突然で悪いですが.
  「shutdown -m」って一度に複数のPCを選択することは出来るのでしょうか.
  shutdown -m \\[白丸][白丸] \\[白上三角][白上三角] ってするのですか?
  分かるかたはお願いします.

  18 :デフォルトの名無しさん:2015/03/07(土) 14:47:08.28 ID:CawHWVdd
  for %%a in (
  \\[白丸][白丸]
  \\[白上三角][白上三角]
  ) do (
  shutdown -m %%a
  )

  19 :デフォルトの名無しさん:2015/03/14(土) 01:24:35.99 ID:3WQ81uoz
  バッチ中で.
  echo 0 g%%%%h 1 i%%%j 2 l%%m 3
  echo 0 n%%%%p 1 q%%%r 2 s%%t 3 u%v 4
  とすると.
  0 g%%h 1 i%m 3
  0 n%%p 1 q%v 4
  と表示されます, なぜでしょうか?

  20 :デフォルトの名無しさん:2015/03/14(土) 02:15:45.11 ID:nzf6iyBd
  %%->%
  %j 2 l% ->環境変数と見なされて消えてる?
  %m->m
  多分こんな感じ.

  21 :デフォルトの名無しさん:2015/03/14(土) 02:28:40.98 ID:3WQ81uoz
  >>20
  ありがとうございます.
  パズルのつもりで考え, 同じ結論になりました.
  echo 0 n%%%%p 1 q%%%r 2 s%%t 3 u%v 4
  の場合.
  %r 2 s% が消え, %t 3 u% が消えるようです.

  22 :デフォルトの名無しさん:2015/03/16(月) 10:51:59.75 ID:n6rD9DBv
  @cd /d "%~f1" && cmd /k prompt $g $t (%username%@%computername%) "$p"$_$g
  EXIT

  23 :デフォルトの名無しさん:2015/03/21(土) 11:58:32.58 ID:2zhIHOyA
  jpgをbpgに一括変換したくて.
  echo off
  for %%FILE in (*.jpg) do (
  bpgenc.exe %%FILE%~nI.jpg -o %%FILE%~nI.bpg
  pause
  こんな感じで作ってみたんですが.
  何分初心者なもんでエラーで動きませんでした.
  jpgがあるフォルダでbatを実行すると.
  そこのフォルダに同じ名前のbpgが出来るように出来ませんか?

  24 :デフォルトの名無しさん:2015/03/21(土) 12:29:07.78 ID:JFP+1Mfc
  >>23
  forの%変数は, 一般の環境変数とは別物で%a〜%z, %A〜%Zの52個しか使えない.
  書くなら, 以下のようになるけどbpgencの仕様を知らないので動作するかどうかは不明.
  (カレントにbpgencや*.jpgがあるとして)
  for %%I in (*.jpg) do (
  bpgenc.exe %%I -o %%~nI.bgp
  )

  25 :デフォルトの名無しさん:2015/03/21(土) 12:34:03.49 ID:JFP+1Mfc
  >>23
  間違い訂正と一応ファイル名の半角空白対策で""で括った方がいいね.
  for %%I in (*.jpg) do (
  bpgenc.exe "%%I" -o "%%~nI.bpg"
  )

  26 :デフォルトの名無しさん:2015/03/21(土) 13:43:28.87 ID:2zhIHOyA
  ありがとうございました.

  27 :デフォルトの名無しさん:2015/03/22(日) 20:30:08.30 ID:MzKPDq1O
  ディレクトリを指定する時に.
  "C:\Windows"と書くか"C:\Windows\"のように最後に\を付けるのはどっちが正しいんでしょうか?
  全てのファイルを指定したい時も*.*と書くのか*だけでもいいんでしょうか?

  28 :デフォルトの名無しさん:2015/03/22(日) 22:15:52.50 ID:MRoLQSW+
  ディレクトリエントリと認識させるなら前者.
  ディレクトリパスと認識させるなら後者.
  どちらか正しいかは関係ない(個人の手法により変わる)

  29 :デフォルトの名無しさん:2015/03/23(月) 00:27:47.55 ID:LkjS11eT
  個人の手法と言うよりアプリによるかと.
  下手なことせずMS謹製APIを(正しく)使ってるアプリは大体柔軟に解釈してくれる.
  一方で, 独自実装かつ手抜きだとそのアプリのルールに従わないと駄目.

  30 :デフォルトの名無しさん:2015/03/23(月) 03:17:53.73 ID:8SvXlaBo
  Windowsでは"*.*"と"*"は同じ結果になるようだが.
  DOSだと"*"は"*."の意味で解釈されたような気がするが・・・.
  よく覚えてないが違ったかな.

  31 :デフォルトの名無しさん:2015/03/23(月) 07:50:10.00 ID:Zh4Tlzc4
  >>27
  xcopyコマンドは末尾に\を付けると対話モードにならなくて済むから.
  \を付けるのがベター.

  32 :デフォルトの名無しさん:2015/03/24(火) 21:50:49.26 ID:15EAIg4V
  >>27
  オブジェクトとして扱うか. 場所として扱うか.

  33 :デフォルトの名無しさん:2015/03/26(木) 11:42:29.93 ID:TtvSKEog
  バッチファイルでテキストファイルの中にある(" ")を(改行)に置き換えたいのですがどうしたらよいでしょうか.
  自力でここまで頑張ってみましたがわかりません.
  for /f "tokens= delims=""" %%i in (.filelist) do (
  if "%%i" EQU "\n" (
  (echo %%i\n)>> .filelist.tmp
  )
  move .filelist.tmp .filelist

  34 :デフォルトの名無しさん:2015/03/26(木) 14:29:43.73 ID:eQva/kB3
  >>33
  * 空白が連続して並んでいる場合, 空白1個とみなす, また改行だけの行は削除.
  (ファイル名がどんな場合でも必要ならbatは諦めてWSHでも使ってくれ)
  @echo off
  type nul>filelist.tmp
  for /f "tokens=*" %%i in (filelist) do call :sub %%i
  del filelist
  move /y filelist.tmp filelist
  goto :eof
  :sub
  if "%1" equ "" goto :eof
  echo.%1>>filelist.tmp
  shift
  goto :sub
  * 別の方法:空白1つずつを改行に変換(トリッキーだけど)
  @echo off
  setlocal EnableDelayedExpansion
  set LF=^
  type nul>filelist.tmp
  for /f "tokens=*" %%i in (filelist) do (
  set d0=%%i
  call :sub
  echo !d1!>>filelist.tmp
  )
  del filelist
  move /y filelist.tmp filelist
  goto :eof
  :sub
  set d1=%d0: =!LF!%
  goto :eof

  35 :デフォルトの名無しさん:2015/03/26(木) 14:57:07.15 ID:TtvSKEog
  >>34
  中身が.
  "ho ge" "fuga" "bar"みたいな感じなんで1行だけなのでそれだとダメなんですよね.
  batは諦めたほうがいいですか?

  36 :デフォルトの名無しさん:2015/03/26(木) 15:10:34.99 ID:TtvSKEog
  別の書き方でやりたいことできてしまったので答えてもらわなくていいです.
  ありがとうございました.

  37 :デフォルトの名無しさん:2015/03/29(日) 23:08:04.40 ID:brTyAs26
  if 文で大小を調べる場合,
  数字以外の文字があっていても無視してくれるらしい.
  例.
  @echo off
  rem 指定ファイル1, 2のどちらが新しいか調べる.
  if '%2'=='' exit /B 200
  if not exist %1 exit /B 201
  if not exist %2 exit /B 202
  setlocal
  set x=%~t1 <-年月日 時分を得る.
  set y=%x: =% <-空白を除く.
  set f=%y:~2% <-32bit以内の数にする.
  echo %f% %1 <-確認用.
  set x=%~t2
  set y=%x: =%
  set g=%y:~2%
  echo %g% %2
  if %f% GTR %g% goto g
  echo new %2
  endlocal
  exit /B 255
  :g
  echo new %1
  endlocal
  exit /B 0

  38 :デフォルトの名無しさん:2015/03/30(月) 18:13:52.92 ID:7Wq+AZOx
  趣旨はわかるけどすべて置換しても手間は変わらないような.
  方法は人それぞれだけど.
  set x=%~t1
  for %%I in (/ " " ^:) do call set x=%%x:%%~I=%%
  set g=%x:~2%
  echo %g% %1

  39 :デフォルトの名無しさん:2015/04/01(水) 01:00:08.58 ID:AO10ro0D
  >>38
  そんな方法があるのかと思いましたが.
  call
  in (/ " " ^:)
  がよくわかりません.
  ??

  40 :デフォルトの名無しさん:2015/04/07(火) 18:10:05.82 ID:jQXYCPe4
  http://d.hatena.ne.jp/YOSHIYUKI/20120731/1343735856
  上記サイトを参考にバッチファイルを作ったのですが,
  %rtmp% --rtmp "rtmpe://fms2.uniqueradio.jp/" --playpath "aandg2" --app
  "?rtmp://fms-base1.mitene.ad.jp/agqr/" --stop %dur% --live -o %out%
  この部分は何を指しているのでしょうか?
  コマンドプロンプトでテストをすると.
  「ファイル名, ディレクトリ名, またはボリューム ラベルの構文が間違っています」
  との表示が出るのですがどうしたらよいのか解りません.
  初心者なので噛み砕いて説明していただけるとありがたいです.
  よろしくお願いします.

  41 :デフォルトの名無しさん:2015/04/07(火) 18:23:55.58 ID:tPergwIj
  ネットラジオ受信してるのかな.

  42 :デフォルトの名無しさん:2015/04/07(火) 21:40:29.78 ID:ms0ReaQq
  最初の%rtmp%が受信用のプログラムrtmpdumpのパスを指定してるんだろうけど,
  それ以降の部分はそのプログラムのオプションだからそっちのヘルプなりを見るしかないな.

  43 :デフォルトの名無しさん:2015/04/08(水) 21:33:07.81 ID:C3eEupG0
  >>41>>42
  ありがとうございます.
  rtmpdumpのヘルプがどこにあるのかすらわからない状況ですが, これから頑張ります.

  44 :デフォルトの名無しさん:2015/04/09(木) 07:03:12.72 ID:teaLGODa
  >43
  ググったら, https://rtmpdump.mplayerhq.hu/ でWindows版のzipファイルをダウンロードできたが,
  その中に入ってる rtmpdump.1.html を適当な翻訳サイトで和訳するしかなさそうだな.
  つーか質問する前に, それを一通り読んだ?
  日本語の解説サイトも幾つか見つかったから, それも一通り読んでおけば質問の手間が一気に省けたのでは?
  あと, 同梱の README.txt によると http://slproweb.com/products/Win32OpenSSL.html から.
  Win32 OpenSSL v1.0.2a Light も予め入手〜インストールしておくほうが良さそうだな.
  こちらは問題のバッチと直接関係なさそうだが・・・.

  45 :デフォルトの名無しさん:2015/04/09(木) 20:47:41.89 ID:ds7brpvM
  0からの距離, 絶対値を求めるにはどうしたらいいのでしょうか?

  46 :デフォルトの名無しさん:2015/04/09(木) 21:48:31.05 ID:56Kz/Tqn
  >>44
  ありがとうございます.
  rtmpdumpの2.4をダウンロードしたときには入っていなかったようなので確認できていなかったみたいです.
  ですがやり直してみてうまくいったので無事バッチファイルは作成できました.
  みなさんありがとうございました.

  47 :デフォルトの名無しさん:2015/04/10(金) 07:48:39.03 ID:1r0Sjsp4
  >>45
  バッチファイルはそういう用途には使えない(使わない).

  48 :デフォルトの名無しさん:2015/04/10(金) 08:53:04.22 ID:xkkjlCYH
  >>47
  絶対値をわざわざ「0からの距離」と書いてる時点で, 靴下臭さが漂う釣り.

  49 :デフォルトの名無しさん:2015/04/10(金) 18:17:04.09 ID:OSkAW5mv
  一応計算はできるが, 元の数値はどうやって与えるのか, 結果をどのように通知するのかを規定してもらわないとなんとも.

  50 :デフォルトの名無しさん:2015/04/11(土) 01:45:05.27 ID:TrV790b8
  ネットにつながっているかどうか調べるバッチを作ってみた.
  @echo off
  set errorlevel=
  arp -a|findstr "物理アドレス" >nul
  if %ERRORLEVEL% == 0 goto ok
  echo 未接続,
  exit /B 255
  :ok
  echo 接続中.
  exit /B 0
  pingを使うのを使っていたがうまくいかない時があるので,
  arpに変更したらうまくいった.

  51 :デフォルトの名無しさん:2015/04/11(土) 06:44:22.81 ID:fyKqFsgJ
  糞バッチはいらないです.

  52 :デフォルトの名無しさん:2015/04/11(土) 08:01:29.73 ID:/PBMBHvW
  どこで聞けばいいのかわからないので, すみませんがここに失礼します.
  相応しいスレがあって, 教えて頂ければそちらに移動します.
  DOS起動のUSBメモリを作成してブート.
  目的のexeファイルを実行し終えて再起動した場合に, コマンドでどのようにすればいいのでしょうか?
  shutdown -rと打ち込むと「Bad command or filename - "shutdown".」と表示されてしまいます.
  電源ボタン長押しの強制終了は, HDDのSMART情報に電源断による磁気ヘッド退避回数が1カウントされてしまい.
  なんか嫌なのです・・・.

  53 :デフォルトの名無しさん:2015/04/11(土) 14:23:00.94 ID:5Lnp57nw
  >>52
  DOSで電源断するプログラムをUSBにコピーしておきそれを指定するとか?
  フリープログラムでそういうのはあったと思うので捜して使えるものを選択する.
  ちょっと検索してみたらFreeDOSにはfdapmとかがあるようだ.
  昔のMS-DOSにもver.6の頃にはpoffコマンドがあったような気もするけど.
  メーカー独自コマンドだったかも.
  また, SMARTの値は気にすることもないだろ.
  それこそMS-DOS時代ならスイッチでの電源断しかなかったわけだし.
  これでHDDがどうにかなってたらそれこそ大問題だった(まあSMARTの仕組み自体無かったけど)

  54 :デフォルトの名無しさん:2015/04/11(土) 15:00:26.00 ID:2fqMRu3m
  shutdownというコマンドは実体がexeファイルである, という解説を加えた方が良いかと.
  ちなみにwin9xの緊急用ディスク(だったっけ?)には入ってた気がする.

  55 :デフォルトの名無しさん:2015/04/11(土) 16:01:15.67 ID:Wkw29TQd
  Ctl+Alt+Del ってここでは使えないんだっけ?

  56 :デフォルトの名無しさん:2015/04/11(土) 16:08:40.34 ID:ZafMUMT0
  Ctrl+C?

  57 :デフォルトの名無しさん:2015/04/13(月) 02:52:48.66 ID:d+oF06mH
  for文で複数のPCへファイルチェックしてると.
  dos窓にはプロセスが使用中とエラーログがながれてますが.
  実行結果テキストはそのPC内容が空白になります.
  このプロセスエラーを表示させるにはどうしたら.
  いいのでしょうか?

  58 :デフォルトの名無しさん:2015/04/13(月) 06:51:07.81 ID:lOTy3Gtt
  1>stdout
  2>stderr

  59 :デフォルトの名無しさん:2015/04/13(月) 11:41:44.48 ID:PhEs3M2y
  >>57
  https://support.microsoft.com/ja-jp/kb/110930/ja
  いろいろあるから調べてね.
  ちなみにforのinで使う場合はエスケープ記号も忘れずに.

  60 :デフォルトの名無しさん:2015/04/14(火) 10:36:28.94 ID:N5fdZKD9
  すみません. 初心者ですがご教授願います.
  forfiles /P C:\Users\Owner\Desktop\test /S /D -1000 /C "cmd /c del /Q
  C:\Users\Owner\Desktop\test\@file"
  というバッチをつくりました. 更新日1000日以前のファイルを削除するのですが,
  ファイル名が"backup"から始まる物のみ削除したい場合はどのように記述したらよいでしょうか?

  61 :デフォルトの名無しさん:2015/04/14(火) 12:14:07.00 ID:+cu4u0lD
  forfiles /P C:\Users\Owner\Desktop\test /S /D -1000 /C ^
  "cmd /c echo C:\Users\Owner\Desktop\test\@file|findstr "^backup"&&del /Q
  C:\Users\Owner\Desktop\test\@file""

  62 :デフォルトの名無しさん:2015/04/14(火) 13:06:46.44 ID:N5fdZKD9
  >61
  早速ありがとうござました.

  63 :デフォルトの名無しさん:2015/04/14(火) 13:48:29.77 ID:ZcIa+N/O
  forfilesに/m backup*つければいいんじゃないの?

  64 :デフォルトの名無しさん:2015/04/14(火) 23:10:10.99 ID:iRGvGEKT
  call [〜.bat]
  if not %ERRORLEVEL%==0
  (
  A1
  )
  :A1
  call [〜.bat]
  if %ERRORLEVEL%==0
  (
  echo "test"
  )
  上記の処理で最初にcallするバッチからは返り値(exit /b 0)が返ってくるのですが,
  A1のサブルーチンに移行して, 再度別のバッチをcallした時の返り値(exit /b 0)が返ってこず,
  callしたバッチ内のexit /b 0の手前で処理が止まっており, echo "test"の処理まで行きません.
  callしたバッチ内では最初にsetlocalの宣言を行い, endlocalの記述は省いています.
  どなたか原因がわかる方が居たらお願いします.

  65 :デフォルトの名無しさん:2015/04/15(水) 05:47:48.98 ID:qbvA5Mq5
  @ECHO OFF
  :STARTPROC
  ECHO [[このバッチファイルはWindows7で動作確認済です . ]]
  ECHO ・「proxy2ch」は i:\bin\proxy2ch フォルダにインストール済.
  ECHO ・「JaneXeno」は i:\bin\JaneXeno フォルダにインストール済.
  ECHO 以上の環境を前提としています.
  SETLOCAL
  TITLE %~0
  i:
  ECHO [[フリーソフト「proxy2ch」が起動してるかどうかを確認します . ]]
  ECHO ・まだ起動してない場合, 先に「proxy2ch」を起動してから「JaneXeno」を起動します.
  ECHO ・既に起動している場合, 即「JaneXeno」を起動します.
  TASKLIST /v | FINDSTR /i /r "proxy2ch.*running" > NUL
  IF NOT ERRORLEVEL 1 GOTO STEP_OK
  :STEP_NG
  ECHO [[まだ「proxy2ch」が起動してない為, ウィンドウ最小化状態で起動します . ]]
  ECHO (起動後, 数秒待ってから「JaneXeno」を起動する事になります)
  CD i:\bin\proxy2ch\Win32
  START /MIN i:\bin\proxy2ch\Win32\proxy2ch.exe
  PING 0 > NUL
  :STEP_OK
  ECHO [[フリーの旧2ch仕様BBS用ブラウザ「JaneXeno」を起動します . ]]
  CD i:\bin\JaneXeno
  START i:\bin\JaneXeno\Jane2ch.exe
  :ENDPROC
  ENDLOCAL

  66 :デフォルトの名無しさん:2015/04/15(水) 14:31:47.66 ID:I1xT3eb5
  >>64
  ・条件分岐後に変な改行入れないでください.
  ・A1なんてコマンド誰も知りません.
  ・そもそもサブルーチンに移行できていません.
    ただ次行以降を実行しているだけです.
  提示したバッチ全体の構文がおかしいです.
  根本から見直してください.

  67 :デフォルトの名無しさん:2015/04/15(水) 18:56:17.05 ID:3mk21zLe
  原因もクソもわかんねぇんだったら, 1行ごとにpauseコマンド入れてデバッグすりゃいいんじゃね. w.

  68 :デフォルトの名無しさん:2015/04/15(水) 19:14:08.41 ID:iV7zdKJV
  >callしたバッチ内のexit /b 0の手前で処理が止まっており.
  これが本当だったらそのbat内の処理が悪いんだろ.

  69 :デフォルトの名無しさん:2015/04/16(木) 13:55:23.26 ID:PKlW+mXs
  またまたお世話になります.
  forfiles /P E:\HDD\backup /M *camdata* /S /D -10 /C "cmd /c rd /S /Q
  E:\HDD\backup\@file"
  USB外付けHDDに監視カメラのデータを保存しています.
  保存期間10日を過ぎたものはタスクスケジューラで削除していこうと思い,
  上記バッチを実行すると該当データは削除できるのですが, その後に.
  ディレクトリ名が無効です.
  ディレクトリ名が無効です.
  ディレクトリ名が無効です.
  ・.
  ・.
  ・.
  とエラーがループして出てしまいます.
  >>60-63
  のデスクトップでのテストでは, エラーになりませんでした.
  ご指導ねがいます.

  70 :デフォルトの名無しさん:2015/04/16(木) 19:05:59.05 ID:dl3K38JP
  forfiles /P E:\HDD\backup /M *camdata* /S /D -10 /C ^
  "cmd /c if @isdir==TRUE (rd /S /Q @path) else (del @path@file)"

  71 :デフォルトの名無しさん:2015/04/17(金) 00:25:16.38 ID:w/dpiMO4
  バッチファイルはプログラミングしづらいだろ?
  WSH(VBScript, JScript)か, PowerShell でも使ったら?
  Windows PowerShell
  コマンド & スクリプティングガイド.
  五十嵐貴之(いからしたかゆき), 2015/3/25

  72 :デフォルトの名無しさん:2015/04/17(金) 07:57:13.26 ID:x1OzcVcc
  自分はParl使ってるわ.

  73 :デフォルトの名無しさん:2015/04/18(土) 13:07:53.50 ID:PKb7WJB3
  下らない質問で悪いけど.
  コマンドプロンプトってターミナルエミュレーターかシェル.
  どっちの事を指して使われてる言葉なの?

  74 :デフォルトの名無しさん:2015/04/18(土) 13:10:24.18 ID:sjW3inIo
  >>73
  コマンドプロンプト.

  75 :デフォルトの名無しさん:2015/04/18(土) 20:15:04.28 ID:3vDqFDHY
  ターミナルエミュレータに相当する物は別に存在する.
  ProsessExprorer系のツールでプロセス観察してみるとよく分かるよ.

  76 :デフォルトの名無しさん:2015/04/19(日) 02:00:49.40 ID:0O9OZvk2
  >>70
  forfilesなんて, 昔はなかった.
  いつからなんだろう.
  古いサイトだと解説していない.

  77 :デフォルトの名無しさん:2015/04/19(日) 14:25:40.05 ID:YOn0sVc9
  Windows上でtarファイルの展開を行うバッチファイルを作成したいのですが,
  フリーソフトのTAR.exeを使用して,
  [フルパス]TAR.exe xvf [tarファイル名(フルパス)] -C [展開先ディレクトリ]で実行しても,
  エラーで展開先にうまく解凍出来ません.
  展開先の指定方法についてどなたかご教授願います.

  78 :デフォルトの名無しさん:2015/04/19(日) 14:51:37.34 ID:9oYjIFcR
  エラー貼りましょう.

  79 :デフォルトの名無しさん:2015/04/19(日) 14:58:02.24 ID:ZbwKHW2Q
  とりあえず-xvfじゃないのか?

  80 :デフォルトの名無しさん:2015/04/19(日) 16:15:39.93 ID:5HhODAvd
  >>79
  xvf の x はオプションじゃなくてコマンドだから "-" はいらない.
  >>77
  そのフリーソフト -C オプションサポートしてるんか?

  81 :デフォルトの名無しさん:2015/04/19(日) 17:36:35.63 ID:uCqT+TY7
  -Cって展開先を指定するオプションじゃなくて作業前にカレントディレクトリを変更するオプションだから.
  存在しないディレクトリ指定してエラーになってるとかそういうオチでは.

  82 :デフォルトの名無しさん:2015/04/19(日) 23:32:53.44 ID:6LHr2UmH
  >>77
  本筋とはちと関係ないけど, tarって未圧縮の単なる書庫ファイルだからtgz(tar.gz)に.
  したらどないでっしゃろ.

  83 :デフォルトの名無しさん:2015/04/21(火) 22:22:35.03 ID:k+lIUh1M

  84 :デフォルトの名無しさん:2015/04/28(火) 09:18:46.56 ID:AL7JlJvX
  Windows7でディレクトリへのシンボリックリンクってどうやって消すんですか?
  > mklink /d c c:\
  c <<===>> c:\ のシンボリック リンクが作成されました.
  > del c
  D:\c\*, よろしいですか (Y/N)? y
  のように質問された上にy押した後も消えてません.

  85 :デフォルトの名無しさん:2015/04/28(火) 09:39:19.66 ID:l73V3plJ
  普通にエクスプローラから消せばいいのよ.

  86 :デフォルトの名無しさん:2015/04/28(火) 09:43:27.68 ID:8AGhJBnr
  シンボリックリンクだろうがジャンクションだろうがディレクトリ消すならならrdだろ.

  87 :デフォルトの名無しさん:2015/04/28(火) 17:42:15.31 ID:Az6wvvs4
  del はファイル削除, * でなくて *.* でも?
  フォルダごと消すなら >>86

  88 :デフォルトの名無しさん:2015/04/30(木) 12:53:11.12 ID:ViywK5A0
  rdでいけました.
  ありがとうございます.

  89 :デフォルトの名無しさん:2015/05/04(月) 18:32:55.18 ID:hzJehWEx
  最近, バッチ童貞を卒業しました.
  ディレクトリにある全てのファイルをhoge.exeにドラック&ドロップするパッチを作ろうとしています.
  >>25を参考に作っていましたが, hoge.exeが複数立ち上がってとんでもない状態になってしまいました.
  hoge.exe foo1 foo2 ...
  が実行できるパッチはどのように書けば良いでしょうか?
  よろしくお願いいたします.

  90 :デフォルトの名無しさん:2015/05/04(月) 19:01:55.28 ID:tr24rDGI
  start "" /wait "hoge.exe" foo1 foo2
  でどや?

  91 :デフォルトの名無しさん:2015/05/04(月) 19:11:29.61 ID:vdCrn8hY
  hoge.exe %*

  92 :デフォルトの名無しさん:2015/05/04(月) 20:18:58.14 ID:hzJehWEx
  cd /d "E:\aaa"
  for %%I in (*.bbb) do (
  "hoge.exe" "%%*"
  )
  cd /d "E:\aaa"
  "hoge.exe" "%*
  cd /d "E:\aaa"
  for %%I in (*.bbb) do (
  start "" /wait "hoge.exe" "%%I"
  )
  cd /d "E:\aaa"
  start "" /wait "hoge.exe" "%*"
  をやってみましたが, ダメでした.
  どうやればいいんだろう.

  93 :デフォルトの名無しさん:2015/05/05(火) 00:56:28.99 ID:cn76hmxd
  setlocal EnableDelayedExpansion
  set FILES=
  cd /d "E:\aaa"
  for %%x in (*.*) do set FILES=!FILES! "%%~x"
  hoge %FILES%

  94 :デフォルトの名無しさん:2015/05/05(火) 03:50:23.26 ID:jBh84Fwc
  引数で渡せる文字列って制限なかったっけ?
  任意フォルダの全ファイルを一度に羅列して渡すのはできるだけ回避したほうが良くないかな.

  95 :デフォルトの名無しさん:2015/05/05(火) 12:12:24.08 ID:h/qL4+vG
  >>93
  ありがとうございます.
  すごい.
  ずっと悩んでいたから感激です.
  ほんと助かりました.
  >>94
  拡張子でしていしておきました.
  アドバイスありがとうございます.

  96 :89:2015/05/06(水) 18:36:51.79 ID:kduajoAs
  93の方法で上手くいったのですが, 欲が出てきてしまいました.
  サブフォルダにあるファイルについてもできないか試していましたが, うまくいきませんでした.
  試したのは.
  setlocal EnableDelayedExpansion
  set FILES=
  for /R "E:\aaa" %%x in (*.bbb) do set FILES=!FILES! "%%~fx"
  hoge %FILES%
  です. %%~xを%%~fxや%%~$PATH:xに変えてみましたが, だめでした.
  何かいい方法は無いでしょうか?

  97 :89:2015/05/06(水) 19:36:01.98 ID:kduajoAs
  hoge.exeが使ってはいけない文字を使っていたようでした.
  ファイル名, ファルダ名を変えたらうまくいきました.

  98 :sage:2015/05/07(木) 02:20:57.96 ID:kCRc77b6
  なんちゃってインストーラーを作成したく下のように書いたのですが, 管理者として実行するとcmdが一瞬開いた後閉じてしまいます.
  調べてみたのですがどうしたらいいか分りませんでした. どうやったら上手くいくのかどなたかご教示して頂けないでしょうか?
  その1.dllとその2.dllは作成したバッチと同じディレクトリにあります.
  @echo off
  cd %~dp0
  copy /-y その1.dll C:\Windows\SysWOW64\
  copy /-y その2.dll C:\Windows\SysWOW64\
  cd \Windows\SysWOW64
  regsvr32 その1.dll
  regsvr32 その2.dll
  exit

  99 :デフォルトの名無しさん:2015/05/07(木) 02:30:30.14 ID:VKPrOxig
  @echo off
  [下矢印]
  @echo on
  exit
  [下矢印]
  pause
  にしてチェックしてみるとか.

  100 :デフォルトの名無しさん:2015/05/07(木) 08:06:10.91 ID:VSUD10fG
  pause入れて一行ごとに確かめるしかないでしょうなあ.

  101 :デフォルトの名無しさん:2015/05/07(木) 11:09:54.36 ID:KWH/KWxF
  C:ドライブ以外に置いてあると引っかかりそうなのは.
  cd %~dp0
  [下矢印]
  cd /d %~dp0
  cd \Windows\SysWOW64
  [下矢印]
  cd /d C:\Windows\SysWOW64

  102 :デフォルトの名無しさん:2015/05/07(木) 16:36:18.43 ID:96jPVZUT
  エラーとは関係ないけどバッチからregsvr32実行するなら/sオプション付けないと.
  「成功しました」ってメッセージボックス出てそれ閉じるまでバッチの動作止まっちゃうね.

  103 :sage:2015/05/07(木) 22:31:45.98 ID:kCRc77b6
  >>99, >>100試してみたのですが変わらず一瞬で閉じてしまいました.
  >>101 C:ドライブ上ですら上手くいかないので最初は付けていたのですが外しました.
  >>102 /s は付けないほうが成功しましたと出るので, 成功できてることが確認できていいかなと思いまして付けてませんでした.
  自己解決しました. ファイル名だと動かなくなくことは知っていたのですが, どうやらフォルダ名も半角の括弧があると,
  バッチを右クリックで管理者として実行してもバッチとして認識されないようでした.
  基本的なところが間違っていたようです.
  色々とお騒がせしてすいませんでした.
  ダブルクリックだと半角括弧あっても動くのに・・・.

  104 :デフォルトの名無しさん:2015/05/07(木) 22:59:18.82 ID:VSUD10fG
  じゃあそれcmd.exe壊れてるんじゃね.
  一行ごとにpause入れて止まらんとか聞いたことないぞ.

  105 :sage:2015/05/07(木) 23:15:37.73 ID:kCRc77b6
  そうなのでしょうか?
  PCが2台あるのでregsvr32で試したのですが両方が同じ結果でした.
  フォルダ名に半角括弧の( を付けて, 管理者権限が必要なコマンドが入ったものを試していただけないでしょうか?
  )だけだとなぜかうまくいきました.

  106 :デフォルトの名無しさん:2015/05/07(木) 23:24:22.25 ID:yEqXNtFT
  "("を含むパス上にあるbatファイルを, 「管理者として実行」で正常実行できない.
  https://social.msdn.microsoft.com/Forums/ja-JP/43f69d0b-1e8a-457b-8e85-57f4c06f2e56/bat?forum=windowsgeneraldevelopmentissuesja

  107 :sage:2015/05/07(木) 23:44:02.20 ID:kCRc77b6
  >>106 ありがとうございます. OS入れ直しかと思ってた.

  108 :デフォルトの名無しさん:2015/05/08(金) 00:08:07.40 ID:0odcB8A0
  一般的にシステムを作るときには,
  パス・ファイル名には, 半角英数字と,
  _ アンダーバーだけを使う.
  日本語, 空白, / \ などは,
  外人が作ったアプリや他のOSで, バグを起こす.
  外人は日本語のことまで考えて,
  アプリを作っていないため.

  109 :sage:2015/05/08(金) 00:43:49.96 ID:1YMiCyWS
  >>108肝に銘じます.

  110 :デフォルトの名無しさん:2015/05/08(金) 01:22:21.82 ID:DmYJm/wo
  >>108
  > 日本語, 空白, / \ などは,
  > 外人が作ったアプリや他のOSで, バグを起こす.
  逆になるべく日本語フォルダ, ファイル名にしておけば.
  海外製ウィルスが動作しなくなるかな.

  111 :デフォルトの名無しさん:2015/05/08(金) 09:58:38.71 ID:5fQ7r8Aw
  >>110
  イカタコとかは無理じゃね.

  112 :デフォルトの名無しさん:2015/05/08(金) 16:37:33.99 ID:U2au088Y
  そもそもウイルスが壊してくるのはWindows内だったりするからいみないんだよなあ.
  全部日本語の窓互換OS開発すればありかもしれない.

  113 :デフォルトの名無しさん:2015/05/08(金) 22:38:18.81 ID:KwMVu8yd
  >>108
  Program Files(x86)とかいう名前をつけたのは外人だろ?

  114 :デフォルトの名無しさん:2015/05/12(火) 23:56:25.43 ID:McgsoQJk
  ドライブの空き容量を簡単に調べる方法はありますか.
  dirを使えば最後に出ますが.

  115 :デフォルトの名無しさん:2015/05/13(水) 00:19:46.38 ID:IRvX1zB3
  fsutil volume diskfree c:

  116 :デフォルトの名無しさん:2015/05/13(水) 00:44:59.35 ID:++gYyXti
  >>>115
  ありがとうございます.
  FSUTIL ユーティリティには管理者特権が必要です.
  でしたが.

  117 :デフォルトの名無しさん:2015/05/13(水) 01:05:56.71 ID:7VTqgTSP
  wmic logicaldisk c: get freespace

  118 :デフォルトの名無しさん:2015/05/15(金) 21:00:38.39 ID:FSXq3hA5
  行の最後が\記号の場合, その\記号を削除する方法を.
  探しています.
  E:\の場合はE:にしたいのです.
  理由は, aria2c -dオプションでドライブ指定[E:\]の場合正常に動作せず,
  [E:]で動作する. ためです.
  よろしくお願いします.

  119 :デフォルトの名無しさん:2015/05/15(金) 21:37:19.52 ID:G1rKhc+A
  >>118
  Googleでバッチファイル, テキストファイル, 置換のキーワードでヒットするサイトを参考にしたら?

  120 :デフォルトの名無しさん:2015/05/15(金) 21:58:52.22 ID:XJBM+btE
  「行の最後」って何なのか分からないけど, 仮に環境変数に入れた文字列だとすると.
  set x=E:\
  if "%x:~-1%" equ "\" set x=%x:~0, -1%

  121 :デフォルトの名無しさん:2015/05/15(金) 22:00:53.20 ID:j/48pAYL
  call /?

  122 :デフォルトの名無しさん:2015/05/15(金) 22:30:21.33 ID:FSXq3hA5
  >>119
  >>120
  >>121
  ありがとうございました.

  123 :デフォルトの名無しさん:2015/05/16(土) 00:42:02.22 ID:O4uFm57f
  >>117
  ありがとうございます. 表示できました.
  wmic というコマンドは知りませんでした.
  wmic /? でみると巨大なコマンドなのに.

  124 :デフォルトの名無しさん:2015/05/18(月) 19:51:05.44 ID:a89GM3eE
  for文の/Fオプションである.
  "delims="と"tokens=*"の違いがわかりません.
  どちらも区切りなしで全てが対象の気がするんです.
  どのように使い分けてるんでしょうか?

  125 :デフォルトの名無しさん:2015/05/18(月) 20:11:44.07 ID:a89GM3eE
  例えば文字列の長さ取得するvbsをbat内で取得する時, こんな感じだと思いますが.
  for /f "usebackq tokens=*" %%i in (`cscript //nologo "len.vbs" "hoge"`) do set
  les=%%~i
  結果を受取る最後の部分, les=%%~iとles=%%iの違いが解りません.
  ~の有無で何が変わるんしょう?
  "usebackq tokens=*"と"usebackq delims="の使い分けと.
  les=%%~iとles=%%iの違いが解んないです.

  126 :デフォルトの名無しさん:2015/05/18(月) 20:35:07.70 ID:/17k7IVe
  出力が.
  "c:\program files\aaa\bbb.exe"
  みたいな空白を含み両端が""で囲まれている時に.
  %%iだと"c:\program files\aaa\bbb.exe"になり.
  %%~iだとc:\program files\aaa\bbb.exeになるという違いがあるから.
  受け取るのが数値を表した文字列の場合はどっちも一緒.

  127 :デフォルトの名無しさん:2015/05/18(月) 22:47:45.42 ID:clhkHSwG
  for /f "tokens=*" %i in (" hoge") do echo %i

  128 :デフォルトの名無しさん:2015/05/18(月) 23:43:20.25 ID:a89GM3eE
  >>126
  ちょっと確認とれないけど, 言ってる意味はわかりました.
  ありがとうございます.
  >>127
  スペースの有無で結果が変わりますね.
  違いがわかりました. ありがとうございます.

  129 :デフォルトの名無しさん:2015/05/20(水) 17:18:51.87 ID:/oDHFiER
  条件に当てはまる複数のフォルダの移動を行いたいのですが上手く行きません.
  ご助力をお願いいたします.
  目的:任意フォルダ配下のサブフォルダから, 行頭にの"[AAA]"があるフォルダのみを.
  別の任意フォルダに移動させたい. 行頭文字には[ ]含みます.
  移動元の親フォルダはd:\moto と仮定します. 移動先フォルダはd:\saki とすると.
  処理したい該当するフォルダはd:\moto\[AAA]* となります.
  set d_moto=d:\moto              /* 移動元親フォルダ*/
  set d_saki=d:\saki              /* 移動先フォルダ*/
  set path_moto=%d_moto%\[aaa]*   /* 移動の対象フォルダ*/
  for /d %%f in (%path_moto%) do move %%f %d_saki%
  該当サブフォルダまでsetしたのはこの他の箇所で使うので定義しています.
  またfor /d %%f in (%d_saki%\[aaa]*) do move %%f %d_saki% でも構文エラーが出ます.
  ワイルドカードの記述がよく判っておりません.

  130 :デフォルトの名無しさん:2015/05/20(水) 17:26:51.76 ID:/oDHFiER
  x set path_moto=%d_moto%\[aaa]*   /* 移動の対象フォルダ*/
  o set path_moto=%d_moto%\[AAA]*   /* 移動の対象フォルダ*/
  失礼しました. 上記レスには他にも誤字がありますがご勘弁願います.

  131 :デフォルトの名無しさん:2015/05/20(水) 17:41:33.73 ID:Wa0xSOyJ
  >>130
  実行したとき, コマンドプロンプトにどういうメッセージが出てたのか分からないので想像になるが.
  多分半角空白が含まれるフォルダ名のところでエラーが出てるんじゃない?
  %%f -> "%%~f"
  %d_moto%と%d_saki%には半角空白が含まれる可能性がないとするなら上の変更でいいと思う.
  あと, パス名ファイル名に大文字小文字の区別はないので>>130の上も下も全く同じ.

  132 :デフォルトの名無しさん:2015/05/20(水) 19:23:26.75 ID:/oDHFiER
  >>131レスありがとうございます.
  for /d "%%~f" in (%path_moto%) do move "%%~f" %d_saki%
  for /d "%%f" in (%path_moto%) do move "%%f" %d_saki%
  どちらもダメでした. コマンドプロンプト・ウインドウ上でのエラー表示になりますが,
  「"%~f" の使い方が誤っています. 」と表示されます(又は"%f" ).
  バッチでもエラーメッセージは表示されますが, バッチウインドウ自身が強制終了して.
  閉じてしまいバッチ上でのメッセージは確認出てきておりません(同じ内容だと思いますが).
  %環境変数%を使わないでコマンドプロンプト上でテストしてみると, 行が変わって内部の.
  move文で半角スペースが有るため以下のパターンでは「コマンドの構文が誤っています. 」と.
  表示されます.
  for /d %~f in ("d:\moto\[AAA]*") do move %~f "d:\saki" [*]%~f -> %f でも.
  for /d %~f in ("d:\moto\[AAA]*") do move %~f d:\saki        同じ結果でした.
  for /d %~f in (d:\moto\[AAA]*) do move %~f d:\saki
  後出しで恐縮ですがOSはWindows7 x64, アドミン&管理者モードで実行しています.

  133 :デフォルトの名無しさん:2015/05/20(水) 19:39:25.40 ID:Wa0xSOyJ
  >>132
  ちゃんと説明しなかったけど, まあこう書けばヘルプ見て分かると思ったんだけど.
  for /d %%f in (%path_moto%) do move "%%~f" %d_saki%
  for /?
  pause /?

  134 :デフォルトの名無しさん:2015/05/20(水) 20:21:43.80 ID:/oDHFiER
  お手数をおかけしました. ヘルプ確認もしなかった事をお詫びいたします.
  set d_moto=d:\moto                        /* 移動元親フォルダ*/
  set d_saki=d:\saki                            /* 移動先フォルダ*/
  set path_moto=%d_moto%\[aaa]*   /* 移動の対象フォルダ*/
  for /d %%f in (%path_moto%*) do move "%%f" "%d_saki%"
  で正常動作しました. setした際に行尾に\を入れていなかったためか,
  %%~f ではコンソール画面が強制終了してしまいましたので, %%fにしております.
  ご回答とお付き合い頂き, ありがとうございました.

  135 :デフォルトの名無しさん:2015/05/22(金) 18:53:43.10 ID:dDrrBwBt
  ファイル名にファイルの更新日時を付けてやろうと.
  set I="F:\hoge\test.txt"
  set tem1=%~tI
  set tem2=%tem1:"/"=%
  set tem3=%tem2:" "="-"%
  set tem4=%tem3:":"=%
  rename %I% test%tem4%.txt
  としてみたのですがうまくいきませんでした.
  何かいいアイデアをお願いします.

  136 :デフォルトの名無しさん:2015/05/22(金) 19:08:31.56 ID:H1v/SBhd
  for %%i in (%I%) do set temI=%%~tI

  137 :デフォルトの名無しさん:2015/05/22(金) 19:09:49.99 ID:H1v/SBhd
  修正(変数Iなんか使うから間違えた)
  for %%i in (%I%) do set temI=%%~ti

  138 :デフォルトの名無しさん:2015/05/22(金) 19:57:31.64 ID:rsRBQIIs
  set I="F:\hoge\test.txt"
  call :x %%I%%
  goto :eof
  :x
  set "tem1=%~t1"
  set "tem2=%tem1:/=%"
  set "tem3=%tem2: =-%"
  set "tem4=%tem3::=%"
  rename "%~f1" "%~n1%tem4%%~x1"

  139 :デフォルトの名無しさん:2015/05/22(金) 20:29:14.08 ID:dDrrBwBt
  >>137, >>138
  すげー.
  あんなに悩んでたのに一瞬で解決するなんて.
  ありがとう.

  140 :デフォルトの名無しさん:2015/05/23(土) 01:08:59.65 ID:idOG0Vl/
  >>139
  ご参考.
  大量にある, 下位階層まで変更したい場合,
  Flexible Renamer というフリーソフトもある.

  141 :デフォルトの名無しさん:2015/05/23(土) 09:30:59.77 ID:sl1qWZ50
  >>140
  トン.

  142 :デフォルトの名無しさん:2015/05/23(土) 09:45:09.89 ID:EIZIQejy
  >>140
  > 大量にある, 下位階層まで変更したい場合.
  >>137 の応用 (for /r) でいいだろ.

  143 :デフォルトの名無しさん:2015/05/30(土) 17:32:47.82 ID:KPmzF3IM
  指定日時まで一定間隔で繰り返すバッチはこれで大丈夫ですか?
  :RETAKE
  set D=%DATE%
  set T=%TIME: =0%
  if not %D% == %DATE% goto RETAKE
  set YYYYMMDDHHMMSS=%D:~-10, 4%%D:~-5, 2%%D:~-2%%T:~0, 2%%T:~3, 2%%T:~6, 2%
  :LOOP
        start "hoge" /wait "hoge.bat"
        if "%YYYYMMDDHHMMSS%"=="20150531000000"(
        goto NEXT
        ) else (
        ping localhost -n 600 > nul
        goto LOOP
        )
  :NEXT

  144 :デフォルトの名無しさん:2015/05/30(土) 17:43:26.77 ID:KWAqrQi+
  そういうのは俺ならタスク(スケジューラ)を使うけど.
  jt.exeとかschtasksとか.

  145 :デフォルトの名無しさん:2015/05/30(土) 19:41:05.67 ID:h+FcqRuX
  >>143
  LOOP部分だけど, それだと指定日時に一致しない場合は延々ループし続ける.
  AよりBが小さいのようにGEQやLEQなどの比較演算子のほうがよさそう.
  if %YYYYMMDDHHMMSS% LSS 20150531000000 (
  数値比較の場合はダブルクォートは外したほうがいい.

  146 :デフォルトの名無しさん:2015/05/30(土) 20:55:20.63 ID:NQWNmwnG
  高々32ビット整数しか演算出来ないのに.
  そんなの, まともに比較出来ると思うのか?

  147 :デフォルトの名無しさん:2015/05/30(土) 21:09:00.59 ID:NQWNmwnG
  試してみろ.
  if 20150530999999 LSS 20150531000000 echo aho
  if "20150530999999" LSS "20150531000000" echo baka

  148 :デフォルトの名無しさん:2015/05/31(日) 01:38:25.44 ID:jBtv10qY
  >>143
  日時判定のif文を二段階にしたら.
  最初年月日で, 次に時分秒で.

  149 :デフォルトの名無しさん:2015/05/31(日) 03:52:31.64 ID:6BGakI3g
  ダブルクォートを外さなければ問題ないんじゃね.
  数字だけだと数値比較, それ以外は文字列比較.
  32ビット整数を超える数値なら文字列比較で.

  150 :デフォルトの名無しさん:2015/05/31(日) 04:52:13.09 ID:ntMrQIQA
  :LOOP
      if "%date%"=="2015/05/31"  goto NEXT
      start "hoge" /wait "hoge.bat"
      ping localhost -n 600 > nul
      goto LOOP
  :NEXT
  でよくね.
  厳密にやりたかったら日時型すらないバッチなんぞ捨ててしまえ.

  151 :デフォルトの名無しさん:2015/06/02(火) 11:53:10.99 ID:kNAcHIfI
  特定のフォルダ配下の空のフォルダだけを抽出して処理したいのですが上手く行きません.
  特定のフォルダ配下の子フォルダの中身にはどんなファイル, 孫にあたるサブフォルダ([*]1), とも存在しない物だけが.
  本処理対象(退避場所へ移動させる)となります.
  [*] 1 サブフォルダは存在してても中身が空の物は"例外処理(フォルダの削除)"の対象とします.
  一言でフォルダの中身が空と行っても子フォルダとサブ以下では処理が異なります. 子は本処理, 孫以下は例外.
  d:\temp
    +aaa(ファイルはあり)-aaa1(ファイルは空)-aaa2(ファイルは空)
    +bbb(ファイルは空)-bbb1(ファイルはあり)
    +ccc(ファイルは空)-ccc1(ファイルは空)
    +ddd(ファイルはあり)
    +eee(ファイルは空)
    +fff(ファイルは空)-fff1(ファイルは空)-fff2(ファイルはあり)
    +ggg(ファイルはあり)-ggg1(ファイルはあり)-ggg2(ファイルは空)
  本処理対象  :eee
  例外処理対象:aaa1, aaa2, ccc, ccc1, ggg2
  処理対象外  :aaa, bbb1(bbb毎), ddd, fff2(fff fff1毎), ggg(ggg1毎)
  (つづく)

  152 :デフォルトの名無しさん:2015/06/02(火) 11:56:57.04 ID:kNAcHIfI
  set dir_path=d:\temp
  set cnt=1
  loop-st:
  if cnt==5 goto loop-end
  for /d /r %dir_path% %%D in (\*) do ( //サブフォルダを含む指定配下のフォルダの全リストを取得.
  if not exist "%%D\*nul" ( //サブフォルダが無い場合対象とする.
      for %%S in (%%D\*.*) do (      //さらに中にファイルが存在し無ければ本処理対象  [*]2
          本処理.
        )
    ) else (
      for %%S in (%%D\*.*) do ( //さらに中にファイルが存在し無ければ本処理対象  [*]2
          例外処理.
      )
  )
  set /a cnt=%cnt%+1
  :loop-end
  って感じで記述したのですが[*]2で「無ければ」の書き方判らなくて情け無い事に断念. if not exitですと.
  *.*指定をするとバッチが落ちる(コマンドプロンプト窓が強制的に終了しエラーも確認しにくい)ため上手く行きません.
  またfor文の中で強引に goto とラベルを記載するやり方はエラー([*]2)となりました.
  [*] 2  ()の使い方・・・と表示してたのは確認出来ました.
  なおフォルダの階層は最大4です. aaa2は階層3となります. また上記では例外中の例外なcccに対してもまだ未対応です.
  cccは子フォルダですが, 空のサブフォルダしかないパターンで本来あってはいけないフォルダとなりますので.
  例外処理行き(ccc, ccc1共に削除)です.
  batでは困難でしょうか?正解コーデングのご呈示をお願い申し上げます.

  153 :デフォルトの名無しさん:2015/06/02(火) 19:30:38.92 ID:KyjHTQN8
  >>152
  eeeの本処理(退避場所に移動させる)って言うけど.
  eeeはファイルのフォルダも無い空のフォルダだよね?
  退避させる意味あるの?

  154 :デフォルトの名無しさん:2015/06/02(火) 21:40:21.15 ID:KyjHTQN8
  @echo off
  pushd d:\temp
  set bak=c:\bak
  set level=-1
  call :sub "z:\test" proc1
  call :sub "z:\test" proc2
  popd
  goto :eof
  :sub
  setlocal
  if "%2" neq "" set proc=%2
  pushd %1
  set /a level+=1
  if %level% lss 5 (
  for /d %%i in (*.*) do (call :sub %%i)
  ) else (goto :eof)
  set cnt=0
  for /d %%i in (*.*) do set /a cnt+=1
  for %%i in (*.*) do set /a cnt+=1
  popd
  call :%proc% %1 %level% %cnt%
  endlocal
  goto :eof
  :proc1
  if %2 equ 1 if %3 equ 0 md %bak%\%1 2>nul&rd %1
  goto :eof
  :proc2
  if %3 equ 0 rd /s/q %1
  goto :eof

  155 :デフォルトの名無しさん:2015/06/02(火) 21:48:29.76 ID:KyjHTQN8
  訂正.
  call :sub "z:\test" proc1 -> call :sub . proc1
  call :sub "z:\test" proc2 -> call :sub . proc2

  156 :デフォルトの名無しさん:2015/06/02(火) 23:07:01.41 ID:mV5sXZYH
  全角空白 + 半角空白.
  または.
  半角空白 + 全角空白.
  は.
  2ch推奨NGワードなので避けませう.

  157 :デフォルトの名無しさん:2015/06/03(水) 00:33:22.13 ID:PtFxkubO
  >>152 サブフォルダ名に半角空白を許す変更(行数の制限のため複数コマンドを1行に詰めてる所あり)
  @echo off
  set bak=z:\bak
  set level=-1
  call :sub "d:\temp"
  goto :eof
  :sub
  setlocal&pushd %1
  set /a level+=1
  if %level% gtr 4 goto :eof
  set subdir=0
  for /d %%i in (*.*) do call :sub "%%i"
  set cnt=0
  for /d %%i in (*.*) do set /a cnt+=1
  for %%i in (*.*) do set /a cnt+=1
  popd
  if %cnt% equ 0 (
  if %subdir% equ 0 (
  if %level% equ 1 (call :proc1 %1) else (call :proc2 %1)
  ) else (call :proc2 %1)
  )
  endlocal&set subdir=1
  goto :eof
  :proc1
  md %bak%\%1 2>nul&rd %1
  goto :eof
  :proc2
  rd /s/q %1
  goto :eof

  158 :デフォルトの名無しさん:2015/06/03(水) 07:12:21.00 ID:WCFfLif6
  cd /d "d:\temp"
  set "d1=%cd%\"
  for /f %%i in ('"dir /ad /s /b 2> nul"') do set "d2=%%~fi" & set "d3=%%~dpi" &
  call :x & popd
  goto :eof
  :x
  pushd "%d2%"
  for /f %%j in ('"dir /a-d /s /b 2> nul"') do goto :eof
  for /f %%j in ('"dir /ad /s /b 2> nul"') do goto y
  if "%d1%" == "%d3%" goto z
  :y
  例外処理.
  goto :eof
  :z
  本処理.

  159 :デフォルトの名無しさん:2015/06/04(木) 21:39:02.33 ID:E36uiKc8
  >>158
  3行目.
  for /f "delims=" %%i in ('"dir /ad /s /b 2> nul"') do set "d2=%%~fi" & set
  "d3=%%~dpi" & call :x & popd
  8行目.
  for /f %%j in ('"dir /ad /b 2> nul"') do goto y

  160 :デフォルトの名無しさん:2015/06/06(土) 19:29:25.50 ID:iCqfzRte
  自分で環境変数のpathに追加したコマンドはbatファイルでは使えませんか?
  firefoxのアドオンをつくろうと思い, アドオンのインストールを自動化するために.
  以下のbatファイルを作成しました.
  @echo off
  :loop
  jpm xpi
  wget --post-file=@helloworld-0.0.1.xpi http:/localhost:8888/
  sleep 5000
  goto loop
  しかし, 次のようなメッセージがループします.
  "'jpm'は内部コマンドまたは外部コマンド, 操作可能なプログラムまたはバッチファイルとして認識されていません. "
  "'wget'は内部コマンドまたは外部コマンド, 操作可能なプログラムまたはバッチファイルとして認識されていません. "
  "'sleep'は内部コマンドまたは外部コマンド, 操作可能なプログラムまたはバッチファイルとして認識されていません. "
  jpm, wget, sleepはコマンドプロンプトからだと3つともちゃんと動きます. なのでbatでは自分で追加したコマンドは.
  ダメなのかと思ったので質問しました.
  環境はwindows 7 Home Premium 64bit sp1です.

  161 :デフォルトの名無しさん:2015/06/06(土) 20:59:24.45 ID:hSodQv/B
  > 自分で環境変数のpathに追加したコマンドはbatファイルでは使えませんか?
  使える. キミが何か間違っているが, 必要な情報を提示していないので, それ以上の事は不明.

  162 :デフォルトの名無しさん:2015/06/06(土) 21:36:49.50 ID:iCqfzRte
  >>161
  僕が怪しいかなと思う部分を上げてみます.
  1, batファイルはコマンドプロンプトでコマンドが期待通り動いた作業ディレクトリに置いています.
  2, 環境変数のPathに追加したというのは, システムのプロパティ->詳細設定->環境変数で設定していました.
  ログインしているユーザーの環境変数のPathにjpm, sleeepのパスを, システム環境変数のPathにwgetのパスを設定していました.
  3, パスの書き方は, コマンドの実行ファイルがあるディレクトリのフルパスをコピーして";"で区切っています.
  3, ログインしているユーザーは管理者.
  バッチファイルの先頭で「SET PATH=%PATH%;追加パス」を追加したら一応動いたのですが,
  必要ではないんじゃないかとなんとなく思って気になってしまいます.

  163 :デフォルトの名無しさん:2015/06/07(日) 00:35:36.48 ID:TwcY/oci
  いい加減XPもなくなっただろうし.
  timeoutが市民権を得てもいいと思うんだけどなー.

  164 :デフォルトの名無しさん:2015/06/07(日) 01:59:54.71 ID:uKDfTV9k
  batファイルの最初に.
  echo %path%
  を入れてデバッグしよう.
  sleep -> timeout

  165 :デフォルトの名無しさん:2015/06/07(日) 03:08:07.23 ID:u7+f65Ad
  >2, 環境変数のPathに追加したというのは, システムのプロパティ->詳細設定->環境変数で設定していました.
  これ設定しても既に動いてるプロセスには即反映されないから.
  プロセスを再起動したり, 一旦ログアウトしないといけないこともある.
  そこら辺で混乱があったのかもな.
  SET PATH=%PATH%;追加パス.
  は.
  SET PATH=追加パス;%PATH%
  の方が良かったりすることもある.
  ファイル名がぶつかったとき呼び出したいものが呼び出せないこともあるから.
  バッチ実行時の最終的なパスがどうなってるのか確認したかったら.
  @echo off
  path&pause
  :loop
  とかやっとくといい.

  166 :デフォルトの名無しさん:2015/06/07(日) 15:23:50.35 ID:MMVoxWft
  >163
  >164
  >165
  アドバイスありがとうございます.
  >165さんの言うとおり, パソコンを再起動したらちゃんとpathが反映されました.
  みなさんのアドバイスを参考にして, あと, 短いけどなるべく使いまわせるように役割ごとにばらそうと考え.
  最終的にこういう風にしました.
  ====auto_addon_install.bat=====
  @echo off
  call confirming_path.bat
  :loop
  call jpm_xpi.bat
  wget --post-file=@helloworld-0.0.1.xpi http://localhost:8888/
  timeout 5
  ::instead of "sleep 5000"
  goto loop
  ====confirming_path.bat=====
  @echo off
  :: confirming path 1 as not \n
  path
  :: confirming path 2 as \n
  echo %path% | sed s/;/\n/g
  pause
  exit
  ====jpm_xpi.bat====
  @echo off
  jpm xpi
  exit
  ==================
  これからアドオンをつくってみようと思います. ありがとうございました.

  167 :デフォルトの名無しさん:2015/06/07(日) 16:49:41.54 ID:LTwn0E2k
  呼び出す子バッチ側は exit /B で終了させないと親バッチへ戻ってこないよ.
  処理結果を確認する意味で終了コードを利用してもいいかもね.
  call jpm_xpi.bat
  if ERRORLEVEL 1 (echo Exit Status %ERRORLEVEL%) &amp; pause &amp; goto :EOF
  wget 以下略.
  ====jpm_xpi.bat====
  @echo off
  jpm xpi
  if %ERRORLEVEL%==1 exit /B 1
  if %ERRORLEVEL%==0 exit /B 0

  168 :デフォルトの名無しさん:2015/06/07(日) 20:59:15.64 ID:MMVoxWft
  >>167
  そうだったのですか.
  確かにpath確認用のconfirming_path.batをした後に, 親バッチへ戻ってきていませんでした.
  しかし, jpmの仕様なのか, confirming_path.batをコメントアウトしただけで, jpmの方は親バッチへ戻ってきしまいました.
  僕がjpmを別のbatに移そうと思ったのは, メインのバッチファイルでjpmを実行するとjpmを実行した時点で処理が終了してしまうからです.
  もしかしてこれが, jpmのバッチファイルがexit /Bを使わずに親バッチへ戻ってくることとなにか関係があるのでしょうか.
  終了コードの書き方も参考にさせて頂きます.

  169 :デフォルトの名無しさん:2015/06/11(木) 06:24:09.49 ID:zvXhuG+H
  dir /s /b | grep AAA | xxx
  ここでxxxは過去に出力したログを検索してヒットしたら出力しない,
  何度この行を実行しても常にユニークな出力しかされないということをやりたいんですが.
  うまい方法ないですか.

  170 :デフォルトの名無しさん:2015/06/11(木) 08:30:10.02 ID:o9tryPI0
  >>167
  ありがとうございます. 引数渡しもあるのですね.
  勉強になりました.

  171 :デフォルトの名無しさん:2015/06/15(月) 18:12:46.03 ID:GJ2N2cUz
  set /A を使うと計算できますが,
  ゼロから始まる数字は10進でなく8進法扱いされおかしな結果になります.
  ゼロが何個も続く可能性のある数字文字列から最初のゼロを取る.
  簡単のやり方を教えて下さい.

  172 :デフォルトの名無しさん:2015/06/15(月) 19:34:37.53 ID:PeZ0fZ8f
  >>171
  簡単な方法は知らんが, 愚直な方法としては %d% に数値が入ってるという前提で.
  :zero_suppress
  if "%d:~0, 1%" equ "0" if "%d:~1%" neq "" set d=%d:~1%&goto :zero_suppress
  又は.
  for /f "delims=0" %%i in ("%d%") do set d=%%i
  if "%d:~0, 1%" equ "0" set d=0

  173 :デフォルトの名無しさん:2015/06/15(月) 20:03:52.06 ID:IzyZ+arn
  >>171
  set "a=0123"
  set /a "b=1%a%*2-2%a%"
  echo "%a% --> %b%"

  174 :デフォルトの名無しさん:2015/06/15(月) 22:25:16.68 ID:C49nk280
  for /f "tokens=* delims=0" %i in ("%a%") do set /a a=%i-0

  175 :デフォルトの名無しさん:2015/06/16(火) 01:55:22.19 ID:xfn3wJg6
  >>172-174
  ありがとうございます.
  勉強になりました.
  >>173さんはすぐに意味がわかりませんでしたが, やってみて納得,
  set "a=0123" のように "" で囲めるのは初めて知りました.
  >>174さんはエラーが出ますが,

  176 :デフォルトの名無しさん:2015/06/16(火) 05:24:35.09 ID:kBkkj2GI
  バッチなら %i を %%i にする.
  >>174 の -0 と /a は不要.

  177 :デフォルトの名無しさん:2015/06/16(火) 17:38:49.75 ID:fIwvDifY
  >>172の下のはダメなので取り消し.
  >>176
  とっちゃダメ.

  178 :デフォルトの名無しさん:2015/06/16(火) 20:07:51.10 ID:kBkkj2GI
  >>177
  不要だよ.

  179 :デフォルトの名無しさん:2015/06/16(火) 20:35:30.33 ID:kBkkj2GI
  ああ, a=0 の場合か.
  でも a が空だと不味いぞ.

  180 :デフォルトの名無しさん:2015/06/16(火) 21:06:14.29 ID:kBkkj2GI
  これなら a が空でもOKかな.
  for /f "tokens=* delims=0" %%i in ("%a%-0") do set /a a=%%i
  バッチじゃなくて直接入力だと "%a%" に展開されるのでNG

  181 :デフォルトの名無しさん:2015/06/26(金) 06:01:05.05 ID:sKB1AmZZ
  PS講座にしろよ. w.
  Tech TIPS:バッチファイルの基本的な使い方 - @IT
  http://www.atmarkit.co.jp/ait/articles/1506/26/news026.html

  182 :デフォルトの名無しさん:2015/06/27(土) 23:07:54.24 ID:5TA1TjZr
  あるディレクトリ(サブディレクトリ含む)以下の特定の拡張子(.jpgや.pngなど)を.
  一括でコピーしたいのですが, xcopyやrobocopyでどのように記述すればいいのでしょうか?
  ヘルプを見ると, 除外するオプション(/EXCLUDE)は記載されていましたが.
  この方法だと指定するのが多くなりすぎて不便で困っている状態です.
  ご教示よろしくお願いします.

  183 :デフォルトの名無しさん:2015/06/28(日) 12:19:29.88 ID:Mckk18LI
  >>182
  robocopy /s コピー元 コピー先 *.jpg *.png

  184 :デフォルトの名無しさん:2015/06/28(日) 16:57:40.34 ID:hilWFqBu
  for %%i in (jpg gif png) do echo copy *.%%i dest\

  185 :182:2015/06/29(月) 22:19:20.20 ID:xFjGO25h
  遅れましたがアドバイスありがとうございました.

  186 :デフォルトの名無しさん:2015/06/30(火) 09:40:16.25 ID:T2wiUbpe
  メモ帳を起動してフォーカスが外れたら勝手に終了させるってどうやったらいいですか.

  187 :デフォルトの名無しさん:2015/06/30(火) 10:23:04.09 ID:T2wiUbpe
  "ウインドウからフォーカスが外れたら"です.
  補助ツールの起動用として汎用的に使いたいと思ってます.

  188 :デフォルトの名無しさん:2015/06/30(火) 12:20:24.58 ID:28t7zSj6
  VisualBat - 窓の杜ライブラリ.
  http://www.forest.impress.co.jp/library/software/visualbat/

  189 :デフォルトの名無しさん:2015/07/01(水) 01:32:24.09 ID:MjkDd52T
  >>186
  そういう処理はバッチファイル向きじゃないのでAutoHotkeyとかのツール使った方がいいと思う.

  190 :デフォルトの名無しさん:2015/07/02(木) 17:26:26.46 ID:UInPCaD/
  batで, %1に[秘]が含まれていたらaaa.exeを実行する.
  ってどうやって書けばいいですか?

  191 :デフォルトの名無しさん:2015/07/02(木) 18:15:40.14 ID:W1iwlrdH
  find のerrorlevel

  192 :デフォルトの名無しさん:2015/07/03(金) 02:00:44.30 ID:DFRnLTHh
  echo;%1 | find "[秘]" > nul && aaa.exe
  じゃね?

  193 :デフォルトの名無しさん:2015/07/03(金) 19:45:25.30 ID:UldOsxiv
  set x=%1
  if not %x:秘=%' == %1' aaa.exe

  194 :デフォルトの名無しさん:2015/07/04(土) 07:18:12.44 ID:vLkJmuOy
  必要に応じてクイック起動からコマンドプロンプトを起動しているのですが,
  起動のたびに指定のバッチファイルを自動で実行させる方法ないですか.

  195 :デフォルトの名無しさん:2015/07/04(土) 12:58:13.63 ID:qSlQKSp6
  >>194
  実行したいバッチファイルの最終行に「cmd.exe /k」コマンドを一行追加し, そのバッチファイルを実行すれば良い.
  例えば以下の内容のバッチファイルは, 基本的にSendToフォルダ(右クリック->「送る」)に入れておくものだが,
  好きなフォルダで直接ダブルクリックしても良い. (ちなみに2行目のCOLORコマンドは文字を見やすくするためのもの)
  @ECHO OFF
  COLOR 0F
  TITLE "%~f0"
  ECHO [コマンドプロンプト起動]
  %~d1
  CD "%~f1"
  IF ERRORLEVEL 1 CD "%~p1"
  ECHO ---------+---------+---------+---------+---------+---------+---------+
  ECHO 右クリックしたファイルが存在するフォルダ(または右クリックしたフォルダ)をカレントディレクトリとして, コマンドプロンプト画面を起動しました.
  ECHO この画面を閉じるには, 通常のコマンドプロンプト画面の場合と同様に, 画面の右上隅にある[X]をクリックするか,
EXITコマンドを入力して下さい.
  ECHO ---------+---------+---------+---------+---------+---------+---------+
  VER
  CMD.EXE /K PROMPT $G $T (%USERNAME%@%COMPUTERNAME%) "$P"$_$G
  EXIT

  196 :デフォルトの名無しさん:2015/07/04(土) 13:08:57.29 ID:s7zvO/Zm
  >>194
  コマンドプロンプトのショトカットを右クリックし, プロパティを開いて.
  リンク先が〜cmd.exe"になってるところを, "〜cmd.exe" /K "バッチフルパス.bat"
  って書き換えればいいんじゃね?

  197 :デフォルトの名無しさん:2015/07/05(日) 22:30:41.38 ID:CaTht0J/
  windows8.1で, Bluetoothを, PCの設定の変更. PCとデバイス Bluetooth_OFFにする. ONにする.
  と言う, バッチ処理教えて. 時々, Bluetooth機器が阿保になるので.

  198 :デフォルトの名無しさん:2015/07/09(木) 00:33:36.89 ID:x+M3PwTo
  hoge1.bat, hoge2.batを同時に動かしてこの2つが終了した後にコマンド1を動かそうと思っています.
  それで.
  start hoge1.bat
  start hoge2.bat
  コマンド1
  や.
  start /w hoge1.bat
  start /w hoge2.bat
  コマンド1
  を試してみましたがダメでした.
  何かいいアイデアはありませんか?
  よろしくお願いします.

  199 :デフォルトの名無しさん:2015/07/09(木) 01:33:00.66 ID:EFIo5QkZ
  hoge1|hoge2

  200 :デフォルトの名無しさん:2015/07/11(土) 23:54:44.10 ID:zNJDNBRR
  パイプがどうしてそうなるのですか?

  201 :デフォルトの名無しさん:2015/07/12(日) 00:31:32.75 ID:JwgGsFih
  パイプは「同時に起動して」標準出力と標準入力を繋げる機能なのは分かるよね.
  そしてつなげた標準入出力は別に使う必要は無いわけで.

  202 :デフォルトの名無しさん:2015/07/12(日) 00:34:11.82 ID:JwgGsFih
  書き忘れたけど礼を言うなら>199にね.

  203 :デフォルトの名無しさん:2015/07/12(日) 12:41:45.69 ID:yyKtP/0V
  バッチでできるかわからないのですが.
  windows8.1でBluetoothキーボード, マウスを使用しています.
  しばらく使用しないとキーボードが自動的に休止になってしまい.
  以降, Bluetoothを一旦OFFして再度ONしないと接続ができません.
  これをマウスで操作すると5, 6回の操作が必要です.
  バッチでBluetoothをOFF. ONするようなコマンドは作れるんでしょうか?

  204 :デフォルトの名無しさん:2015/07/12(日) 14:06:18.11 ID:leLDDrPp
  >>203
  対象のハードウェアIDを調べてdevcon.exe使えばバッチから可能かも.
  簡単に書くと, 事前にデバイスマネージャーでBluetooth機種のハードウェアIDを調べる.
  devcon.exe disable "対象のBluetooth機種のハードウェアID"
  devcon.exe enable "対象のBluetooth機種のハードウェアID"
  みたいな流れね.
  ハードウェアIDがわからないならあきらめろん.

  205 :デフォルトの名無しさん:2015/07/12(日) 14:09:25.86 ID:cZduJ3g5
  >>203
  詳しくないが, DevConが必要らしい.

  206 :デフォルトの名無しさん:2015/07/12(日) 14:39:15.93 ID:ZoJlZfIr
  DevConって管理者権限必要なんだけどキーボードもマウスもBTならOFFにした後.
  ONにするときにUACのダイアログを操作するデバイスなくない?

  207 :デフォルトの名無しさん:2015/07/12(日) 15:40:00.13 ID:ZoJlZfIr
  あ, バッチファイル自体を管理者で実行すればいいのか.
  206は無視してください・・・.

  208 :デフォルトの名無しさん:2015/07/12(日) 16:00:47.21 ID:PO2rWK+p
  >>201
  ありがとうございます.
  そういことか.
  ごっちゃな出力でパニクってました.
  パイプを順次に起動してと思い込んでいました.

  209 :デフォルトの名無しさん:2015/07/13(月) 02:19:24.08 ID:oxguYBiy
  Win10インスコ時のProgramFiles(x86含む)を除いてProgramFilesの移動, ジャンクションするbatどうすれば.
  http://www.natzworks.com/digital/entries/2010/000263.html
  だとWinインスコ時のも移動させちゃうからアプリストアなど動かない.

  210 :デフォルトの名無しさん:2015/07/13(月) 13:24:27.28 ID:ck7CB2gy
  >>204
  動かん. 先ずは止めてみようと思い.
  C:\User\i386\devcon.exe disable
  "HID\{00001124-0000-1000-8000-00805f9b34fb}_VID&0002056e_PID&102d&Col01"
  pause
  exit
  と打ったが, 止まらん.
  ハードウェアIDが間違ってるの?詳細の一番上の一行だけど.

  211 :デフォルトの名無しさん:2015/07/13(月) 13:53:24.86 ID:RWTt7ci0
  >>210
  記号類で引っかかってるのかも.
  ^& のように ^ 記号でエスケープしたらどう.

  212 :デフォルトの名無しさん:2015/07/13(月) 21:54:00.22 ID:ck7CB2gy
  >>211
  この表現わからない.

  213 :デフォルトの名無しさん:2015/07/13(月) 22:54:36.16 ID:RWTt7ci0
  ハードウェアIDの後半のいくつかのアンド記号のこと.
  }_VID&0002056e_PID&102d&Col01
  を.
  }_VID^&0002056e_PID^&102d^&Col01
  のように ^ 記号でアンド記号をエスケープする案を示した.
  バッチファイルからみてアンド記号はコマンド扱いなの.
  [*] 文字化け対策のため & 記号を全角文字表記したので, 実際には半角に直して.
  それと無関係なもの止めるとまずいからハードウェアIDの確認方法も書いておく.
  大まかな方法だけどコマンドプロンプトから実行して, 該当するか確認して.
  devcon hwids *| find /I "HID"

  214 :デフォルトの名無しさん:2015/07/13(月) 23:24:19.93 ID:9jM/hgDM
  HIDって分かっているなら.
  devcon findall HID\*
  や.
  devcon find HID\*
  とか.
  devcon hwids HID\*
  の方が見当つけ易いんじゃなかろうか.

  215 :デフォルトの名無しさん:2015/07/14(火) 00:05:27.15 ID:xh4YNKiw
  存在確認だけだから方法はなんでも.
  バッチ処理前提だから.
  devcon hwids *|find /I "HID"|find /I "0002056e"|find /I "102d"
  if ERRORLEVEL 1 goto ERROR
  if ERRORLEVEL 0 goto BEGIN
  みたいに段階的にフィルタして絞り込む形もとりえるかなと.
  安全でやりやすい方法ならなんでもいいの.

  216 :デフォルトの名無しさん:2015/07/14(火) 04:06:21.79 ID:ayHDk+Pv
  64 ビット版 Windows では完全には機能しません. とあるが・・・.
  ここに64ビット版があるらしい.
  試してみてくれ.
  http://delphintipz.blogspot.com/2012/07/disable-failed-no-devices-disabled.html

  217 :デフォルトの名無しさん:2015/07/14(火) 08:33:00.74 ID:TwNFk+SS
  cmdでAというフォルダ名を打ち込んだら.
  (コマンド名) "C:\Program Files\A" " D:\Program Files\A "<-Aを代入.
  を実行してくれるbatって書けますか.

  218 :デフォルトの名無しさん:2015/07/14(火) 09:05:32.61 ID:gam5IC3n
  書けます.

  219 :デフォルトの名無しさん:2015/07/14(火) 12:17:36.57 ID:TwNFk+SS
  >>218
  サンプルか参考batアドバイス宜しく.

  220 :デフォルトの名無しさん:2015/07/14(火) 13:11:19.14 ID:gam5IC3n
  >>219
  これでいいんじゃない?
  set /p a=
  command "c:\Program File\%a%" "c:\Program File\%a%"

  221 :デフォルトの名無しさん:2015/07/21(火) 07:37:07.25 ID:7WzjAJ7x
  こんな処理ってどう書けばいいですか.
  process_stdin.bat
  :loop
    if 標準入力がEOFなら goto :eof
    標準入力から1行ゲットして%line%に保存.
    echo [%line%]
  goto loop
  >dir | process_stdin
  [aaa.txt]
  [bbb.txt]
  [ccc.txt]

  222 :デフォルトの名無しさん:2015/07/21(火) 15:14:00.60 ID:J1lfUMsK
  >>221
  http://doudemoexe.com/Batch/0005.jsp

  223 :デフォルトの名無しさん:2015/07/22(水) 01:02:41.16 ID:StAbR0Ko
  bat内でsetを書くときは, 最初に setlocal, 最後にendlocal で囲んでいたが,
  通常の使い方だとendlocal は必要なかった.
  .batが終わると endlocalなしでもbat内変数は消える.
  (setlocalは必要)
  以上, 今日の発見でした.

  224 :デフォルトの名無しさん:2015/07/22(水) 02:32:17.00 ID:QnUh7Wvk
  CALLされることを想定したらendlocalやっといたほうがいいんじゃないの?

  225 :デフォルトの名無しさん:2015/07/24(金) 19:24:15.05 ID:dL+uOqe7
  明示的に使う場面は多くはないな.
  shiftやメニューの頭に戻ってのループ処理, 親への環境変数の継承くらいか.
  クリアするのが主目的で, 別な値を再設定して別の目的で使用とかは混乱の元だからしない.

  226 :デフォルトの名無しさん:2015/07/24(金) 20:24:24.41 ID:+KpXt6+t
  サブルーチンの再起呼び出しには絶対必要だけどね.

  227 :デフォルトの名無しさん:2015/07/24(金) 22:44:30.28 ID:YYoMYHtn
  DOS窓の内容をファイルにするのに, よい方法はありますか?
  今のやりかたは.
  DOS窓で右クリ->編集->すべて選択->エディタでctrl-V
  もっと簡単にできる方法があれば教えて下さい.

  228 :デフォルトの名無しさん:2015/07/26(日) 18:02:41.27 ID:YJ+DIjqN
  サブディレクトリを含む, ファイル名の一覧を出力したい.
  フォルダは除きたい.
  * 入力.
  dir /a-d /s /b
  上記から, ファイルのパス部分を削除したい.
  for /f "delims=" %%a in ('dir /a-d /s /b') do @set x=%%a
  変数に代入.
  ここから.
  ファイル名のみ取り出す方法がわかりません.
  なにか, いい案ないでしょうか.

  229 :デフォルトの名無しさん:2015/07/26(日) 18:07:54.57 ID:YJ+DIjqN
  >>227
  |clip
  >test.txt

  230 :デフォルトの名無しさん:2015/07/26(日) 18:38:20.15 ID:9oxiKXd0
  >>228
  ファイル名のみってのが, カレントディレクトリまでのパス部分を削除したい,
  じゃなくて本当にファイル名の一覧だけでいいなら.
  for /r %%i in (.) do @dir /a-d /b "%%~i" 2>nul 1>>list.txt
  みたいな.

  231 :デフォルトの名無しさん:2015/07/26(日) 18:52:45.58 ID:mOMjtGtu
  出力時にファイル名だけにすりゃいいんでない?
  for /f "delims=" %%a in ('dir /a-d/s/b') do echo %%~nxa

  232 :デフォルトの名無しさん:2015/07/26(日) 19:59:32.63 ID:YJ+DIjqN
  >>230, >>231
  どちらの方法でも出来ました.
  本当に助かりました. ありがとうございます!!

  233 :デフォルトの名無しさん:2015/07/27(月) 23:53:38.32 ID:T6/asWdF
  >>229
  ありがとうございます.
  前もって保存すると決まっている時は, clipなどを使えるのですが.
  いろいろやっていて, 後で保存する必要が出た場合に簡単な方法があればと思いました.
  長くかかる, 再現しないなどでもう一度やれない場合です.

  234 :デフォルトの名無しさん:2015/07/28(火) 02:43:47.39 ID:+/z/OnI4
  >>233
  直接コマンドプロンプト使うんじゃなくてConEmuみたいなの使ってログ取りオプション有効にして作業するとか.

  235 :デフォルトの名無しさん:2015/07/28(火) 03:19:58.31 ID:tjBt9FXm
  >>233
  DOS process LOG writer
  http://www.vector.co.jp/soft/dl/win95/util/se144974.html
  doslog.exeをパスの通っているところに置くか以下のbatと同じところに置いてbat実行.
  @echo off
  set bat=%temp%\tmp.bat
  set d=%date:/=%
  set t=%time::=%
  set t=%t: =0%
  set dt=%d%_%t:~0, -3%
  set log_file=/out %~dp0\doslog_%dt%.txt
  echo @echo off>%bat%
  echo :loop>>%bat%
  echo set /p cmdline=%%cd%%^^^>>>%bat%
  echo echo %%cmdline%%>>%bat%
  echo %%cmdline%%>>%bat%
  echo echo.>>%bat%
  echo goto :loop>>%bat%
  doslog cmd /k %bat%
  del /q %bat%

  236 :デフォルトの名無しさん:2015/07/28(火) 03:33:41.10 ID:tjBt9FXm
  ちょっと訂正.
  @echo off
  set bat=%temp%\tmp.bat
  set d=%date:/=%
  set t=%time::=%
  set t=%t: =0%
  set dt=%d%_%t:~0, -3%
  set log_file=/out %~dp0\doslog_%dt%.txt
  echo @echo off>%bat%
  echo :loop>>%bat%
  echo set cmdline=>>%bat%
  echo set /p cmdline=%%cd%%^^^>>>%bat%
  echo if not defined cmdline goto :loop>>%bat%
  echo echo.%%cmdline%%>>%bat%
  echo %%cmdline%%>>%bat%
  echo echo.>>%bat%
  echo goto :loop>>%bat%
  doslog cmd /k %bat%
  del /q %bat%

  237 :デフォルトの名無しさん:2015/07/29(水) 01:55:10.01 ID:we/S8MTT
  初歩的な質問になってしまって申し訳ありません.
  処理したいファイルをD&Dでバッチファイルに放り込んで処理.
  なんてのはよくあると思いますが, この「バッチファイルに特定のファイルを放り込む」

  238 :デフォルトの名無しさん:2015/07/29(水) 01:55:42.32 ID:we/S8MTT
  途中送信してしまいました.
  この, 「特定のファイルをバッチファイルに放り込む」
  なんて動作はどのように実現スレばいいのでしょうか?

  239 :デフォルトの名無しさん:2015/07/29(水) 02:41:38.74 ID:Mm94swUw
  手でやれよ. w.

  240 :デフォルトの名無しさん:2015/07/29(水) 03:39:06.21 ID:ObQZT/sF
  foo.batにbar.txtをD&Dするのは引数1にbar.txtを記述するのと同じ.
  foo.bat bar.txt

  241 :デフォルトの名無しさん:2015/07/29(水) 04:08:32.78 ID:BtTeVh+H
  それとも引数%1〜%9の事を言ってるのか?

  242 :デフォルトの名無しさん:2015/07/29(水) 04:15:58.66 ID:we/S8MTT
  ありがとうございます, 助かりました.

  243 :デフォルトの名無しさん:2015/07/30(木) 01:06:22.86 ID:OBXU0hZ1
  すいません, 文字列抽出について質問させてください.
  ファイルの中から特定の文字列を抜き出して, それらを結合するバッチを考えています.
  凡例として以下のような内容のファイルから, 特定文字列「hoge(.*, .*)」を全件抜き出し.
  それらを結合して最終的に「hoge(10, 50)++hoge(90, 110)++hoge(200, 250)」といった文字列を.
  生成したいです. なお, #より右側はすべてコメント扱いです.
  ==========sample.txt
  # サンプル情報, hoge()抽出.
  a = hoge(10, 50).foo1(int).bar1()
  b = hoge(90, 110).hogehoge()
  c = hoge(200, 250).foo2(int).bar2()
  a+b+c
  ==========
  各種前提条件として, 以下のようなものがあります.
  1. 対象文字列「hoge(.*, .*)」が出現する行数およびカラム位置は不定.
  2. 「hoge(.*, .*)」の()の中身は不定長.
  3. 「hoge(.*, .*)」が一行の中に出現するのは最大一回まで.
  4. 「hoge(.*, .*)」のさらに後に出てくる「()」の数は不定.
  5. 検索ファイルの中に「!」が出てくるか不明なため, 極力遅延環境変数は使わない.
  findstrだと対象行丸々抽出になってしまい, 「hoge(.*, .*)」の部分のみ抽出が.
  できないためforとset, callサブルーチンを組み合わせた文字列操作になるかと思います.
  ただ「"hoge("がヒットしてから次に")"がヒットするまでの文字列を抜き出して変数に.
  格納する」という操作が, 私なりに考えてみたもののわかりませんでした.
  知恵をお貸しいただけないでしょうか. よろしくお願いします.

  244 :デフォルトの名無しさん:2015/07/30(木) 02:40:47.91 ID:vXeGU9RJ
  >>243
  1char毎に分解してやれば出来ないことはないだろうけどbatでやるには不向き.
  正規表現で検索置換できるWSHを使った方がいい.
  @if (0)==(0) echo off
  rem cscript //nologo /e:jscript "%~f0" <sample.txt
  for /f "delims=" %%i in ('cscript //nologo /e:jscript "%~f0"^<sample.txt') do
  set x=%%i
  echo %x%
  goto :eof
  @end
  var stdin=WScript.StdIn;
  var s, x, r=[];
  while(!stdin.AtEndOfStream) {
  s = stdin.ReadLine().replace(/#.*$/, "");
  x = s.match(/(?:^|[^_a-zA-Z])(hoge\(.*?\))/);
  if(x) r.push(x[1]);
  };
  WScript.Echo(r.join("++"));

  245 :デフォルトの名無しさん:2015/07/31(金) 01:23:28.16 ID:k8QkrhUe
  >>234
  ありがとうございます.
  ConEmu, DOS process LOG writer 調べてみます.

  246 :243:2015/08/02(日) 10:42:10.95 ID:KSbBJgW9
  >>244
  遅くなってしまい申し訳ありません, レスありがとうございます.
  ただ, 個人的にはバッチのみを使って実現したいので, もう少し.
  足掻いてみようと思います.

  247 :デフォルトの名無しさん:2015/08/02(日) 17:51:00.45 ID:vXJ+TZnT
  Windowsで使えるsedやgrepなどを導入するしかないな.
  スクリプトも使わず正規表現な置換処理するのは無理があり過ぎる.

  248 :デフォルトの名無しさん:2015/08/02(日) 19:33:22.43 ID:KXoO9TBV
  文字を分解して取り扱うにはbatはダメ文字というハードルが高くて挫折するから.
  まあ無駄な足掻きはやめたほうがいい.
  それと言語のコメントの判定はかなり厄介.
  #だって, a="#"の場合はコメントじゃまずいだろうし.
  例えばエスケープを\とする場合, \#もコメントじゃなくなるだろうし.
  /* */で囲まれた中はコメントだとか, 別の複数のコメントの記述があったり.
  複数行に跨ってコメントを許したりしてたら.
  もうそれこそ正規表現じゃ無理で簡単な言語解析のレベルになってしまう.

  249 :デフォルトの名無しさん:2015/08/09(日) 10:30:39.27 ID:SNWYDjIy
  コマンドプロンプトでのバッチの質問です.
  フォルダを作成して, その中にbatファイルだけを入れて実行しています.
  エラーレベルが!ERRORLEVEL!と表示されたり 9009と表示されます.
  aaaaa.exeは実際にはありません.
  setlocal enabledelayedexpansion
  for /f %%i in ('dir /b /od *.*') do (
  aaaaaa.exe
  echo "エラーレベル" !ERRORLEVEL!
  )
  将来的には, フォルダ内のファイル数毎に, 直前のコマンドの成否でバッチを書きたいです.
  aaaaaa.exeがないので, 0以外のエラーコードが返ってくると認識しています.
  どこの書き方(理解)が間違っているか教えてください.

  250 :デフォルトの名無しさん:2015/08/09(日) 18:28:50.34 ID:Wo1alMTP
  forは実行前の解釈時点で展開されるので.
  for文に入る前のerrorlevel値が表示される.
  aaaaaa.exeの復帰値が反映されるのはfor文を抜けた後になる.
  コマンドプロンプトから実行してるのなら.
  初回実行時と2回目以降繰り返して実行した時の表示は上記の理由により変わってくる.

  251 :デフォルトの名無しさん:2015/08/09(日) 18:45:19.83 ID:Q+5Xwfkz
  サブルーチンにして判定をcall echo でやるほうがわかりやすいかな.
  終了コードの変化を比較するためnotepadを使用.
  バッチファイル自身がdirの結果に含まれるから最低1つはnotepadが開くと思う.
  @echo on
  @rem 終了コードをリセット.
  cmd /C exit 0
  for /f %%i in ('dir /b /od *.*') do call :SUB "%%i"
  pause
  exit
  :SUB
  @rem 存在しないアプリ.
  aaaaaa.exe
  call echo %%ERRORLEVEL%%
  @rem 存在するアプリ.
  start "" notepad.exe
  call echo %%ERRORLEVEL%%
  exit /B

  252 :デフォルトの名無しさん:2015/08/09(日) 18:45:50.76 ID:Wo1alMTP
  >>249
  あれ, 遅延環境変数展開の場合なのか.
  それなら正常にaaaaaa.exeの復帰値が正常に表示されるはずなんだけど?
  そうなる理由はわかりません, ごめん.
  ちなみに9009は「ファイルがありません」エラー.

  253 :デフォルトの名無しさん:2015/08/09(日) 18:54:25.00 ID:Q+5Xwfkz
  >>249
  251のは空のnotepadが開くよ.
  対象を開くなら以下な感じで引数指定ね.
  start "" notepad.exe "%~1"

  254 :デフォルトの名無しさん:2015/08/10(月) 11:54:29.65 ID:ma04BZuz
  >>250>>252>>253
  レスありがとうございます.
  >>251
  スクリプト書いていただきありがとうございます.
  :SUB側にcall echo %~1と書いて, ファイル名が取得できるのが確認できました.
  知らないパラメータが多いですが, 調べながら試しています.
  助かりました.

  255 :デフォルトの名無しさん:2015/08/10(月) 23:31:07.37 ID:hLG0BCKw
  >>254
  例示した call echo %%環境変数%% は環境変数展開のバリエーションの一つであって,
  call echo call引数の展開 のようなcallの使い方は適切ではないです.
  >>249の質問時に echo "エラーレベル" !ERRORLEVEL! がうまく展開されないとのことだったので.
  forのカッコから外に出した上で別の展開方法を例示しただけで通常であれば !環境変数! でいい.
  call引数の値をechoするだけなら echo %~1 で用が足りる.
  call echo や call set などの使用法はアンドキュメントだし無理に使う必要もないけど.
  興味があるならぐぐって調べてほしい.

  256 :デフォルトの名無しさん:2015/08/10(月) 23:38:50.99 ID:hLG0BCKw
  通常であれば !環境変数! でいい , と書いた意味はわかると思うけど,
  存在しない実行ファイルを指定しているのは通常ではないですよ, という意味ね.
  for /f %%i in ('dir /b /od *.*') do (
  notepad.exe %%i
  echo "エラーレベル" !ERRORLEVEL!
  )
  のように存在する実行ファイルを指定すれば問題なくERRORLEVEL取れるから.

  257 :デフォルトの名無しさん:2015/08/11(火) 00:00:00.58 ID:wwdlJScr
  存在しない実行ファイルを指定するのが悪い, と言っている訳ではないので誤解なきように.
  コマンド検索パス上にあると思ったらなかったり, cd変わってて失敗するケースもあるだろうし.
  テストで意図的にやってるのは理解してますので.

  258 :デフォルトの名無しさん:2015/08/11(火) 04:00:44.77 ID:oWV7al3f
  どういう場合に9009じゃなくて!ERRORLEVEL!と表示されるのか説明しないの?

  259 :デフォルトの名無しさん:2015/08/11(火) 08:08:17.57 ID:kidrm6pf
  はい.

  260 :デフォルトの名無しさん:2015/08/11(火) 12:57:41.63 ID:wwdlJScr
  >>258
  結果に違いがあった点については, 質問者がデバッグ中に質問内容以外のこともしたのだと予想してる.
  その点が気になるなら質問者から聞いてほしい.
  9009 はcmd.exeが返したerrorlevelであって, 存在しない実行ファイルからの.
  errorlevelは返るはずもないから, 文字列がそのまま返ってくる.
  echoコマンドの正しい処理だから別に不思議はないが, なにをやって違いが出たのかは質問者しか知りえない.
  おそらくはこんな感じで微調整しながらやってて, 考えがまとまらないまま質問したと予想する.
  aaaaaa.exe
  echo "エラーレベル" %ERRORLEVEL%
  aaaaaa.exe
  echo "エラーレベル" !ERRORLEVEL!
  まったく同一のコマンドであれば相違点は出ないはずだが, 異なるのであれば違うことをやっていたのは自明.
  カッコの中で処理してるからややこしくなってるのではなく, 異なる処理をしたにもかかわらずひとつの質問に丸めてることが原因と予想する.
  簡単に言うと, 環境変数の遅延展開を知る前と知った後とで違いをごっちゃにしているだけ, 情報がすべて出てないだけ.

  261 :デフォルトの名無しさん:2015/08/11(火) 23:25:41.78 ID:84vLNAhy
  詳しくないけど, 返り値で何とかしようとして.
  p = subprocess.Popen(cmdline, shell=True, stdin=subprocess.PIPE,
  stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
  や.
  my $pid = open3 $writer, $reader, 0, "$cmd"
  の存在を知ったとき, あの時間はなんだだったのかと愕然とした.

  262 :デフォルトの名無しさん:2015/09/06(日) 00:59:23.17 ID:YCgB583p
  http://d.hatena.ne.jp/kazuki-kido/20070803/1186159519
  ここに記載されてるbatの振り分けキーワードを,
  そのフォルダにあるファイルのファイル名末尾4桁(+拡張子)で自動取得し, その名前でフォルダを作成.
  そこに移動させるにはどうしたら良いでしょう?
  xxxx0013.xxx(4桁列までの文字は数十種類, 拡張子は数種, ファイル数は数千)
  のファイルを4桁文字列前の文字列のフォルダに振り分けたいのです.
  よろしくお願いします.

  263 :デフォルトの名無しさん:2015/09/06(日) 01:08:43.88 ID:YCgB583p
  訂正です.
  (4桁数列までの文字は数十種類(文字数様々), 拡張子は数種, ファイル数は数千)
  よろしくおねがいします.

  264 :デフォルトの名無しさん:2015/09/06(日) 01:35:39.75 ID:LDb64vsE
  エラー出たらここに飛ばすようにしてるんですが.
  他に何か表示しておくといい情報ってありますか?
  できればエラー発生行なんかがあるといいんですが見当たらないようです.
  :error
  echo !!!!!!!!!!!!!!!!!!!!
  echo エラー発生. ENTERで終了.
  echo バッチファイル:[%~f0]
  echo 引数:[%*]
  echo ERRRORLEVEL:[%ERRORLEVEL%]
  echo !!!!!!!!!!!!!!!!!!!!
  pause>NUL
  goto :eof

  265 :デフォルトの名無しさん:2015/09/06(日) 05:37:24.41 ID:a7Z2ulaD
  >>262
  for /f "delims=" %%a in ('dir /a-d /b') do (
  set "fnm=%%~na" & set "ext=%%~xa"
  call :mv
  set fnm= & set ext=
  )
  goto :eof
  :mv
  call set "dnm=%%fnm:~0, -4%%"
  md "%dnm%"
  move "%fnm%%ext%" "%dnm%"
  set dnm=
  goto :eof

  266 :デフォルトの名無しさん:2015/09/06(日) 06:36:51.11 ID:YCgB583p
  >>265
  ありがとうございます!
  最初の方の説明を今更間違ってることに気づいたのですが, 最後の説明の方で組んでいただいたようで, ちゃんと希望道理の作動をしました.
  すごく助かりました.
  ありがとうございました.

  267 :デフォルトの名無しさん:2015/09/06(日) 18:32:12.83 ID:Ir/JiN9v
  >>264
  > できればエラー発生行なんかがあるといいんですが見当たらないようです.
  エラー検出したところで, 実行してるコマンドとか渡した引数の情報を適当な変数に入れて, エラールーチンで表示すれば?
  まあ, バッチであまりここら辺に凝るのはおすすめしないけど.

  268 :デフォルトの名無しさん:2015/09/10(木) 00:20:16.72 ID:0fmkCSIW
  コマンドプロンプトのコマンドって, 穴が酷くね?
  コマンド指定でまさかダブルクォートが「一組」しか使えんとは.
  for /f %%i in ('"%hoge_exe%" ^| find "piyo"') do echo %%i
  これすらパースできないときた.
  (%hoge_exe% は半角空白込のフルパスだから「"」を抜けない)
  こんなの Linux系なら楽勝なのに・・・.

  269 :デフォルトの名無しさん:2015/09/10(木) 00:26:56.68 ID:0fmkCSIW
  あと, Vista だと xcopy のヘルプで非推奨になってたのが 7 でそれが取れたんだ?
  ミラーリング以外なら robocopy じゃなくて xcopy で良いってことか?
  意味が分からん.

  270 :デフォルトの名無しさん:2015/09/10(木) 00:54:28.51 ID:v5ofxYj/
  >>268
  うん.
  仕様がぼろぼろで旧式の骨董品.
  でも代わりがないから使うしかない.
  優秀な人は多いはずだが, みんな陽の当たるソフト担当になり, ,

  271 :デフォルトの名無しさん:2015/09/10(木) 01:16:35.41 ID:D73GyhwT
  骨董を使うのが嫌ならWSHやPowerShell使えば良いだろ.
  コレはワビサビを愉しみながら使うモノだ.

  272 :デフォルトの名無しさん:2015/09/10(木) 01:26:44.22 ID:rVL3fJUt
  >>268
  確かに先頭と末尾に"があるとペアと認識するようだな.
  'call "%hoge_exe%" ^| find "piyo"'
  '""%hoge_exe%" ^| find "piyo""'
  のように書くと回避できた.

  273 :デフォルトの名無しさん:2015/09/10(木) 03:08:07.86 ID:SFXMkCA1
  空白が実行ファイル名に含まれてるんじゃないならバッチ内で一時的にパス追加しちゃうのが楽そう.

  274 :268:2015/09/10(木) 21:38:41.76 ID:0fmkCSIW
  >>272
  ごめん. 駄目だった.
  setlocal
  set imjpuexc_path=%CommonProgramFiles(x86)%\microsoft
  shared\IME14\IMEJP\imjpuexc.exe
  for /f "delims=" %%i in ('""%imjpuexc_path%" getkanainput ^| find "a""') do (
  echo %%i
  )
  endlocal
  を実行すると・・・.
  \Common の使い方が誤っています.
  C:\Users\Ore\Desktop>for /f "delims=" %i in ('""C:\Program Files (x86)\Common
  Files\microsoft shared\IME14\IMEJP\imjpuexc.exe" getkanainput ^| find "a""')
  do (
  もう訳が分からない・・・閉じかっこがイカンのだろうか・・・.
  >>273
  pushd . して実行ファイルのとこに cd /d して終わったら popd で回避した・・・.

  275 :デフォルトの名無しさん:2015/09/10(木) 22:23:16.85 ID:rVL3fJUt
  >>274
  推測のとおり閉じ括弧だね.
  setとforの間に.
  set imjpuexc_path=%imjpuexc_path:)=^^)%
  を入れるか, または.
  set imjpuexc_path=C:\Program Files ^^(x86^^)\Common Files\microsoft
  shared\IME14\IMEJP\imjpuexc.exe
  とすれば通るだろうが, カレントパス変更の回避策の方が良いね.

  276 : - @dPizytaM5k - :2015/09/10(木) 22:47:59.30 ID:W0FLNmLq
  call :run "%CommonProgramFiles(x86)%\microsoft
shared\IME14\IMEJP\imjpuexc.exe"
  goto :eof
  :run
  for /f "usebackq delims=" %%i in (`%~fs1 getkanainput ^| find "a"`) do (echo
  %%i)
  exit /b

  277 :268:2015/09/10(木) 23:32:42.46 ID:0fmkCSIW
  >>275
  ありがとう.
  Linux系だと「引用符の中は別世界」という了解があるのだが, バッチはそうではないみたいね・・・.
  find の前のパイプにキャレットが要るのも, 「特殊文字は空気が読めない」ってことでFAということか・・・.
  バッチスクリプトにシェル変数の概念が無い, とこないだ知った初心者ですわ.
  >>276
  おお, そんな手があったとは. 凄い.
  参考にさせていただきます.

  278 :デフォルトの名無しさん:2015/09/11(金) 02:02:59.54 ID:8iQOGves
  バッチの引数を逆から処理する方法みっけ.
  for %%I IN (%9 %8 %7 %6 %5 %4 %3 %2 %1) do (
  )

  279 :デフォルトの名無しさん:2015/09/12(土) 17:25:17.07 ID:PURjqYJ9
  start /wait /b command
  start /b /wait command
  オプションの順序で挙動が異なるぜみたいなこと外人が言ってますがどっちを使えばいいですか?
  /waitが先だと間違いなんですかね?

  280 :デフォルトの名無しさん:2015/09/12(土) 22:56:10.69 ID:cTPbZ0nl
  ソースだせよ.

  281 :デフォルトの名無しさん:2015/09/12(土) 23:33:28.01 ID:PURjqYJ9
  >>280さん, わかりづらくてすみません.
  http://ss64.org/viewtopic.php?id=628
  http://superuser.com/questions/355341/windows-start-wait-b-not-working
  http://stackoverflow.com/questions/29925764/start-wait-b-not-exiting-program-when-there-is-an-error
  とかを読んで思ったんです.
  「start /wait /b」で「すべての言語」にしてググると他にも海外フォーラムが引っかかりましたがどれが元ネタかはわかりません.
  これは「バグ」だとか「順序が違うと機能しない」みたいなことが書いてあるので, 実際のところどうなんだろうと思いお尋ねしました.

  282 :デフォルトの名無しさん:2015/09/19(土) 18:16:48.17 ID:rJvITlaV
  すみませんbatファイル実行後に作成されるゴミについて質問させて下さい.
  D:\デスクトップ\testフォルダ内にあるサブフォルダ全てからbackupフォルダを検索して削除したくて.
  C:\Users\ore>cd ../../
  D:
  cd D:\デスクトップ\test
  for /R %%d in (backup) do rd /s /q "%%d"
  として実行するとtestフォルダ内にcdというゴミファイルが出来てしまいます.
  ゴミファイルを作成しない様にするにはどうすれば良いでしょうか?

  283 :デフォルトの名無しさん:2015/09/19(土) 18:52:57.68 ID:kEgCjcR8
  pushd D:\デスクトップ\test
  for /r %%d in (*desktop*) do rd /s /q "%%d"
  if exist cd (del cd&&echo 0||echo 1) else (echo -1)
  popd

  284 :デフォルトの名無しさん:2015/09/19(土) 20:11:26.20 ID:rJvITlaV
  >>283
  ゴミが出なくなりました.
  ありがとうございます.

  285 :デフォルトの名無しさん:2015/09/19(土) 21:24:39.32 ID:qCXEI70o
  わけがわからん.
  >>282でファイルcdが作られるとは思えんのだが?

  286 :デフォルトの名無しさん:2015/09/19(土) 21:31:23.75 ID:CQxRgVL+
  >285
  1行目を良く見給へ.

  287 :デフォルトの名無しさん:2015/09/19(土) 21:36:13.70 ID:qCXEI70o
  >>286
  あれそのままbatの中身だったんか?
  おれはプロンプト表示かと思ってた.

  288 :デフォルトの名無しさん:2015/09/19(土) 23:26:27.82 ID:kEgCjcR8
  >>287
  ぶっちゃけ作られるのはおかしい.
  ただcdが作られるならcdではなくpushdで移動した方が良いし.
  また質問されるのもスレ汚ししたくないからcd削除で二重に提案した.
  それと*desktop*は間違えで*backup*が正しいんだけどうまくいってるんだろうか?

  289 :デフォルトの名無しさん:2015/09/20(日) 00:43:15.75 ID:OUcPf0J5
  >>268
  確かに, よくもまあうまく動かせたもんだ.
  C:\Users\ore>cd ../../
  どこからのコピーかは知らんが, [上矢印]をそのままbatに書くような人間がねえ.

  290 :デフォルトの名無しさん:2015/09/20(日) 00:46:26.96 ID:PEdhYvSo
  >>288
  一応それぞれの意味は調べてやったつもりではありましたのでちゃんと変更しました.
  あの中身は元々Cドライブで実行していたものなのですがちょっと個人理由でDドライブで実行したくなったのです.
  その際は元が.
  @echo off
  cd C:\Users\ore\Desktop\test
  for /R %%d in (backup) do rd /s /q "%%d"
  で問題なかったので試行用にエコー消してDドライブに移動するのを追加しただけ, のつもりでした.
  お蔭さまで無事解決しましたしこれ以上はスレ汚しにもなるかと思われますのでご報告までに.
  改めてありがとうございました.

  291 :デフォルトの名無しさん:2015/09/26(土) 20:40:09.22 ID:sjK3MFI2
  質問させてください. かなり初心者なので申し訳ないのですが.
  バッチファイルから, PDF印刷するツールをつくりましたが, 不具合があります.
  解決方法を教えて頂けないでしょうか.
  現象:
  PDFファイルをコマンドラインから印刷する際, 印刷中のファイルを非表示とする引数 /h を使用しているにも関わらず,
  印刷中のファイルが画面上に数秒表示されてしまう.
  発生条件:
  ツールと関係なくユーザがAdbobe ReaderからPDFファイルを開き, ウインドウを最大化した上でAdobe Readerを終了.
  そののち, ツールを使用してコマンドから印刷すると, 引数 /h があるにも関わらず印刷中のファイルが画面上に数秒表示されてしまう.
  なお, ウインドウの最大化を解除して上でAdobe Readerを一旦終了させ, そのあとにツールを使って印刷すると印刷対象ファイルは画面上に現れなくなる.
  しかし毎回, ツールを使うユーザにこの操作をやってもらうのは負担なので, コマンドの書き方を変えることでバグが出ないようにしたい.
  コマンド:
  START ACRORD32.EXE /p /h /l %%f
  ・forを使用した繰り返し構文の中に上記のコマンドを入れており, %%fの変数は事前に変数に格納したファイルパスとファイル名となります.
  ・各引数については, /p は印刷の実行, /h はウインドウの最小化, /lは印刷ダイアログの非表示.

  292 :デフォルトの名無しさん:2015/09/26(土) 22:30:11.72 ID:HzL2ulcE
  バッチの不都合じゃなくてソフトウェアの問題だろ.
  問題が分かってるのにこのスレに書き込むとは.
  初心者って怖いな.
  見たくないなら/min使え.

  293 :デフォルトの名無しさん:2015/09/26(土) 23:03:22.25 ID:vRcULbaf
  >>291
  こっちの環境はAcrobat Readerが最新じゃないので多少違うかもしれないが,
  /pが指定されるとどうも読み込み完了までは表示されちゃうようだ.
  また一旦文書を読み込むと前回最大化だったのが標準に戻る.
  だったら事前に読み込んで最大化を解除してしまえってことで.
  start acrord32 /h xxx.pdf
  start acrord32 /p /h xxx.pdf
  ::と2度呼び出せば表示されない.
  ::その後, 印刷終了を3秒待って.
  ping -n 3 localhost
  ::強制終了.
  taskkill /f /fi "windowtitle eq xxx.pdf*"
  なお, 印刷終了はbatで判定可能(msinfo32とか)だろうから調べてくれ.
  あと, /lオプションを付けると, こちらでは印刷終了後もacrord32.exeのプロセスは残ったままになる.
  (タスクバーにも何処にも表示されてないけど, タスクマネージャで見るとプロセスは生きてる)
  taskkill /f /fi "imagename eq acrord32.exe"
  で殺せるけど.

  294 :デフォルトの名無しさん:2015/09/26(土) 23:03:27.42 ID:sjK3MFI2
  >>292
  そうですね, バッチというよりはAdobeの問題なのでしょうが, コマンドの書き方で問題を解決したく, 質問しました.
  /minを試してみます.
  どうもありがとうございました.

  295 :デフォルトの名無しさん:2015/09/27(日) 00:50:27.93 ID:fyu1n2iR
  >>293
  2回呼び出してやれば最大化が解除できたのですか?
  さっそく試してみます.
  どうもありがとうございます.

  296 :デフォルトの名無しさん:2015/09/27(日) 02:06:33.21 ID:NGGi3SIL
  発想を自由にスレッド作成, 投稿, ソーシャルブックマークなど.
  使い方はお好みで.
  ニューススレッドを追加! RSS配信の記事を一覧で表示!
  http://fluid.twolineprj.com/twoline/entry
  ご意見をぜひ投稿してください.

  297 :デフォルトの名無しさん:2015/09/27(日) 19:51:17.88 ID:0MtmseWf
  >>292
  /minを試してみたのですが, Adobe Reader に対しては有効になりませんでした.
  なおためしに, notepadやexcelに対して/minを使ってみた場合には, 普通に最小化して起動してくれました.
  なぜAdobeに対してはだめなのでしょうか・・・.
  >>293
  2回呼び出しをやってみたのですが, 最大化の解除はできませんでした.
  Readerのバージョンが違うからだと思いますが・・・.

  298 :デフォルトの名無しさん:2015/09/27(日) 20:52:07.03 ID:cWKfNT9F
  >>297
  そのソフトを買ったメーカーにそれぞれ聞け.

  299 :デフォルトの名無しさん:2015/09/27(日) 20:52:50.94 ID:cWKfNT9F
  >>298
  ごめんなさい, そのソフトのメーカーに聞け, の誤りです.

  300 :デフォルトの名無しさん:2015/09/27(日) 23:56:06.69 ID:S+VayHQk
  >>297
  あれダメだった?
  初回読み込み時に表示されるの?それとも2回目の印刷時に表示されるの?
  印刷時だったらもしかしたら初回読み込み時起動処理中だったからかもしれない.
  acrord32.exeは起動すると2つのプロセスが存在する.
  多分1つは受付みたいな役割りをしていて各pdfを開くプロセスの管理をしていると思われる.
  状態とウィンドウタイトルの変化は.
  ProcessID=xxxx runninng OleMainThreadWndName
  [下矢印]
  ProcessID=xxxx runninng OleMainThreadWndName
  ProcessID=yyyy running N/A
  [下矢印]
  ProcessID=xxxx runninng N/A
  ProcessID=yyyy running xxx.pdf(SECURED) - Adobe Reader
  なので最初の1プロセスのみの処理中に次の起動がくるとダメなのかもしれないので.
  ウェイトを入れてみるとかやってみて.
  なお, tasklistで状態を表示するようにすると何故か文書が表示されちゃったので.
  起動完了をbatで監視するのはうまくいかないかも知れない.
  それと実際の読み込み(印刷もそうだが)は上のProcessID=yyyyのプロセスの方なので.
  終了しても最大化は解除はされない(この部分は誤解を与えたかもしれない)

  301 :300:2015/09/28(月) 00:02:40.56 ID:pVReont5
  ひとつ言い忘れてた.
  こっちの検証環境はXPなので32bit環境です.

  302 :デフォルトの名無しさん:2015/09/28(月) 21:17:36.12 ID:XtRLoMNV
  rmdirについて質問があります.
  長文失礼いたします.
  rmdirコマンドで削除したフォルダの成功, 失敗の判定として以下の処理を実行しています.
  if exist フォルダ名 (
  echo 失敗.
  ) else (
  echo 成功.
  )
  rmdirコマンド実行時に指定したフォルダを開いていない状態だと問題なく成功とでますが, 開いている状態だと指定したフォルダは削除されるのにも関わらず,
  失敗と出力されます.
  上記, 判定処理の前にTIMEOUTコマンドで1秒ウェイトを入れると問題なく成功と出力されます.
  私の推測では, rmdirコマンドは, 開いているフォルダを閉じてから削除コマンドが実行されているための遅延と考えているのですが,
  この原因についてご存知の方ご教授頂ければ幸いです.
  よろしくお願い致します.

  303 :デフォルトの名無しさん:2015/09/28(月) 21:52:33.44 ID:pVReont5
  >>302
  他がファイル/フォルダをオープンしていると, 削除が拒否されずに保留されることがある.
  これは他プログラムがどのようにオープンしているのかによって違ってくる.
  FILE_SHARE_DELETE(削除共有)フラグ付きでオープンしているものを削除しようとすると.
  エラーにはならずに保留される(クローズ後に削除される)

  304 :デフォルトの名無しさん:2015/09/28(月) 22:33:43.19 ID:ynPwQZO2
  >>302
  つかerrorlevel使えば?

  305 :デフォルトの名無しさん:2015/09/28(月) 22:37:43.41 ID:ywrXX2XI
  >>303
  ご回答ありがとうございます.
  削除処理の遅延により判定処理に, 削除が間に合わず削除失敗と出力されてしまう可能性があるようですね.
  この場合, 削除処理が終了するまで次の判定処理に進まないような処理が必要になると思うのですが, いい方法などありましたらご教授お願い致します.

  306 :デフォルトの名無しさん:2015/09/28(月) 22:42:03.73 ID:ywrXX2XI
  >>304
  ご回答ありがとうございます.
  削除コマンドrmdirでは, 失敗でもERRORLEVELにエラーは設定されないようなので, 削除指定したフォルダの有無で判定をしています.

  307 :デフォルトの名無しさん:2015/09/29(火) 00:01:30.08 ID:bgSeuQIx
  >>305-306
  なら, 逆の発想で dir で行けば?

  308 :デフォルトの名無しさん:2015/09/29(火) 00:39:57.93 ID:8SFmbeyJ
  @rem findの終了コードが0ならエラー.
  rmdir "フォルダ名" 2>&amp;1|find /V "" &amp;&amp; echo 失敗.
  「ERRORLEVELを返さないコマンドのエラー判定」あたり参考.

  309 :デフォルトの名無しさん:2015/09/29(火) 00:43:01.28 ID:8SFmbeyJ
  文字化けすまそ, 半角アンド2つで.
  find /V "" && echo 失敗.

  310 :デフォルトの名無しさん:2015/09/29(火) 00:49:47.95 ID:8SFmbeyJ
  すまそ, ほかにも化けてた.
  rmdir "フォルダ名" 2>&1|find /V "" && echo 失敗.

  311 :デフォルトの名無しさん:2015/09/29(火) 01:06:12.17 ID:bgSeuQIx
  >>308-310
  いくつか理由はあるが, とてもそれが有用なノウハウだとは思えない.

  312 :デフォルトの名無しさん:2015/09/30(水) 21:24:53.14 ID:lqNGdTXz
  >>307-311
  ご助言ありがとうございます.
  原因特定できず, とりあえずウェイトを設定して経過観測することにしました.
  また続けてご質問があります.
  rmdirコマンドで削除するフォルダの中にあるフォルダやファイルが開いているとエラーになりますが,
  これをエラーとせず削除指定したフォルダを消すためにはどうしたら良いでしょうか?
  個人的には, rmdirコマンド実行前に, exploerをtaskkillで終了させ再起動させる処理が案としてありますが,
  並行して何か処理が走る可能性を考慮してなるべく実行中のタスクを落とさずrmdirコマンドを正常終了させたいです.
  よろしくお願いします.

  313 :デフォルトの名無しさん:2015/09/30(水) 21:32:01.35 ID:RUmQvCwV
  >>312
  裏では何が走ってるのか判らないので諦めたほうがいい.
  例えば, インデックスサービス, ウィルススキャン, IMEなど.

  314 :デフォルトの名無しさん:2015/09/30(水) 22:01:54.29 ID:SiaxX88C
  >>312
  並行処理には色々あるから, どういうシチュエーションを想定しているかが分からない以上答えようが無い.
  一般論としては >>313 の言う通り.

  315 :デフォルトの名無しさん:2015/09/30(水) 22:19:02.70 ID:lqNGdTXz
  >>313.314
  ご回答ありがとうございます.
  裏で走る処理の想定は, 完全に把握することはできない状態で, 313さんが仰る通りです.
  今回は, 諦めて削除対象が掴まれていたらエラーにする処理にします.

  316 :デフォルトの名無しさん:2015/09/30(水) 22:31:46.85 ID:lqNGdTXz
  続けてのご質問失礼します.
  Windowsサーバー2008 でバッチファイルを直叩きすると必ず管理者権限で実行されると耳にしたので, 調べているものの参考文献が見つかりません.
  実際にWindowsサーバー2008の環境でバッチを叩く権限が私にはなく, 動作確認ができない状態のためご存知の方いらっしゃいましたら,
  参考URLやご助言頂ければ幸いです.
  よろしくお願い致します.

  317 :デフォルトの名無しさん:2015/09/30(水) 22:45:30.90 ID:lqNGdTXz
  >>316
  自己解決できました.
  管理者権限は, UAC設定によりバッチ実行時に管理者以外のユーザーが実行した場合は,
  昇格ダイアログや管理者ユーザーのパスワード入力ダイアログが表示された後に管理者権限で実行されるようです.

  318 :デフォルトの名無しさん:2015/10/01(木) 15:59:29.84 ID:feh5z6YX
  特定ディレクトリ内にあるファイルの中から,
  作成日が新しい順で10件だけ表示する, という方法はありますか?

  319 :デフォルトの名無しさん:2015/10/01(木) 22:27:35.44 ID:GOCfcoes
  @echo off
  setlocal
  set target_path=
  set num=0
  for /f "usebackq tokens=*" %%a in (`dir /a:-d /o-d /b "%target_path%"`) do (
  call :main "%%~a"||(goto :eol)
  )
  :eol
  endlocal
  goto :eof
  :main
  if "%num%"=="10" (exit /b 1)
  echo %~1
  set /a num+=1
  exit /b 0

  320 :デフォルトの名無しさん:2015/10/01(木) 22:50:13.28 ID:SNj2dVz3
  >>319
  作成日と言ってるから,
  dir /a-d /o-d /tc /b
  でしょう.
  あとファイル名に&や^なんかが使われてると・・・.

  321 :320:2015/10/02(金) 00:42:34.05 ID:CZzG8B2R
  文句だけじゃなんだからダメ文字を回避する方法.
  @echo off
  if "%~1" equ "" (set folder=.) else (set folder="%~1")
  if "%~2" equ "" (set n=10) else set /a n=%2
  if %n% leq 0 set n=99999
  for /f %%i in ('dir /a-d /o-d /tc /b %folder%^|find /v /c ""') do set /a
  n=%%i-%n%
  if %n% lss 0 set n=0
  dir /a-d /o-d /tc /b %folder%|sort /+99999|more +%n%|sort /+99999
  なお,
  dir /a-d /o-d /tc /b %folder%
  のかわりに.
  dir /a-d /o-d /tc %folder%|findstr "^[0-9]"
  とすればdirの出力形式で表示される.
  出力をフルパスで出す方法はちょっとわからない(for文で%~fIとか使うことは可能だがダメ文字が・・・)

  322 :318:2015/10/02(金) 01:12:11.43 ID:2daHSNuh
  >>319-321
  ありがとうございます.
  詳細なソート方法は分かったんですが表示するファイル数を限定出来なかったのでとても助かります.

  323 :デフォルトの名無しさん:2015/10/02(金) 01:46:43.29 ID:xI4RFHCV
  フリーソフトの tail や head を手に入れてもできる.
  dir /a-d /o-d /b | head -10
  dir /ad /od /b |tail -10
  など.

  324 :デフォルトの名無しさん:2015/10/02(金) 04:08:29.67 ID:ywG60DzM
  @echo off
  setlocal
  set target_path=.
  set line=0
  set maxline=10
  for /f "usebackq tokens=*" %%a in (`dir /a:-d /o:-d /t:c /b "%target_path%"`)
  do (
  call :main "%%~a"||(goto :eol)
  )
  :eol
  endlocal
  goto :eof
  :main
  if "%line%"=="%maxline%" (exit /b 1)
  echo "%~1"
  set /a line+=1
  exit /b 0

  325 :デフォルトの名無しさん:2015/10/02(金) 13:30:43.97 ID:Q66dAmly
  バッチファイル自身が管理者権限で実行されているかどうかを判断するための.
  ポイントを教えて下さい.
  今は次のいい加減なチェック方法しています, set で環境変数に.
  FPS_BROWSER_APP_PROFILE_STRING (<-Windows10)
  FPS_BROWSER_USER_PROFILE_STRING (<-Windows10)
  SESSIONNAME
  の3つor1つが無いのが管理者権限で実行されているバッチ.
  これだと, 何かのはずみで自前で設定しちゃう(ってる)と明らかにダメな判定基準なので.
  何かもっと頼れる判断方法を知りたいのです.
  Windows10 と Windows7 です.

  326 :デフォルトの名無しさん:2015/10/02(金) 16:31:13.60 ID:CZzG8B2R
  >>324
  引数で渡さずに環境変数で渡すようにしないと.
  a^b.txt

  327 :デフォルトの名無しさん:2015/10/02(金) 17:03:45.75 ID:2DuVHDsa
  >>325
  whoami /GROUPS|find "High" >NUL||(echo バッチファイル自身が管理者権限で実行されていません) && goto
RUNAS
  とか (アンド記号は半角で)
  判定はMandatory Labelから.

  328 :デフォルトの名無しさん:2015/10/02(金) 17:34:44.56 ID:c57yEoAI
  >>324 行番号で代用すれば, わざわざcallする必要ないと思う.
  @echo off
  set folder=.
  set /a len=10
  for /f "usebackq tokens=1* delims=:" %%a in (`dir /a:-d /o:-d /t:c /b
  "%folder%" ^| findstr /n "^"`) do (
  if %%a GTR %len% (goto :eof) else echo %%~f$folder:b
  )

  329 :デフォルトの名無しさん:2015/10/02(金) 17:39:55.07 ID:0pgpzEB+
  >>327
  ありがとうございました, スッキリうまくいきました.
  勉強になります.

  330 :デフォルトの名無しさん:2015/10/02(金) 18:54:09.58 ID:2DuVHDsa
  >>329
  http://scripting.cocolog-nifty.com/blog/2010/01/post-f725.html
  この辺を参考にしただけ.
  管理者権限か否かの判定のみなら>>327で用は足りると思うけど, 念のため追記.

  331 :デフォルトの名無しさん:2015/10/02(金) 20:04:45.82 ID:0pgpzEB+
  >>330
  重ねてありがとうございます.
  その記事の次の.
  waitfor hoge /t 秒.
  もポイント高かったです.
  timeout 使うとエラーになって用をなさないことが時々あったので.
  ping を使ってたんですが waitfor という方法があったとは.
  『コマンドラインから, UACダイアログを出さずに「管理者として実行」する. 』
  などでの SchTasks も何かもう目からウロコ.

  332 :デフォルトの名無しさん:2015/10/05(月) 19:28:34.57 ID:SpCxBh4Z
  PUSHD 作業フォルダ.
  〜いろんな作業〜.
  POPD
  というバッチで, たまにカレントが作業フォルダのまま終了してしまうことがあります.
  もちろん, 作業自体に強制終了, GOTO :EOF等はしていません.
  終了後POPDを手入力しても戻らないのでシェル自身が忘れてしまっているようです.
  最初に%CD%を保管しておいて, POPD後戻っていなかったら強制的にCDで戻るように.
  するようにしようかと思っているのですが,
  もう少しスマートな方法とかあります?

  333 :デフォルトの名無しさん:2015/10/05(月) 21:41:49.86 ID:bTT+ZGiB
  >>332
  ホントに?

  334 :デフォルトの名無しさん:2015/10/06(火) 02:00:18.79 ID:mXRqVUnf
  >>332
  echo on
  して本当に popd してるのか確認したのか?

  335 :デフォルトの名無しさん:2015/10/06(火) 02:23:23.79 ID:QJFP7AtV
  >>332
  なんか変なことしてるところがあると思うよ.
  それを見つけた方がいいけど.
  別の環境保存方法ということでは.
  setlocal〜endlocalで挟む.
  それが別のbatであるなら, callで呼ばずにstart /b /waitで呼ぶ.
  とかかな.

  336 :デフォルトの名無しさん:2015/10/06(火) 03:03:04.87 ID:QJFP7AtV
  別のbatでもstartを使わずにcallでも大丈夫な方法もあった.
  call|call hoge.bat

  337 :デフォルトの名無しさん:2015/10/07(水) 19:03:48.86 ID:nsjlsK3x
  イベントでスクリプトを実行するアプリでログオンさせたいんですが,
  powershellのスクリプトでログオンて出来ますかね?
  ググったのですが参考になる情報を見つけられませんでした.
  ヒントを教えて頂けないでしょうか.

  338 :デフォルトの名無しさん:2015/10/07(水) 19:43:48.86 ID:RUI9/d0r
  スレタイ読めカス.

  339 :デフォルトの名無しさん:2015/10/24(土) 10:57:16.17 ID:p7rCtkQ8
  教えてください.
  バッチからIME辞書登録を行いたいのですが, 方法はありますでしょうか.
  フリーソフト等を使わず, windowsの標準機能のみで行う方法がありましたらご教示ください.

  340 :デフォルトの名無しさん:2015/10/24(土) 11:13:55.98 ID:fZHdxrwJ
  テキストファイルから一括等登録はできるけどバッチが絡む余地はなさそう.
  この操作手順を自動化するにはAutoHotKey的なツールを使うしかない.
  無理やりやるならVBSでSendなんちゃら使いまくるくらいか.
  複数の単語を一括で登録するには.
  https://support.microsoft.com/ja-jp/kb/881925

  341 :デフォルトの名無しさん:2015/10/24(土) 22:36:15.42 ID:p7rCtkQ8
  >>340回答ありがとうございます.
  そのsendなんちゃらってなんでしょうか.
  ヒント頂けないでしょうか.
  お手数ですいません・・・.

  342 :デフォルトの名無しさん:2015/10/24(土) 23:39:00.99 ID:mJxFzgC6
  >>341
  SendKeysのことだと思うけど・・・.
  たぶんあなたには無理だと思うから,
  諦めるか条件を緩める手段をとったほうが良いかと.

  343 :デフォルトの名無しさん:2015/10/25(日) 21:17:07.24 ID:CKwhkT15
  imjpuexc?

  344 :デフォルトの名無しさん:2015/10/26(月) 00:24:08.25 ID:zhu5kfAS
  imjpuexcは辞書をファイルを使用するかどうかを登録するだけで単語登録できないような.

  345 :デフォルトの名無しさん:2015/10/26(月) 01:43:05.06 ID:kwhrPFGj
  フリーソフト使えば出来るんだし, そもそも何故batじゃなけりゃいけないのか.
  使用目的を明らかにしてくれれば別の解決方法もアドバイスできるかもしれないのに.

  346 :デフォルトの名無しさん:2015/10/26(月) 10:35:38.89 ID:g04VwT0z
  事件の香りがするクンクン.

  347 :デフォルトの名無しさん:2015/10/26(月) 10:44:57.57 ID:+1zm0ysr
  別途ソフトを使わずに且つ可能な限り省力化したいという意図と読み取れるが.
  例えば(会社等で)使用する全ての端末に同じ単語を辞書登録させたいとかそんな感じだろうか.
  そういったことであれば自分で辞書ファイルを作ってしまえばいいんじゃないかね.
  その辞書を使用する登録はimjpuexcでできるから, これならバッチファイルも一緒に作って.
  セットで各端末に配布して実行するだけまで省力化できそうだが.

  348 :デフォルトの名無しさん:2015/11/24(火) 00:49:21.44 ID:K+m1Fn13
  質問です.
  ドラッグアンドドロップしたディレクトリ配下を見ていき.
  ディレクトリ内がファイルだけの場合はそのディレクトリをその場所に圧縮し, 圧縮後に削除.
  という処理を作りたいのですが.
  ディレクトリ内がファイルだけか?という判定がうまくいかず.
  DIRで/a:dとしてもカレントがカウントされてERRORLEVELが常に0になってしまい.
  助けていただけませんか.

  349 :デフォルトの名無しさん:2015/11/24(火) 01:57:14.13 ID:E5eNrkbC
  /a-d

  350 :デフォルトの名無しさん:2015/11/24(火) 03:42:46.10 ID:ZLe33KjQ
  >>348
  set err=0
  for /f %%a in ('dir /ad /b') do set err=1
  set err
  set err=

  351 :デフォルトの名無しさん:2015/11/24(火) 04:04:14.14 ID:DOEe32Zv
  >>348
  何がしたいのかいまいちよく分からないんだが,
  指定されたdirがファイルだけのときは, その親dirに圧縮ファイルを作成後サブdir削除ってこと?
  (それともサブdir, さらにその下のサブdirと次々と潜っていくってこと?)
  分からないので, 直接質問されたことにだけ.
  1)dirかどうか.
      if exist "%~1\" echo **
  1)ファイルがあるかどうか.
      dir /a-d "%~1" >nul 2>&1 || echo **nofile**
  2)サブdirがあるかどうか.
      set flag=no
      for /d %%i in ("%~1\*") do set flag=yes
      又は.
      for /f %%i in (''dir /b /ad "%~1" 2^>nul') do set flag=yes

  352 :デフォルトの名無しさん:2015/11/24(火) 19:52:42.07 ID:K+m1Fn13
  >>350-351
  ありがとうございます. 言葉が足らず申し訳ありません.
  サブDirの下に潜っていき, その潜った先がファイルだけの構成なら.
  そいつを圧縮するということを行いたいのです.
  フォルダ構造を保ちながら, ファイルがまとまっているフォルダだけ圧縮していく.
  ということを実現しようとしています.

  353 :デフォルトの名無しさん:2015/11/24(火) 23:26:24.37 ID:uLTusmQs
  dir +d と dir -d で二回errorlevelを判定したらどうなのだろう.

  354 :デフォルトの名無しさん:2015/11/26(木) 21:08:59.38 ID:Xx7BS4XN
  >>348
  Info-ZIP の zip.exe を使用した例.
  cd /d

  355 :デフォルトの名無しさん:2015/11/26(木) 21:11:45.12 ID:Xx7BS4XN
  >>348
  Info-ZIP の zip.exe を使用した例.
  cd /d "%~f1"
  for /r %%i in (.) do set "n=%%~nxi" & pushd "%%i" & call :x & popd
  goto :eof
  :x
  for /d %%j in (*) do goto :eof
  zip "..\%n%.zip" *
  if errorlevel 1 goto :eof
  cd ..
  rd /s /q "%n%"

  356 :デフォルトの名無しさん:2015/12/02(水) 18:49:05.46 ID:uZhzBB52
  質問です.
  virtualbox(PC/ATエミュ)にms-dos6.22(english)をインストールしました.
  起動後にECHO %PATH%で環境変数PATHを表示させようとしましたが,
  %PATH% とタイプした文字が置換されずに帰ってきてしまいます.
  自分で環境変数を設定しても同様です.
  ---------------------------------
  C:\ SET VAL=OK
  C:\SET
  (中略)
  VAL=OK <--セットされている.
  C:\ECHO %VAL%
  %VAL% <--置換されない.
  ---------------------------------
  これって仕様でしょうか. 環境変数を参照するにはどうしたらいいでしょうか?

  357 :デフォルトの名無しさん:2015/12/02(水) 20:00:00.33 ID:G6CksgA0
  echo "%ABC%"
  ダブルクォーテーションで囲めば, どうなる?

  358 :デフォルトの名無しさん:2015/12/02(水) 21:32:16.52 ID:uZhzBB52
  >>357
  同じです.
  C:\ECHO "%VAL%"
  "%VAL%"

  359 :356:2015/12/02(水) 23:38:35.70 ID:uZhzBB52
  理由わかりました.
  COMMAND.COMの仕様です.
  バッチファイルに記述して実行すると置換されます.
  WIN9xあたりまではそういう仕様かもしれません.

  360 :デフォルトの名無しさん:2015/12/02(水) 23:45:06.29 ID:l4g7T0Fa
  command.com懐かしいな.
  cmd.exeになってからコマンドライン直書きでも展開されるようになったような.

  361 :デフォルトの名無しさん:2015/12/03(木) 06:14:24.04 ID:rFz6rQx1
  ダッセーPROMPT. w.

  362 :デフォルトの名無しさん:2015/12/03(木) 23:14:20.69 ID:351ZeN4c
  >>360
  記憶がごっちゃになってもうどっちがどっちだったかわからん.

  363 :デフォルトの名無しさん:2015/12/04(金) 02:45:09.97 ID:K5fLtIai
  >>360
  そうだったっけ?
  全然そんな記憶無いんで, 普通に直打ちで変数展開されてたと思う.

  364 :デフォルトの名無しさん:2015/12/04(金) 04:22:29.66 ID:p/GS1A93
  win95のcommand.comで直接echo %PATH% してみたけどちゃんと展開された.

  365 :デフォルトの名無しさん:2015/12/07(月) 06:23:17.16 ID:DQwTbvQ5
  質問です. 終了判定の順番についてなのですが.
  プログラミング的というかバッチ的なセオリーというのがもしあれば教えて下さい.
  失敗した場合.
    ・ループ goto :LOOP
    ・リトライ上限回数による終了 exit /b 1
  成功した場合.
    ・途中終了によりリスタート exit /b 2
    ・正常終了 exit /b 0
  とあってそれぞれどのような順でも出来ます.
  頻度の高い順や短い処理の順にした方が余計な判定をしなくて済みますが.
  大差ない場合等はその順序に何かセオリーがあったりしますか?

  366 :デフォルトの名無しさん:2015/12/09(水) 01:33:29.59 ID:DMnL3no7
  フォルダを指定するとそれ以下の階層の指定したファイルを他のソフトに橋渡ししたいのですがどのように学べば作れますかね?

  367 :デフォルトの名無しさん:2015/12/09(水) 03:34:34.37 ID:xJXhqdvp
  > それ以下の階層の指定したファイル.
  どういう指定?拡張子?for /r で出来ると思う.

  368 :デフォルトの名無しさん:2015/12/10(木) 03:14:00.36 ID:VBAMhbiJ
  2つの日付(年月日時分秒)を引数としてその差を秒で返すバッチをお願いします.
  "20000101000000" "20040404_044444"とか"2000/01/01_00:00.00"とか引数の形式はお任せ.
  引数のエラーチェックは無しでOK. 閏日は必要. 閏秒は無視.

  369 :デフォルトの名無しさん:2015/12/14(月) 22:34:22.40 ID:A58wbYtQ
  @echo off
  rem call :a1 yyyymmddhhmmss yyyymmddhhmmss result
  call :a1 19700101000000 20380119031407 s
  echo %s%
  pause
  goto :eof
  :a1
  setlocal
  set /a b=10000, c=100
  call :a2 1 %1 & call :a2 2 %2
  call :a3 y1 m1 d1 d1 & call :a3 y2 m2 d2 d2
  set /a s1+=h1*3600+n1*60, s2+=h2*3600+n2*60, s3=(d2-d1)*86400-s1+s2
  endlocal & set /a %3=%s3%
  goto :eof
  :a2
  set a=%2
  set /a y%1=1%a:~0, 4%-b, m%1= 1%a:~4, 2%-c, d%1= 1%a:~6, 2%-c
  set /a h%1=1%a:~8, 2%-c, n%1=1%a:~10, 2%-c, s%1=1%a:~12, 2%-c
  goto :eof
  :a3
  set /a y=%1, m=%2, d=%3, m+=(y-1)*12, d+=(m-1)*31
  set /a a=m+9, d+=a/48-a/1200+a/4800, b=12
  set /a %4=d-a/b*3-(m+7)/b-(m+5)/b-(m+2)/b-m/b

  370 :デフォルトの名無しさん:2015/12/15(火) 00:46:59.16 ID:o42ChFzI
  ついでに秒差から年月日時分秒を逆算するバッチ.
  @echo off
  rem call :a4 yyyymmddhhmmss +sec year month day hour minute second
  call :a4 19700101000000 2147483647 y m d h n s
  echo %y% %m% %d% %h% %n% %s%
  pause
  goto :eof
  :a4
  setlocal
  set /a b=10000, c=100, s2=%2
  call :a2 1 %1
  call :a3 y1 m1 d1 d1
  set /a s1+=h1*3600+n1*60, d3=d1+(s1+s2)/86400, s3=(s1+s2)%%86400
  set /a h3=s3/3600, n3=s3/60%%60, s3%%=60
  call :a5 d3 y3 m3 d3
  endlocal & set /a %3=%y3%, %4=%m3%, %5=%d3%, %6=%h3%, %7=%n3%, %8=%s3%
  goto :eof
  :a5
  set /a d=%1, a=305, b=365, c=146097, e=(d+a)/c, f=(d+1+a)/c-e, d-=e
  set /a d+=(d-f+a)/36524, c=1461, e=(d+a)/c, f=(d+1+a)/c-e, d-=e
  set /a d+=(d-f+a)/b*3+(d+244)/b+(d+183)/b+(d+91)/b+(d+30)/b-1
  set /a %2=1+d/372, %3=1+d/31%%12, %4=1+d%%31
  goto :eof
  rem ここに >>369 の :a2 と :a3 をコピペ.

  371 :デフォルトの名無しさん:2015/12/15(火) 04:37:32.89 ID:DyLWSAr/
  >>369-370
  こんなに短く書けるものなのですね.
  ifやらforやら使って閏日判定して足したり最初から全部秒に直して計算してたりとアホな事してました.
  とても参考になりました. ありがとうございました.
  :a3 2行目 a=m+9 が良く分かりません. その後は閏日を追加する計算で3行目が月31日計算の補正だと思うのですが.
  暇があって気が向いた時で良いですので :a3, 2行目と3行目の解説をお願いしたいです.

  372 :デフォルトの名無しさん:2015/12/15(火) 05:13:05.16 ID:DyLWSAr/
  a=m+9 は3月起点にする為ですよね.
  48ヶ月(4年)毎に+1日, 1200ヶ月(100年)毎に-1日(4年毎の打ち消し), 4800ヶ月(400年)毎に+1日.
  なるほどです.

  373 :デフォルトの名無しさん:2015/12/16(水) 20:07:03.65 ID:fy5f41q6
  @echo off
  rem this.bat yyyymmddhhmmss yyyymmddhhmmss VerName
  setlocal
  call :SUB 1 %~1
  call :SUB 2 %~2
  set /a s=(d2-d1)*86400+(h2*3600+n2*60+s2)-(h1*3600+n1*60+s1)
  endlocal & echo %s% & if not "%~3"=="" set %~3=%s%
  exit /b
  :SUB
  set a=%2
  call set /a y%1=1%a:~0, 4%-10000, m%1=1%a:~4, 2%-100, d%1=1%a:~6, 2%-100,
  h%1=1%a:~8, 2%-100, n%1=1%a:~10, 2%-100, s%1=1%a:~12, 2%-100
  call set /a m%1+=(y%1-1)*12
  call set /a
  d%1+=(m%1-1)*31+(m%1+9)/48-(m%1+9)/1200+(m%1+9)/4800-((m%1+9)/12)*3-(m%1+7)/12-(m%1+5)/12-(m%1+2)/12-m%1/12
  exit /b
  rem消してcallを&してcall set /aを, で1行に纏めたら10行になるな.
  似たようなの書いた事あるけど俺もifとfor駆使して50行くらいあったわ.
  ロジック大事だな. 369みたいにスマートに書ける頭良い奴羨まし.
  >>372
  >a=m+9 は3月起点にする為.
  それが分かるなら分かりそうなものだが3行目もそれと同じ.
  3月なら-3日, 15ヶ月なら-6, 同じように5月, 7, 10, 12と西向く侍越えてたら日を引いてる.

  374 :デフォルトの名無しさん:2015/12/17(木) 09:52:29.59 ID:pa9hyiSF
  >>369
  フェアフィールドの公式でもっと簡略化できる.
  :a3
  set /a a=(12-%2)/10, y=%1-a, m=%2+a*12
  set /a %4=365*(y-1)+y/4-y/100+y/400+306*(m+1)/10-63+%3
  逆算では>>370の:a5の代替となる公式は知らないなあ.

  375 :デフォルトの名無しさん:2015/12/17(木) 14:48:37.51 ID:ZSvcUJP0
  せっかくなんで, 誰でも思いつく変換テーブルを使った奴も.
  :a3
  set n= 00 31 61 92122153184214245275306337
  set /a y=%1, m=%2, d=%3, y+=(%2+9)/12-1, m=(%2+9)%%12*3
  call set /a %4=y*365+(y/4)-(y/100)+(y/400)+%%n:~%m%, 3%%+d-1-306
  goto :eof

  376 :デフォルトの名無しさん:2015/12/17(木) 22:03:19.42 ID:6xd5GL4Z
  >>374
  >>375
  名人芸みたい.
  set /a で , を使えるのは知らなかった.

  377 :デフォルトの名無しさん:2015/12/18(金) 20:41:02.17 ID:5v+P6SwD
  >フェアフィールドの公式.
  理解するのに少し時間がかかったけどひとつ賢くなりました. ありがとう.

  378 :デフォルトの名無しさん:2015/12/19(土) 23:36:20.61 ID:hIm+VLiM
  >>374
  >>369は差分を取ってるだけだから定数部分は要らない.
  簡略化したいなら(y-1)はyでいいし, -63も不要だな.
  でもそうすると>>370で使えなくなるけど.

  379 :デフォルトの名無しさん:2015/12/20(日) 01:39:29.37 ID:ZqBWpEZf
  @echo off & setlocal
  call :SUB 1 %~1 & call :SUB 2 %~2
  set /a s=(d2-d1)*86400+(h2-h1)*3600+(n2-n1)*60+s2-s1
  endlocal & echo %s% & if not "%~3"=="" set %~3=%s%
  exit /b
  :SUB
  set a=%2
  set /a m=1%a:~4, 2%-100, y=1%a:~0, 4%-10000-(12-m)/10, m=m+(12-m)/10*12
  call set /a d%1=1%a:~6, 2%-100, h%1=1%a:~8, 2%-100, n%1=1%a:~10, 2%-100,
  s%1=1%a:~12, 2%-100
  call set /a d%1+=365*y+y/4-y/100+y/400+306*(m+1)/10

  380 :デフォルトの名無しさん:2015/12/21(月) 08:37:29.96 ID:h62kjpL5
  370の:a5が全く分からん. eは0年3月から400年周期が何回あるか?で合ってる?
  通日から年月日求める式の解説してるサイトとかあったら教えて欲しい.

  381 :デフォルトの名無しさん:2015/12/21(月) 09:39:16.04 ID:M1iYKpBu
  @echo off & setlocal enabledelayedexpansion
  call :SUB 1 %~1 & call :SUB 2 %~2
  set /a s=(d2-d1)*86400+(h2-h1)*3600+(n2-n1)*60+s2-s1
  endlocal & echo %s% & (if not "%~3"=="" set %~3=%s%) & exit /b
  :SUB
  set a=%2 & set /a b=!a:~0, 8!, c=1!a:~8!-1000000, h%1=c/10000
  set /a m=b/100%%100, e=(12-m)/10, m+=e*12, y=b/10000-e, n%1=c/100%%100
  set /a s%1=c%%100, d%1=b%%100+365*y+y/4-y/100+y/400+306*(m+1)/10
  goto :eof

  382 :デフォルトの名無しさん:2015/12/21(月) 10:07:38.96 ID:M1iYKpBu
  >>380
  > eは0年3月から400年周期が何回あるか?で合ってる?
  dは1年1月1日からの日数.
  1個目のeは400年3月1日から400年周期の3月1日の日数.
  1個目のfはdの最終日の翌日が400年周期の3月1日だったら1, それ以外は0
  2個目のe, fは同様に4年周期での値.
  > 通日から年月日求める式の解説してるサイトとかあったら教えて欲しい.
  私も知りたい.

  383 :デフォルトの名無しさん:2015/12/21(月) 10:32:14.51 ID:M1iYKpBu
  >>382は>>370の:a5の事です.
  2chは2種類あるんで, >>を付けないと番号が変わることがある.

  384 :デフォルトの名無しさん:2015/12/21(月) 16:40:51.02 ID:xEP90Lc1
  俺が判った範囲での数値.
  d=1年1月0日を基点とした日数.
  d+1=1年1月1日を基点とした日数.
  d+305=0年3月1日からの日数.
  146097=400年+97(うるう日)
  36524=100年+24(うるう日)
  1461=4年+1(うるう日)
  003 004 005 006 007 008 009 010 011 012 001 002 (月)
  031 030 031 030 031 031 030 031 030 031 031 028 (日数)
  031 061 092 122 153 184 214 245 275 306 337 (積算日数)
  030 060 091 121 152 183 213 244 274 305 336 (積算日数-1)
  372=365+(305>)*3+(244>)+(183>)+(91>)+(30>)

  385 :デフォルトの名無しさん:2015/12/21(月) 16:48:15.00 ID:xEP90Lc1
  d+305=0年3月1日からの日数.
    [下矢印]
  d+1+305=0年3月1日からの日数.
  に訂正.

  386 :デフォルトの名無しさん:2015/12/21(月) 16:55:52.04 ID:xEP90Lc1
  d+1=1年1月1日を基点とした日数.
  これは明らかに間違ってるんで削除.

  387 :デフォルトの名無しさん:2015/12/21(月) 17:00:54.37 ID:M1iYKpBu
  >>383
  よく考えるとシフト演算式の>>の右側の数値が勝手に変わったりするんだな.
  やだなあ.

  388 :デフォルトの名無しさん:2015/12/22(火) 23:27:20.70 ID:GbSBVwIU
  > 通日から年月日求める式の解説してるサイトとかあったら教えて欲しい.
  俺も.
  誰か概要でも良いので解説お願いします.

  389 :デフォルトの名無しさん:2015/12/23(水) 11:08:49.70 ID:aiQM95lL
  echo aaa >> C:\test.log
  rem input.txtには3行書かれている.
  FOR /F

  390 :デフォルトの名無しさん:2015/12/23(水) 12:48:25.38 ID:dDv8KSpn
  >>388
  躓いてるのは,
  30, 91, 183, 244, 305, 372の数値の意味だろ?
  >>384で解説されてるじゃん.

  391 :デフォルトの名無しさん:2015/12/23(水) 15:53:35.33 ID:dDv8KSpn
  簡単に要点のみ解説すると,
  全部の月を31に補正して計算するってこと. 1年は31*12=372日になる.
  3月以降の場合, +3日.
  11月以降の場合, +1日.
  9月以降の場合, +1日.
  6月以降の場合, +1日.
  4月以降の場合, +1日.
  例えば, 7月3日だったとしよう.
  すると, +3+1+1=+5日が加算され, 31*7 あまり 3日という風に算出する.

  392 :デフォルトの名無しさん:2015/12/23(水) 16:15:56.66 ID:dDv8KSpn
  月の説明がズレたけどわかるよね?
  (d+244)/12 が5月以降.
  (d+183)/12 が7月以降.
  :
  ってことね.

  393 :デフォルトの名無しさん:2015/12/23(水) 18:34:12.63 ID:2AzhQbBP
  もはやバッチスレじゃなくなってる.

  394 :デフォルトの名無しさん:2015/12/24(木) 10:50:25.07 ID:Hd7uli2y
  複数のアプリケーションをバッチで順番に起動してインストールしています.
  しかし起動してきたsetup.exeなどの「同意する」「次へ」などは手動でやっています.
  この, alt+n や Enter などのキー入力はバッチファイルからできないものでしょうか.

  395 :デフォルトの名無しさん:2015/12/24(木) 19:51:50.54 ID:k0eMsSdC
  >>368 はこいつと同一人物なんだろうな.
  http://potato.2ch.net/test/read.cgi/software/1387352479/588-594

  396 :デフォルトの名無しさん:2015/12/25(金) 01:37:29.49 ID:xjel9170
  >>394
  これを使えば, キー入力が出来ます.
  キーボード・マウス シミュレーター.
  http://ftp.vector.co.jp/pack/winnt/util/operate/kms1_1.zip
  KMS.EXE
  入力のタイミングは, こちらで調整出来ます.
  コンソールアプリ用 : Visual Studio 用 バッチビルドパッケージ.
  http://winofsql.jp/download/vc_build.zip
  FINDWINDOW.EXE ウィンドウハンドル取得.
  FOREGROUND.EXE 指定のウィンドウハンドルの画面をフォアグラウンドにする.
  コマンド・プロンプトからウィンドウのアクティブ状態を変更.
  http://ftp.vector.co.jp/pack/win95/util/desktop/ACTVW160.ZIP
  ACTIVATE.EXE

  397 :デフォルトの名無しさん:2015/12/25(金) 05:48:22.51 ID:pIvyUHeA
  インストーラーのsetup.exeにQuietInstallのオプションが無いか確認して, 無いならAutoHotkey使うとか.

  398 :デフォルトの名無しさん:2015/12/25(金) 14:17:34.47 ID:O30Ofv/O
  バッチよりWSHでSendKeysじゃないかな.

  399 :デフォルトの名無しさん:2015/12/25(金) 23:52:12.53 ID:Q7FXbHS7
  今日の大失敗(初歩のバッチ)
  cd xxx\yyy\zzz
  del /P *.*
  と書くのは止めましょう.
  xxx\yyy\zzz フォルダが無かった場合, 現フォルダのファイルが全滅.
  幸い重要ファイルはなくて助かった, もし del /S /P *.* だったら大ダメージ.

  400 :デフォルトの名無しさん:2015/12/26(土) 00:46:33.93 ID:X4YvfGHD
  俺も先日vvvに3万個くらいやられたけど, 大部分がテンポラリファイルだったから助かったよ.

  401 :デフォルトの名無しさん:2015/12/26(土) 01:15:18.22 ID:DVIYmgTf
  >>399
  間違って大量削除したときのために復元ソフトはいつでも動かせるようにしとけ.

  402 :デフォルトの名無しさん:2015/12/26(土) 02:02:37.73 ID:ORfhhjc6
  >>399
  cd 〜 && call 削除のための処理.
  とかすればいいんじゃね.

  403 :デフォルトの名無しさん:2015/12/26(土) 20:19:18.74 ID:GqwbH3xG
  xxx\yyy\zzz フォルダがあっても駄目だろ.
  せめて cd /d にしろよ.

  404 :デフォルトの名無しさん:2015/12/27(日) 00:32:23.81 ID:WRaoLAxw
  >>402
  cd 〜 && call だと cd がエラーでcallは実行されないのに.
  cd 〜 && echo abc だとcd がエラーでもecho実行, なぜ?
  if exist でチェックしようとしてもファイルかフォルダか区別できないような気がする.

  405 :デフォルトの名無しさん:2015/12/27(日) 09:53:50.86 ID:g59Yk3Y1
  SSD化の時のコマンドで, ジャンクションを貼るよりリンボリックリンクの方がいいのでしょうか.
  変数など訂正すべきところなどご教授ください.
  robocopy "C:\Users" "D:\Users" /E /COPYALL /XJ
  robocopy "C:\ProgramData" "D:\ProgramData" /E /COPYALL /XJ
  rmdir "C:\Users" /S /Q
  mklink /J "C:\Users" "D:\users"
  rmdir "C:\ProgramData" /S /Q
  mklink /J "C:\ProgramData "D

  406 :デフォルトの名無しさん:2015/12/28(月) 13:00:25.63 ID:dgI6+oKo
  >>404
  > ファイルかフォルダか区別できないような気がする.
  dir /ad とか attrib で属性見るとか.
  そこまでやるなら wsh とかに行った方がいいように思うけど.

  407 :デフォルトの名無しさん:2015/12/28(月) 13:47:32.36 ID:c+74yIFV
  >>404
  if existによるディレクトリの確認はこの辺参照.
  http://d.hatena.ne.jp/otn/20050209/p1

  408 :デフォルトの名無しさん:2015/12/28(月) 19:52:52.18 ID:VIpgPLje
  for %%i in (folder) do set a=%%~ai
  とか.
  call :AA folder
  :AA
  set a=%~a1
  set a=%a:~0, 1%
  とかで1文字目取り出して if "%a%"=="d" じゃないっけ?うろ覚え.

  409 :デフォルトの名無しさん:2016/01/02(土) 22:28:34.67 ID:R0FqLiWH
  スルーされとる.

  410 :デフォルトの名無しさん:2016/01/04(月) 23:45:48.45 ID:uSRue82f
  >>406-408
  ありがとうございます, いろいろな方法がありますね, 試してみます.
  遅くなってごめんなさい.

  411 :デフォルトの名無しさん:2016/01/19(火) 21:34:08.04 ID:ibh0JYmW
  ソフ板に質問スレが無かったので, こちらで教えて欲しいのですが・・・.
  2つのフォルダを比較して, フォルダ1と同じ名前のファイルだけ抽出して別フォルダに保存出来るアプリありますでしょうか?
  例えば.
  (フォルダ1)
  ファイルa
  ファイルf
  ファイルg
  ファイルp
  ファイルx
  (フォルダ2)
  ファイルa
  ファイルb
  ファイルc
  ファイルf
  ファイルg
  ファイルv
  ファイル. w.
  ファイルx
  の場合フォルダ2の.
  ファイルa
  ファイルf
  ファイルg
  ファイルx
  だけ, フォルダ3にコピーしたいのですが・・・.
  バッチファイルで出来るなら, それでもいいのですが, よろしくお願いします.

  412 :デフォルトの名無しさん:2016/01/19(火) 21:36:04.38 ID:ibh0JYmW
  あるいは, フォルダ1にあってフォルダ2に無いファイルをフォルダ2から消しても構いません.
  最終的にフォルダ1にある名前のファイルだけ残ればいいです.
  因みにですが, フォルダ1とフォルダ2のファイルは名前が同じでも中身が違いますので, 残すのはあくまでもフォルダ2のファイルだけです.

  413 :デフォルトの名無しさん:2016/01/19(火) 22:03:45.19 ID:IRnEE3xb
  http://potato.2ch.net/test/read.cgi/software/1451969491/
  http://potato.2ch.net/test/read.cgi/software/1387352479/
  バッチでも出来るけど.
  フォルダ1と2にはフォルダが無い事前提?
  フォルダ1か2, 或いは両方にファルダがある場合どうするの?

  414 :デフォルトの名無しさん:2016/01/20(水) 00:58:45.36 ID:QphOxfb9
  >>411
  set "DIR_A=%CD%\f1"
  set "DIR_B=%CD%\f2"
  set "DIR_C=%CD%\f3"
  md %DIR_C%
  pushd "%DIR_B%" || goto :err
  for %%a in (*) do dir /a-d /b "%DIR_A%\%%~a" >nul 2>nul && copy %%~a "%DIR_C%"
  popd
  set DIR_A=
  set DIR_B=
  set DIR_C=
  goto :eof
  :err
  echo error
  goto :eof

  415 :デフォルトの名無しさん:2016/01/20(水) 03:16:35.15 ID:CGJNTMJr
  >>412
  @echo off &setlocal
  REM USAGE: this.bat "folder1" "folder2"
  pushd "%~1" ||goto :eof
  popd
  pushd "%~2" ||goto :eof
  pushd ..
  set DTTM=%date:/=%%time: =0%
  set DTTM=%DTTM::=%
  set $TMP=$tmp%DTTM:~0, -3%
  move "%~2" %$TMP%
  xcopy /e /i /h /k /y /b %$TMP% "%~2\%$TMP%"
  rd /s /q %$TMP%
  for /f "delims=" %%A in ('dir /a:-d /b "%~1"') do if exist "%~2\%$TMP%\%%A"
  move "%~2\%$TMP%\%%A" "%~2\%%A"
  rem rd /s /q "%~2\%$TMP%"
  exit /b
  @echoからexitまでをコピーして拡張子をbatで保存.
  "folder1" "folder2" は同じディレクトリにあってそこをカレントディレクトリとして実行するならフォルダ名のみで可.
  そうでない場合はフルパスで指定.
  exitの前のrem rd /s /q "%~2\%$TMP%"をrd /s /q
  "%~2\%$TMP%"とrem消せばtmpフォルダが削除されるけど十分テストしてから消してね.
  >フォルダ2に無いファイルをフォルダ2から消しても構いません.
  フォルダ2のファイルのうちフォルダ1にあるものとファイル名が同一のもの以外を削除ってことよな?
  ファイルサイズが大きいなら該当ファイルだけtmpフォルダに移動させる仕様の方が処理が早い.

  416 :デフォルトの名無しさん:2016/01/20(水) 05:25:10.21 ID:2Q8BlnOV
  @echo off &setlocal
  REM USAGE: this.bat "folder1" "folder2"
  pushd "%~1" ||goto :eof
  popd
  pushd "%~2" ||goto :eof
  pushd ..
  set DTTM=%date:/=%%time: =0%
  set DTTM=%DTTM::=%
  set $TMP=$tmp%DTTM:~0, -3%
  md "%~2\%$TMP%"
  for /f "delims=" %%A in ('dir /a:-d /b "%~2"') do if not exist "%~1\%%A" move
  "%~2\%%A" "%~2\%$TMP%\%%A"
  rd /s /q "%~2\%$TMP%"
  exit /b

  417 :デフォルトの名無しさん:2016/01/20(水) 07:14:28.26 ID:Mi5py/5P
  for %%i in ("フォルダ1\*") do move "フォルダ2\%%~nxi" "フォルダ3\"

  418 :デフォルトの名無しさん:2016/01/24(日) 00:40:39.46 ID:krEiQR2u
  ファイルのリネームをしたいです.
  具体的な処理は, 複数のファイルを.
  20160116
  2016年01月16日.
  を160116の6ケタ数字に変更してファイル名の最後に持っていくという処理をしたいです.
  写真20160116.jpg
  20160116家.jpg
  2016年01月16日花.jpg
  犬2016年01月16日.jpg
  をすべて->写真 160116.jpg
  みたいに文字列+日付6ケタに統一したいのです.

  419 :デフォルトの名無しさん:2016/01/24(日) 00:41:52.56 ID:krEiQR2u
  訂正.
  ファイルのリネームをしたいです.
  具体的な処理は, 複数のファイルを.
  20160116
  2016年01月16日.
  の日付が含まれたファイル名を.
  160116の6ケタ数字に変更してファイル名の最後に持っていくという処理をしたいです.
  具体的には.
  写真20160116.jpg
  20160116家.jpg
  2016年01月16日花.jpg
  犬2016年01月16日.jpg
  をすべて->写真 160116.jpg
  みたいに文字列+日付6ケタに統一したいのです.
  よろしくお願いします.

  420 :デフォルトの名無しさん:2016/01/24(日) 01:27:04.99 ID:5+KozvoU
  >>419
  >>418
  difして差分取れ.

  421 :デフォルトの名無しさん:2016/01/24(日) 05:34:39.03 ID:fqtpw7CO
  なぜバッチでするの?
  PowerShell じゃダメなのか?

  422 :デフォルトの名無しさん:2016/01/24(日) 08:03:06.77 ID:bklX6SGr
  >>421
  それができるならやってる.

  423 :デフォルトの名無しさん:2016/01/24(日) 15:29:33.54 ID:LnmKPUOX
  出来なくはないけど, 文字列+日付6ケタ.
  の文字列部分に"年""月""日""%""&"が使われていない事とかの制約付くのと手間とか諸々考えたらリネーム系のソフト探すかPSやperlとかの正規表現使えるスクリプト言語の方が良い.
  リネーム系ソフトが一発で文字列+日付6ケタに出来ないなら一旦, 日付8ケタ_文字列.jpg とかに変換してそこからバッチで,
  文字列+日付6ケタに再変換するとかは?

  424 :デフォルトの名無しさん:2016/01/25(月) 03:33:01.80 ID:FJlvjxIx
  >>418
  >>419
  ファイル名が例題通りなら.
  setlocal enabledelayedexpansion
  SET Fldr=%USERPROFILE%\Pictures
  SET Ext=*.jpg
  SET RenBat=RenStrYYMMDD.cmd
  echo;cd /d "%Fldr%" > "%RenBat%"
  for /f %%0 in ('dir /b "%Fldr%\%Ext%"') do (
  set DelNGP=%%~n0
  set DelNGP=!DelNGP:年=!
  set DelNGP=!DelNGP:月=!
  set DelNGP=!DelNGP:日=!
  set Str=!DelNGP!
  for /l %%C IN (0, 1, 9) DO @(
  set Str=!Str:%%C=!
  )
  call set YYYYMMDD=%%DelNGP:!Str!=%%
  if "!DelNGP!"=="!Str!!YYYYMMDD!" (
  echo;ren "%%~nx0" "!Str!!YYYYMMDD:~-6!%%~x0" >> "%RenBat%"
  ) else (
  echo;ren "%%~nx0" "!YYYYMMDD:~-6!!Str!%%~x0" >> "%RenBat%"
  )
  )
  で, 出来たバッチファイルの怪しいヤツを編集して実行すればなんとか.
  ファイル名がこれに当てはまらないなら, 正規表現の出番なので.
  提示されている, PSとかperl, sed, awk等を仕入れて専用スレでお願いします.

  425 :デフォルトの名無しさん:2016/01/25(月) 03:54:11.66 ID:FJlvjxIx
  実行結果は.
  写真160116.jpg
  160116家.jpg
  160116花.jpg
  犬160116.jpg
  ですが, if文をやめてechoを最初の行だけにすれば.
  写真160116.jpg
  家160116.jpg
  花160116.jpg
  犬160116.jpg
  になります.

  426 :デフォルトの名無しさん:2016/01/27(水) 05:07:29.42 ID:fJiggefa
  (1.)参照中のNTPサーバーを調べる. (2.)NTPサーバーとの時刻のズレを表示する, バッチなんですが.
  ズレを表示するコマンドは下記のようにNTPサーバー名が必要です.
  w32tm /monitor /computers:[NTPサーバ名]
  そこでNTPサーバーを調べるコマンドは, "w32tm /query /source"ですが.
  返り値は ntp.nict.jp, 0x9 みたいな感じで ntp.nict.jp だけを取り出したいと思います.
  そこでgoogle検索して下記のようなものを書いたところ期待どおりの結果を得る事が出来ました.
  結果的にはOKなのですがechoとw32tmのコマンドくらいしか意味がわかっていません.
  特に3行目5行目はチンプンカンプンですがこういう書き方で問題ないでしょうか?
  無駄な記述があるとか, もっとスマートな方法があるとか指摘して頂ければ助かります.
  よろしくお願いします.
  --------------------------------------------------------------------------
  @echo off
  SETLOCAL
  for /f "usebackq tokens=*" %%i in (`w32tm /query /source`) do @set RESULT=%%i
  echo %RESULT%
  for /f "tokens=1-2 eol=, delims=, " %%A in ("%RESULT%") do (
  set STR1=%%A
  set STR2=%%B
  )
  echo サーバー: %STR1%
  w32tm /monitor /computers:%str1%
  endlocal
  pause

  427 :デフォルトの名無しさん:2016/01/27(水) 06:18:16.88 ID:3u678Fz6
  for /f "delims=, " %%A in ('w32tm /query /source') do ( echo サーバー: %%A
  w32tm /monitor /computers:%%A
  )
  pause

  428 :デフォルトの名無しさん:2016/01/27(水) 06:39:40.57 ID:3u678Fz6
  for /f "delims=, " %%A in ('w32tm /query /source') do ( echo サーバー: %%A
  w32tm /monitor /computers:%%A | findstr "NTP:"
  )
  pause

  429 :デフォルトの名無しさん:2016/01/27(水) 06:50:27.07 ID:3u678Fz6
  for /f "delims=, " %%A in ('w32tm /query /source') do ( echo サーバー: %%A
  for /f "tokens=2" %%B in ('w32tm /monitor /computers:%%A ^| findstr "NTP:"')
  do echo %%B
  )
  pause

  430 :デフォルトの名無しさん:2016/01/27(水) 07:38:45.54 ID:fJiggefa
  >>427, 428
  ありがとうございます.
  表示もスッキリして頂いてとても勉強になります.

  431 :デフォルトの名無しさん:2016/01/27(水) 23:21:20.89 ID:bcAMZw4L
  for /f "delims=, " %%A in ('w32tm /query /source') do for /f "tokens=2
  delims=+s " %%B in ('w32tm /monitor /computers:%%A ^| findstr "NTP:"') do echo
  %%A: %%B

  432 :デフォルトの名無しさん:2016/01/28(木) 13:48:27.48 ID:EDEAMnLy
  「資料%28過去%29」みたいにファイル名にutf-8?が含まれるものを指定してるのですが.
  batを実行するとデコードされて「資料(過去)」と認識されてます.
  「資料%28過去%29」を文字列として認識させるにはどうしたら良いでしょうか.

  433 :デフォルトの名無しさん:2016/01/28(木) 15:22:02.94 ID:hExe5FIX
  >>432
  パーセントエンコードはURIに使うものでbatでデコードはされないと思うな.
  それとは別に.
  batで%は特別な意味を持っていて, 普通は引数や環境変数の中身を見るときに使う.
  echo %1 %hoge%
  とか.
  よって, %2が第2引数を参照してるととられ, 引数指定してなかったら無いので.
  資料8過去9
  とならないとおかしいと思うけど?
  本当に「資料(過去)」となるのなら俺にはその原因は分からない.
  で, 「資料8過去9」となると仮定して%%と重ねて記述すると%になるので.
  資料%%28過去%%29
  でどうかな?
  batの何処にどういう風に使ってるのかわからないので場合によっては.
  %%%%と各必要があるかも知れない.

  434 :デフォルトの名無しさん:2016/01/29(金) 21:46:01.22 ID:j1UQgjYg
  >>431
  ありがとうございます.
  必要な情報だけ一行に集約されてとても見やすいです.
  こういうふうに書けるよう理解を深めたいです.

  435 :デフォルトの名無しさん:2016/01/30(土) 03:15:06.90 ID:hg3OxSOg
  cmd.exe /k @for /f "delims=, " %A in ('w32tm /query /source') do @for /f %B in
  ('2^>null nslookup %A ^| findstr /v :') do ^
  @for /f "tokens=2 delims=+s" %C in ('w32tm /monitor /computers:%A ^| findstr
  "NTP:"') do @echo %A [%B]: %C
  こういうのを"ファイル名を指定して実行"からだと「アクセスが拒否されました」となるのですが.
  コマンドプロンプトを管理者として実行の時と同様の結果にする書き方とか方法があれば教えて下さい.

  436 :デフォルトの名無しさん:2016/01/30(土) 10:20:23.91 ID:zXGU0vQS
  すみません.
  ディレクトリの中を見ていき, 2GB以下なら圧縮ということをしたく.
  対象Dir
  +フォルダ.
  |  +フォルダ(2GB 以下) <- これを圧縮.
  |  |  +ファイル.
  |  +フォルダ(2GB以上)
            +フォルダ(2GB以下)  <- これを圧縮.
            +フォルダ(2GB以上)
  再帰的に見ていった時に, 圧縮していくと最終的に一番上が2GB以下になり.
  全部圧縮されてしまい. どなたかお助けください.

  437 :デフォルトの名無しさん:2016/01/30(土) 23:03:45.58 ID:ffKBMc7H
  再帰で圧縮せずに2GB未満フォルダのリストを作り再帰終了後にリストを元に圧縮.
  どうでも良いけど, 超&以下, 以上&未満な.

  438 :デフォルトの名無しさん:2016/01/31(日) 11:30:04.13 ID:+ngYeOTE
  なるほど, そういうことですか.
  リストを出力して, 最後にそれをパス指定で圧縮と.
  無駄に再帰でやろうとしすぎていました. ありがとうございます.

  439 :デフォルトの名無しさん:2016/02/06(土) 10:40:05.52 ID:hbtVaDtk
  あるURLhttp://AAAAAA/BBBBB/CCC・・・ を引数%1として,
  http://AAAAAA/だけを取り出す方法が知りたいです.
  (3つ目の/までの文字列を取り出したい)
  よろしくお願いします.

  440 :デフォルトの名無しさん:2016/02/06(土) 11:56:20.12 ID:ilYyGYOR
  >>439
  @echo off
  set arg1=%~1
  @for /f "tokens=1, 2 delims=/" %%i in ("%arg1%") do set domain1=%%i//%%j/
  echo %domain1%
  set arg1=%~1
  set Scheme=%arg1://=&set arg1=%
  set domain2=%arg1:/=&set dummy=%
  echo %Scheme%//%domain2%/

  441 :デフォルトの名無しさん:2016/02/06(土) 12:13:31.62 ID:hbtVaDtk
  >>440
  作りたかったものが作れました.
  ありがとうございます.

  442 :デフォルトの名無しさん:2016/02/07(日) 03:34:31.41 ID:xzt+ySx/
  0001〜9999までをカウントするのってどうやればいいですか.
  常に4桁の文字列が得られるようにしたいです.

  443 :デフォルトの名無しさん:2016/02/07(日) 03:59:09.24 ID:S13nymNF
  >>442
  echo %random% を使う.
  0, 10000以上であればやり直す.

  444 :デフォルトの名無しさん:2016/02/07(日) 04:06:32.80 ID:oI7YLQ9S
  >>442
  質問の意味がいまいち不明だがこういうことか?
  @echo off
  for /l %%i in (0, 1, 9999) do (
  call set cnt=000%%i
  call echo %%cnt:~-4%%
  )
  set n=0
  :loop
  set cnt=000%n%
  echo %cnt:~-4%
  set /a n+=1
  if %n% lss 10000 goto :loop

  445 :デフォルトの名無しさん:2016/02/07(日) 15:37:11.81 ID:YEUGR+cI
  for /L %%i in (10001, 1, 19999) do (set ct=%%i
  call echo %%ct:~-4%%)
  set a=10001
  :LOOP
  echo %a:~-4%
  set /a a+=1
  if %a% LEQ 19999 (goto :LOOP) else exit /b

  446 :デフォルトの名無しさん:2016/02/07(日) 16:38:16.87 ID:7II1MwkR
  コマンドの実行結果を環境変数(value)に格納すべく,
  for /f %%i in ('コマンド') do set value=%%i としたとき,
  コマンドの処理時間が長いと完全に沈黙しちゃうので何とかしたいのだけど,
  コマンドを単独で実行した時にコンソール上に表示される実行中の情報.
  (進行状況とか)を表示する方法ってないかな?

  447 :デフォルトの名無しさん:2016/02/07(日) 17:41:06.71 ID:oI7YLQ9S
  >>446
  どうしてもって言うのなら, ファイルをフラグに使うとなんとかなるかな.
  @echo off
  set f=%temp%\result
  start /b コマンド>%f%
  set n=0
  call :wait %f%
  if %errorlevel% neq 0 goto :timeout
  for /f "tokens=*" %%i in (%f%) do echo %%i
  del %f%
  goto :eof
  :timeout
  goto :eof
  :wait
  if %~z1 gtr 0 exit /b 0
  ping -n 2 localhost >nul
  set /a n+=1
  echo 処理中(%n%秒)
  if %n% leq 10 goto :wait
  echo timeout
  exit /b 1

  448 :デフォルトの名無しさん:2016/02/07(日) 17:51:21.78 ID:oI7YLQ9S
  別の方法として.
  tasklistからコマンドが消えるのを監視するのがいいかも.
  さらには, 別batでコマンドを起動し, 終了時にタスクなり他ソフトなりを起動して.
  何らかのアクションを起こし, それを監視するとか.

  449 :デフォルトの名無しさん:2016/02/07(日) 20:46:37.41 ID:csmRYXFo
  https://www.google.co.jp/#q=tee+%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89+windows

  450 :446:2016/02/08(月) 00:34:24.61 ID:tvZTUQzk
  >>447-448
  やはりちょっと別の工夫が必要なんだねぇ.
  一応, 当該コマンドの処理.
  (通常のファイル操作に加えて, 標準エラー出力からの文字列を整形したものを環境変数に格納)
  が終わったら格納した環境変数を使ってまた別のコマンドを実行していて,
  その時にエラーレベル判定は行われるので,
  すんなり行けば, 次のコマンド(ここで"echo 中間処理終了")で, その程度での経過は分かるから,
  申し訳ないけど, そのままで妥協しておこうかな.
  >>449
  同時でなくていい場合なら, 標準エラー出力のほうを一度ファイルにして,
  改めてtypeで読み込んで整形して環境変数に格納というのでも出来そう.
  teeをLinux(Cygwinでも)で使ったことはあって, Cygwinのbashスクリプトでやっちゃおうか, とも思ったんだけど,
  とりあえずどのWindows環境でも使えるということで, ハマってしまいました.
  ただ, findstrが文字数オーバーでエラーが出るサンプルがあって,
  結局grep使っちゃったから, あまり意味が無いかも. w.
  御二方, どうもありがとう.

  451 :デフォルトの名無しさん:2016/02/08(月) 01:25:16.89 ID:DULBP8IA
  >>450
  tasklistの結果からそのコマンドのイメージ名が消えるまで適当に表示させながら.
  ループさせるんじゃいけないの?
  また, >>447のエラーレベルって蛇足的な処理じゃん.
  無くても問題ない.
  該当コマンドってのが自分でカスタマイズできるんならリダイレクトも不要.
  そのコマンドの終了時点でフラグ的なファイルに書き込めばいい.

  452 :デフォルトの名無しさん:2016/02/08(月) 01:29:33.68 ID:T6p//Vzm
  >>447 さんが書いているように, ファイルを使うのが簡単かな.
  コマンドの最後でファイルを作り,
  batでは if exist でそのコマンドができるのを待つ, なかったら timeoutで待つループ.

  453 :デフォルトの名無しさん:2016/02/08(月) 01:30:33.89 ID:T6p//Vzm
  >>451
  あ, ダブった.

  454 :デフォルトの名無しさん:2016/02/08(月) 01:36:07.46 ID:IaYL4Dgo
  >findstrが文字数オーバーでエラーが出るサンプルがあって.
  もうバッチの範疇外じゃないのかな?どのWinでもって事ならWSHかPowerShellを勧めるよ.

  455 :デフォルトの名無しさん:2016/02/08(月) 01:43:25.70 ID:IaYL4Dgo
  あと通常のファイル操作って言ってもそんな事になるくらいのかなりの量を処理しているならロジック自体を見直した方が良い気がする.

  456 :デフォルトの名無しさん:2016/02/08(月) 01:46:27.75 ID:U7IijhSa
  title 処理中です. ウィンドウは絶対に閉じないでください.
  echo 処理中です. ウィンドウは絶対に閉じないでください.
  でいいじゃん.
  ちょっと応答不能になっただけで速攻ウィンドウ閉じる奴って.
  結構多いけど理解に苦しむ.

  457 :446:2016/02/08(月) 21:23:57.31 ID:4qV7ShMX
  >>451-456
  問題のコマンドについて, 今まで標準エラー出力から文字列を抽出していたけど,
  環境変数でファイルパスを別途加える事でログをファイルに出力できることがわかったので,
  コマンドの処理は通常通りおこなって(コンソールに経過他の情報が表示される),
  その終了後, 改めてログファイルから文字列を読み込んで環境変数代入を処理することで,
  経過情報を表示しながら for /F や tee と同じ目的を数行で達することが出来たよ.
  コマンド実行と環境変数代入を同時に処理するということにこだわりすぎたかな.
  みなさん, お付き合いいただき, どうもありがとう.

  458 :デフォルトの名無しさん:2016/02/08(月) 21:58:26.82 ID:aeLE2jq+
  >>456
  高度なプログラムが動き出しちゃうときあるから.

  459 :デフォルトの名無しさん:2016/02/10(水) 23:06:13.15 ID:rMhx/tnP
  コピーする時 if exist であったら適当に名前変えてコピーしてたんだけど.
  そもそも, 重複時自動的にリネームしつつコピーしてくれるちょっと便利コマンドって.
  どこかにありそうな気がしたので, そんなコマンド(プログラム)教えてください.

  460 :デフォルトの名無しさん:2016/02/11(木) 01:24:38.76 ID:xppsr9es
  重複時, 上書き?リネーム?
  リネームするならコピー元?コピー先?
  リネームの形式は連番?日時?
  これらをコマンドラインオプションで設定出来る非対話形式なcuiコピーツールがあっても良いなって思うけど.
  バッチ側の少しの手間で実現出来るからわざわざ外部ツール導入するのは躊躇われるな.
  firefilecopyにそれっぽい設定があった気がするけど使ってたの何年も前なので覚えてないわ.

  461 :デフォルトの名無しさん:2016/02/11(木) 10:17:29.10 ID:E36uRHTx
  >>460
  > これらをコマンドラインオプションで設定出来る非対話形式なcuiコピーツール.
  まさしくそういうツールが欲しいなと思った訳でして, firefilecopy 試してみたところ.
  連番などの指定ができない, 既にリネーム済みのものがあった時に自動的に.
  処理できない模様で目的に合致せず, 無念.
  linux 系のツールならと思ってググッてみても, cp だと拡張子が維持できない suffix の.
  付け方になってしまうなど, 調度良いのが今のところ発見できず・・・・・・.

  462 :デフォルトの名無しさん:2016/02/15(月) 13:55:49.70 ID:wQ6idclh
  "コマンドラインでファイルやフォルダを名前に「コピー (n) 〜 」を付けて複製する. "
  でぐぐって見つかるバッチを条件が合致した際にcallするとか.
  スクリプトだからリネーム条件なんかはカスタマイズも可能かと.

  463 :デフォルトの名無しさん:2016/02/15(月) 14:13:15.78 ID:NpLlCTmp
  ffcかなんかは結構細かいコマンドラインオプションを受け付けてたから.
  それでコピーしつつログ解析して必要ならナンバーか日付つけてのリネームコピーするとかやればいいんじゃないの.

  464 :459:2016/02/15(月) 21:36:25.85 ID:CcVUGHWP
  気を使わせて申し訳ありません.
  現状として, コピーする時に同名ファイルがある時には名前を変えてコピーするのは.
  既にバッチファイルで実現していて, 同じことを手軽に便利に出来る単独の CUI な.
  ツール, プログラムがあれば, というよりあるに違いない, と思ったのが >>459 の.
  質問だったわけです.

  465 :デフォルトの名無しさん:2016/03/11(金) 22:12:34.63 ID:g0a/JI38
  バッチ中のcopy file1 file2 は copy "file1" "file2" と書くべき.
  file1 file2が+で始まる場合 ""で囲んでいないとcopyされない.

  466 :デフォルトの名無しさん:2016/03/15(火) 00:41:28.28 ID:8utBFAR1
  バグ技, 面白ネタなどあれば投下お願いします.

  467 :騙し髪:2016/03/15(火) 01:32:32.69 ID:ZWMv0nUc
  >>466
  これなど如何?
  ::<-全角254文字が限界->
  動く.CMD
  rem /; ::0123456789ABCDEFGHIJKLMを11回書く+0 [*] 最後の0が254文字目.
  ::0123456789ABCDEFGHIJKLM012345678・・・0
  :LOOP
  @ECHO;LOOP
  @PAUSE
  GOTO :LOOP
  こちらは, GOTO :LOOP で止まります.
  止まる.CMD
  rem /; ::0123456789ABCDEFGHIJKLMを11回書く+01 [*] 最後の1が255文字目.
  ::0123456789ABCDEFGHIJKLM012345678・・・01
  :LOOP
  @ECHO;LOOP
  @PAUSE
  GOTO :LOOP

  468 :デフォルトの名無しさん:2016/03/16(水) 09:25:21.97 ID:6gvLipIQ
  mshta
vbscript:close(Execute("CreateObject(""SAPI.SpVoice"").Speak""nurupo"""))

  469 :デフォルトの名無しさん:2016/03/20(日) 13:25:19.72 ID:pvWacbTU
  @echo off
  start "" "%~f0"
  start "" "%~f0"
  exit /b 0

  470 :デフォルトの名無しさん:2016/04/02(土) 01:38:35.14 ID:SZPhSxIw
  BashシェルをWindowsに搭載するWindows 10大型アップデート.
  http://gigazine.net/news/20160331-microsoft-build-10-important-announcements/
  これでバッチを使う必要がなくなればいいな.

  471 :デフォルトの名無しさん:2016/04/03(日) 19:00:37.30 ID:+cm4a62/
  人によってはbatで使うかも.
  http://www.horstmuc.de/wcon.htm

  472 :デフォルトの名無しさん:2016/04/04(月) 03:27:50.00 ID:UUnGIXWs
  これって正式な機能?それともラベルを悪用しただけ?
  In a batch file REM at the start of a line signifies a comment or REMARK,
  alternatively adding :: at the start of a line has a similar effect.
  Rem - Comment | Windows CMD | SS64.com
  http://ss64.com/nt/rem.html
  @ECHO OFF
  ::
  :: First comment
  REM Second comment
  REM

  473 :デフォルトの名無しさん:2016/04/04(月) 03:48:54.12 ID:TBgct8lK
  similar effectってあるように同様の効果があるってだけ.
  ラベル機能をコメントとして使うのは昔からある手法.

  474 :デフォルトの名無しさん:2016/04/04(月) 03:50:07.49 ID:TBgct8lK
  でも俺は.
  ::comment
  というように:を2つ連ねるけどね.

  475 :デフォルトの名無しさん:2016/04/10(日) 15:46:04.10 ID:wyM3R/Jw
  for /f

  476 :デフォルトの名無しさん:2016/04/10(日) 16:11:22.77 ID:wyM3R/Jw
  "
  for /f "delims=" %%a in (hoge.txt) do
  このコマンドで1つのファイルから交互に2つの変数に中身を代入できないでしょうか.
  *hoge.txt*
  ほげ1
  ajairhioa
  ほげ2
  aj329jagjal
  これを%%aにはほげ1ほげ2, %%bにはajairhioa, aj329jagjalを順次代入したいです.
  "

  477 :デフォルトの名無しさん:2016/04/10(日) 17:35:06.95 ID:DGt37MFb
  set cnt=0
  for /f "delims=" %%a in (hoge.txt) do call :sub %%a
  for /f "tokens=1* delims=, " %%a in (hogehoge.txt) do echo %%a %%b
  pause &exit /b
  :sub
  if %cnt%==0 (
  set LN=%1
  set /a cnt+=1
  exit /b
  )
  >>hogehoge.txt echo %LN%, %1
  rem [上矢印]ファイルに書き出す事に不都合があるなら[下矢印]
  rem for /f "tokens=1* delims=, " %%a in ("%LN%, %1") do echo %%a %%b
  set cnt=0

  478 :デフォルトの名無しさん:2016/04/10(日) 18:06:01.41 ID:DGt37MFb
  rem 3行毎.
  set cnt=1
  for /f "delims=" %%a in (hoge.txt) do call :sub %%a
  for /f "tokens=1, 2* delims=, " %%a in (hogehoge.txt) do echo %%a %%b %%c
  pause &exit /b
  :sub
  if %cnt% LSS 3 (
  set LN=%LN%, %1
  set /a cnt+=1
  exit /b
  )
  >>hogehoge.txt echo %LN%, %1
  set LN=
  set cnt=1

  479 :デフォルトの名無しさん:2016/04/10(日) 20:10:23.92 ID:R4xtJDTH
  wsh併用だと.
  @if (0)==(0) echo off
  for /f "tokens=1, 2 delims=, " %%a in ('cscript.exe //nologo //e:jscript
  "%~f0"^<hoge.txt') do (
  echo %%a , %%b
  )
  goto :eof
  @end
  var StdIn=WScript.StdIn;
  while (!StdIn.AtEndOfLine){
  var s=StdIn.ReadLine();
  if(!StdIn.AtEndOfLine) WScript.Echo(s+", "+StdIn.ReadLine());
  }

  480 :デフォルトの名無しさん:2016/04/11(月) 21:54:33.79 ID:Vzz4aFRc
  >>477-479
  バッチまったくの初心者であまりわかりませんでしたがありがとうございます.
  なにか初心者向けで体系的に学べるサイトとかありますかね?

  481 :デフォルトの名無しさん:2016/04/11(月) 21:58:42.43 ID:Vzz4aFRc
  >>477-479
  バッチまったくの初心者であまりわかりませんでしたがありがとうございます.
  なにか初心者向けで体系的に学べるサイトとかありますかね?

  482 :デフォルトの名無しさん:2016/04/11(月) 21:59:22.47 ID:Vzz4aFRc
  書き込んでないと思って連投してしまいましたすみません.

  483 :デフォルトの名無しさん:2016/04/11(月) 22:40:01.79 ID:OwO3FuPu
  PowerShell_ISE で, やった方がいいよ.

  484 :デフォルトの名無しさん:2016/04/11(月) 22:59:56.31 ID:Vzz4aFRc
  powershellはchecksum使う時くらいしか使わないんですが, powershellのほうが初心者には使いやすいのでしょうか?

  485 :デフォルトの名無しさん:2016/04/11(月) 23:11:45.22 ID:kHX/TE9c
  >>484
  はい.

  486 :デフォルトの名無しさん:2016/04/12(火) 00:30:07.81 ID:cKwKVfMZ
  powershellはファイル属性を変えるときだけ使っている.
  テンポラリー属性ってcmdからだと変更できないよね.

  487 :デフォルトの名無しさん:2016/04/12(火) 00:31:51.05 ID:iN7RaFvn
  PowerShell_ISE で,
  $i=0
  $evenStr=''
  $oddStr=''
  $ary = (cat hoge.txt) -as [string[]]
  foreach ($line in $ary) {
  if($i % 2 -eq 0){
  $evenStr += $line
  }else{
  $oddStr += $line
  }
  $i++
  }
  Write-Output $evenStr, $oddStr
  入力.
  1
  2
  3
  4
  5
  出力.
  135
  24

  488 :デフォルトの名無しさん:2016/04/12(火) 04:11:38.82 ID:mqOre39w
  バッチファイル今から覚えるのは無駄すぎる.
  せめてvbsにした方がいい.

  489 :デフォルトの名無しさん:2016/04/12(火) 05:40:07.79 ID:Hl1a/qVy
  覚えるってほど御大層なモノじゃねーじゃん.
  精々 %1 && >> とかの幾つかのお約束事と最初に躓くコマンドはforくらい.
  他のコマンドやオプションはggってリファレンス見ればいいんだし.
  echo pause set if for call goto start move xcopy ren del dir findstr
  これだけ知ってればちょっとしたファイル操作に便利だし他に比べハードル低いよ.
  複雑な事をするにはバッチは向かないし制約もあるから他が良いのは間違いないけど.

  490 :デフォルトの名無しさん:2016/04/12(火) 08:15:23.59 ID:smwPn8rR
  他のを覚えてからでも遅くはないかな.

  491 :デフォルトの名無しさん:2016/04/12(火) 08:40:26.31 ID:xYAotuK9
  ちょっと凝ったことしようとしたらいきなり面倒になったり.
  トラップもそれなりにあるし.
  わざわざ覚える言語ではないと思う.
  bash 並みになればまだいいんだが.

  492 :デフォルトの名無しさん:2016/04/12(火) 10:03:04.09 ID:W9B2ZLoA
  今から覚えるにはちょっと・・・というのは解かるんだが.
  一番簡単なものだし, ちょこっとやる分には良いとっかかりになると思うよ.
  ヘルプ読むだけで十分概要はわかるしね.
  それから何にいくのかは, 自分が何に興味あるかで決めればいい.

  493 :デフォルトの名無しさん:2016/04/12(火) 22:44:22.00 ID:N5k4ywKZ
  皆さんありがとうございます.
  cmdは少し学んで, その後win10に向けてshellを学ぼうかなと思います.

  494 :デフォルトの名無しさん:2016/04/29(金) 16:15:40.02 ID:Du8RELkw
  ワイルドカード指定で否定は出来る?
  例えば「指定フォルダ以下に存在する拡張子がtxt"以外"のファイルを全て削除(サブフォルダ含む)」
  みたいな事をやりたいんだけど.

  495 :デフォルトの名無しさん:2016/04/29(金) 21:30:07.02 ID:nOk/Iq10
  >>494
  そういう場合は.
  for /f %%i in ('dir "%1" /a-d /b /s | findstr /r /i /c:".txt\>"') do del %%i
  というバッチを書いて第一引数に指定フォルダを渡せばいいんじゃないの??

  496 :デフォルトの名無しさん:2016/04/29(金) 21:35:10.00 ID:nOk/Iq10
  間違えた.
  for /f %%i in ('dir "%1" /a-d /b /s | findstr /r /i /v /c:".txt\>"') do del
%%i
  だった.

  497 :デフォルトの名無しさん:2016/04/29(金) 23:27:50.12 ID:Du8RELkw
  ワイルドカードで否定な指定は無理なのか.
  ありがとう. ちょっと検討しなおしてみる.

  498 :デフォルトの名無しさん:2016/04/30(土) 22:24:06.87 ID:HLsp90ue
  >>497
  ワイルドカードで否定, というより・・・.
  hoge.txt hoge.doc hoge.xls ・・・ とあったとしてだよ.
  .txt 以外の拡張子を持つファイル, という指定は Linux の bash でも 1コマンドでは出来ないよ??
  とりあえず, 俺の知る限りのコマンドラインシェルでは出来ない.

  499 :デフォルトの名無しさん:2016/05/01(日) 02:14:20.07 ID:f7rDjALb
  除外指定と言いたいのだろうけど三国人か?
  496弄れば除外設定の拡張子もサブフォルダ以下を含めるかも引数で指定出来るようになるだろうに何か問題あるの?

  500 :デフォルトの名無しさん:2016/05/01(日) 08:38:28.34 ID:4tDBI2/Z
  正規表現だと否定って言うのは普通に使うから別に違和感ないけどね.
  それ以前にいきなり三国人とか言い出す癖直した方がいいと思うよ.

  501 :デフォルトの名無しさん:2016/05/01(日) 11:19:50.80 ID:tKi6j9CT
  匿名通信(Tor, i2p等)ができるファイル共有ソフトBitComet(ビットコメット)みたいな,
  BitTorrentがオープンソースで開発されています.
  言語は何でも大丈夫だそうなので, P2P書きたい!って人居ませんか?
  Covenantの作者(Lyrise)がそういう人と話したいそうなので, よろしければツイートお願いします.
  https://twitter.com/Lyrise_al
  ちなみにオイラはCovenantの完成が待ち遠しいプログラミングできないアスペルガー. w.
  The Covenant Project
  概要.
  Covenantは, 純粋P2Pのファイル共有ソフトです.
  目的.
  インターネットにおける権力による抑圧を排除することが最終的な目標です. そのためにCovenantでは, 中央に依存しない,
  高効率で検索能力の高いファイル共有の機能をユーザーに提供します.
  特徴.
  Covenant = Bittorrent + Abstract Network + DHT + (Search = WoT + PoW)
  接続は抽象化されているので, I2P, Tor, TCP, Proxy, その他を利用可能です.
  DHTにはKademlia + コネクションプールを使用します.
  UPnPによってポートを解放することができますが, Port0でも利用可能です(接続数は少なくなります)
  検索リクエスト, アップロード, ダウンロードなどのすべての通信はDHT的に分散され, 特定のサーバーに依存しません.
  .

  502 :デフォルトの名無しさん:2016/05/01(日) 15:01:02.76 ID:gt2lBnxw
  一般的ではないが, bash他にはそれっぽい拡張があるといえばある>否定.
  shopt -s extglob; ls !(*.txt)

  503 :デフォルトの名無しさん:2016/05/01(日) 20:56:52.01 ID:w3ycpbWL
  >>500
  それで思い出したけど, ワイルドカードにはそもそも否定, っていう概念が無いのよね.
  >>502
  それは知らなかったぜ・・・. が, やっぱ拡張であって1コマンドじゃないのね.

  504 :デフォルトの名無しさん:2016/05/02(月) 11:40:31.88 ID:ZqwyA4jL
  xcopyだと /EXCLUDE で除外したいパスを指定できるけど.
  そういえば他のコマンドでは無いよね.

  505 :デフォルトの名無しさん:2016/05/09(月) 14:25:03.70 ID:LpHkpPcH
  >>500
  > 正規表現だと否定って言うのは普通に使うから別に違和感ないけどね.
  普通に使う??
  否定の正規表現がどのくらい面倒臭い代物か知ってて言ってんのかよ.

  506 :デフォルトの名無しさん:2016/05/09(月) 20:31:48.60 ID:4hkTezx/
  >>505
  若いなお前.

  507 :デフォルトの名無しさん:2016/05/11(水) 20:07:41.82 ID:+ByNjd23
  >>505
  お前は正規表現の前に日本語を勉強すべき.

  508 :デフォルトの名無しさん:2016/05/15(日) 23:09:30.40 ID:0PD+6ouG
  Windows10 でコマンドプロンプトの透明度(不透明度)が設定できますが.
  color で色を変えるように, 透明度の変更をコマンドでやるには.
  どうすれば良いでしょうか?

  509 :デフォルトの名無しさん:2016/06/06(月) 05:31:09.64 ID:/VUqLFGt
  フォルダ内に含まれるファイル名(若いファイル名)を取得して, そのファイル名.
  をフォルダ名としてリネームすることはできないのでしょうか?
  * フォルダ1
  +ファイル1
  +ファイル2
  * フォルダ2
  +ファイル3
  +ファイル4
  といったフォルダ構造があったばあい,
  * ファイル1
  +ファイル1
  +ファイル2
  * ファイル3
  +ファイル3
  +ファイル4
  といった感じにリネームしたいんです.
  ヒントがあれば教えてください.

  510 :デフォルトの名無しさん:2016/06/06(月) 05:36:07.56 ID:mrKNlhKB
  >>509
  再帰呼び出し.

  511 :デフォルトの名無しさん:2016/06/06(月) 05:59:54.20 ID:JVcEODJX
  ソフ板の libre office スレで聞いていた人かな, あっちではスレを移動するとの.
  断りも何もせず放置したように移動してきてるみたいだけど.
  別人ならごめん.
  結果的に同名のフォルダとなる場合のリネームのルールさえ決めておけば.
  for でやってもそんなに難しくはない.

  512 :デフォルトの名無しさん:2016/06/06(月) 06:39:56.64 ID:/VUqLFGt
  >>510
  ファイル名をフォルダ名にリネームしている, 参考ページがあれば教えてもらえないですか?
  >>511
  別人ではないですよ.
  forを使う場合は, どうやるんでしょうか?
  サンプルが載ってるページがあれば教えてください.

  513 :デフォルトの名無しさん:2016/06/06(月) 07:38:12.87 ID:mIdKUrWt
  >>512
  こんな感じ.
  @echo off
  for /f "delims=" %%i in ('dir /b /on /ad') do (
  for /f "delims=" %%j in ('dir /b /o-n /a-d "%%~i"') do set name=%%~j
  call ren "%%~i" "%%name%%"
  )
  フォルダ名の重複によるリネームエラーを変名してリトライするなら.
  上の, call ren "%%~i" "%%name%%" を.
  set src=%%~i
  call set dst=%%name%%
  call :ren
  の3行に代えて下を追加(引数渡しでなく環境変数渡しなのは, 特殊な文字の変換をなるべく防ぐため)
  goto :eof
  :ren
  ren "%src%" "%dst%" 2>nul
  set suffix=1
  if %errorlevel% equ 0 goto :eof
  :loop
  ren "%src%" "%dst% (%suffix%)" 2>nul
  set /a suffix+=1
  if %suffix% gtr 10 echo ***打ち切り***&goto :eof
  if %errorlevel% neq 0 goto :loop
  goto :eof

  514 :デフォルトの名無しさん:2016/06/06(月) 08:36:49.68 ID:/VUqLFGt
  [上矢印]回答ありがとうございます. 自分には理解できないので.
  調べて読み解いて, 理解できあなかったらまた質問させてもらいます.

  515 :デフォルトの名無しさん:2016/06/06(月) 12:24:37.84 ID:/VUqLFGt
  [上矢印]無事動作しました.
  ありがとうございました.
  今まで, 相当に無駄な作業してました.

  516 :デフォルトの名無しさん:2016/06/06(月) 15:17:54.02 ID:mIdKUrWt
  >>515
  余計なことかも知れないが, 空のフォルダがあった場合に変になるのでそのフォルダはリネームしないことにすると以下のようになる.
  @echo off
  pushd %1
  for /f "delims=" %%i in ('dir /b /on /ad 2^>nul') do (
  call set folder=%%~i
  call :search_file
  call :ren
  )
  popd
  goto :eof
  :search_file
  set fname=
  for /f "delims=" %%j in ('dir /b /on /a-d "%folder%" 2^>nul') do set
  fname=%%~j&goto :eof
  goto :eof
  :ren
  if not defined fname goto :eof
  set suffix=1
  ren "%folder%" "%fname%" 2>nul
  :retry
  if %errorlevel% equ 0 goto :eof
  ren "%folder%" "%fname% (%suffix%)" 2>nul
  set /a suffix+=1
  if %suffix% gtr 10 echo ***打ち切り(%folder%)***&goto :eof
  goto :retry

  517 :デフォルトの名無しさん:2016/06/06(月) 17:00:29.53 ID:mIdKUrWt
  訂正.
  call set folder=%%~i
  for /f "delims=" %%j in ('dir /b /on /a-d "%folder%" 2^>nul') do set
  fname=%%~j&goto :eof
    [下矢印]
  set folder=%%~i
  for /f "delims=" %%j in ('dir /b /on /a-d "%%folder%%" 2^>nul') do set
  fname=%%~j&goto :eof

  518 :デフォルトの名無しさん:2016/06/06(月) 19:49:58.32 ID:wj+hntm6
  >>515
  相当に無駄なスレ違いの質問はクローズしよう.
  http://potato.2ch.net/test/read.cgi/software/1446733472/665

  519 :デフォルトの名無しさん:2016/06/06(月) 20:27:13.87 ID:kp8pJweP
  libre office スレのもんだけど.
  マルチ宣言してる奴に快く回答するとか.
  まじクズっすねー.

  520 :デフォルトの名無しさん:2016/06/08(水) 21:05:04.00 ID:rpxHmTxH
  >>516
  そこはかとなくダサい気がするのだがうまく言えなくてもどかしい.

  521 :デフォルトの名無しさん:2016/06/08(水) 21:09:54.69 ID:rpxHmTxH
  >>519
  面白い課題や面白い発見自身に罪は無い.
  それを提示した人間がたとえ殺人者でも, その課題や発見自身は俺は歓迎する.
  もし, Libre Office の開発者の一人が殺人を犯したからといってお前は Libre Office を使うのを止めるか?
  止めるのであれば非難していただいて結構.

  522 :デフォルトの名無しさん:2016/06/08(水) 22:04:51.84 ID:sUmK8XFr
  >>521
  その例えはおかしいね.
  マルチ質問に返答するのはマナー違反って話なんだから.
  つーか例える必要ないでしょ.
  マルチ質問に答えることがマナー違反ではない理由を言えばいいだけだ.

  523 :デフォルトの名無しさん:2016/06/08(水) 22:23:27.09 ID:rpxHmTxH
  >>522
  > マルチ質問に返答するのはマナー違反って話なんだから.
  間違い.
  1. マルチ投稿は迷惑かもしれないが, 課題としては良問と思った. 情状酌量の余地あり.
  2. マルチ投稿に答えるのがマナー違反だという話は聞いたことがない.
  3. 別板からわざわざ出張って「**のもんだけど」とか言われてもシラネ. 掲示板のルール無視. それこそ893まがいの行為.

  524 :デフォルトの名無しさん:2016/06/08(水) 22:29:07.11 ID:rpxHmTxH
  >>522
  お前がインターネットのルールブックなわきゃねぇんだ. マナーだのなんだのごたくヌカすな.
  >>516
  全体的にエラー処理まわりが気になるけど, そこは置いとく.
  ren じゃなくて move じゃない?ren にすごく違和感・・・.

  525 :デフォルトの名無しさん:2016/06/08(水) 22:34:56.16 ID:sUmK8XFr
  >>523
  1. あなたがそう思うのは勝手だけどそれに対してクズと呼ばれるのは仕方ないこと.
  2. マナー違反を受け入れるのもマナー違反なのは当然.
  3. 俺に言われても知らん.
  あとさ, 例えが例えになってないことについてどう思ってんの?

  526 :デフォルトの名無しさん:2016/06/08(水) 22:49:05.28 ID:JbG4hFO7
  わざわざ出張ってこなくていいから大人しく返ってくれ.
  このスレは過去を見てもわかるように, 親切な人間達が回答してくれる珍しいスレなんだからさー.

  527 :デフォルトの名無しさん:2016/06/09(木) 00:29:49.83 ID:mVcmv6vY
  向こうのスレ見てきて状況がわかった.
  マルチって言ってるけど, 向こうで最後に書いてから半日経ってからこっちに書いてるじゃん.
  それになんだか追いだされたように見える.
  まあ, さよなら, を言わずに出てったのは礼儀知らずかもしれないが.
  そんなのは世の中にいっぱいいるんで今更事たてて言うほどじゃないな.

  528 :デフォルトの名無しさん:2016/06/09(木) 00:38:52.14 ID:M1aHpfX0
  setlocal
  cd フォルダ.
  endlocal
  でせっかくcdしても元に戻ってしまう.

  529 :デフォルトの名無しさん:2016/06/09(木) 00:56:26.88 ID:mVcmv6vY
  >>528
  setlocalはそういうもんだから.
  逆に環境が引き継がれちゃったらsetlocal使う意味が無くなる.
  そういうことやりたかったら,
  setlocal
  set result=999
  〜.
  endlocal&set result=%result%&cd フォルダ.
  ってやると, 環境変数を返すことも出来る.

  530 :デフォルトの名無しさん:2016/06/09(木) 01:29:34.62 ID:M1aHpfX0
  >>529
  ありがとうございます.
  そんな高度な技ができるとは知らなかったです.

  531 :デフォルトの名無しさん:2016/06/09(木) 02:52:40.71 ID:3N2Gwx2N
  >>520
  suffixとかかな.
  for /f "delims=" %%j in ('dir /a-d /b "%folder%" 2^>nul ^|^|goto :eof') do ren
  "%folder%" "%%~nj" &&goto :eof
  でren出来なかった場合のみerrorlog吐くとかの方がスマートかも.
  まあバッチだし. . 細かいとこ凝るならpsとかの方が.

  532 :デフォルトの名無しさん:2016/06/09(木) 14:01:20.29 ID:mVcmv6vY
  >>531
  for /f "delims=" %%j in ('dir /a-d /b "%%folder%%" 2^>nul ^|^|goto :eof') do
  ren "%folder%" "%%~nj" &&goto :eof

  533 :デフォルトの名無しさん:2016/06/09(木) 14:12:43.69 ID:mVk0iXAO
  > マルチ質問に返答するのはマナー違反って話なんだから.
  質問がマナー違反なんて話は知られてるが.
  返答がマナー違反なんて初めて聞いたけど, 誰かソース知ってる人いる?
  この人の妄想かな.

  534 :デフォルトの名無しさん:2016/06/09(木) 16:04:09.94 ID:Et4Ks3FV
  こんなところで他人に何かを求めたりルールやマナーを押し付けるのは愚行.
  自分がレスしたきゃするし興味無いならスルー.
  自治厨ってのは自分の耐性の低さを尤もらしい大義名分で誤魔化しているだけに過ぎない.
  自治厨や創価みたいな制裁厨は荒らしと同じゴミ.

  535 :デフォルトの名無しさん:2016/06/10(金) 08:47:12.85 ID:7xQ2IbxD
  >>533
  返答しちゃうとマルチでいいんだ.
  って勘違いする奴がいるってことだろ.
  普通それぐらいわかると思うが...

  536 :デフォルトの名無しさん:2016/06/12(日) 22:53:45.89 ID:T3khqEs4
  >>535
  普通と言われても, それを実際に文章で目にした記憶ないんだよな.
  ソース張れるか?妄想URLじゃなくてさ.
  クロスポストマルチポストという言葉が生まれたニュースネットならまだしも.
  個々のスレで関連性の無い2chだと正直どうでもいい.
  ていうか今ニュースネットってどうなってるんだろ. まだあるんかな?

  537 :デフォルトの名無しさん:2016/06/12(日) 23:23:12.75 ID:Dejri5g9
  >>536
  理解力ないってこと?

  538 :デフォルトの名無しさん:2016/06/12(日) 23:29:33.63 ID:nN2o7Cuz
  誰と闘ってるの.

  539 :デフォルトの名無しさん:2016/06/13(月) 02:21:55.70 ID:bKXy9+E3
  マルチがマナー違反なら答えないほうが良いと思うが普通の考えだと思う.
  所詮はマナーだからもう終了しろ.

  540 :デフォルトの名無しさん:2016/06/16(木) 16:19:50.79 ID:Y8ybIIT3
  マナー違反として問題になるならあっちこっちで.
  これがダメあれがダメとダメ出しのソースが出るんだよ.
  マルチポストする方に関しては検索するとボロボロ出てくるだろ.
  しかしこれがマルチポストに回答する事に関しては出てこんのだよな.
  これの意味するところはつまりそこまで問題ではない, 問題にする人はいないってこった.
  回答する気が無いならしなければいいだけ.
  回答した人に対してマナー違反だ回答するな等と文句付けるのは何様?筋違いだと思うね.
  ぶっちゃけ俺も気にしないし. 気にする人見たら今のように珍しいなあと思うな.

  541 :デフォルトの名無しさん:2016/06/16(木) 16:49:06.61 ID:pl2Ydjf9
  おまえらしつけーよ.
  下らないスレチネタで議論する暇があったら面白バッチネタの一つでも書きやがれ.
  で, PowerShellってどうよ?

  542 :デフォルトの名無しさん:2016/06/16(木) 17:50:03.03 ID:dWCIrllM
  Power Shellにはなんか食指が動かない(XP使ってるんで)
  まあ簡単な奴以外はwsh(jscript)を使うな.
  でも今Rubyが面白いかもって思ってる(Perlも入れたけどそっちは殆ど手付かず)
  .JScriptの中からScriptControlでRubyScriptの関数をCALLするとか変態的なことを試してるところ.
  (.rbで作って, .js(.wsf)に埋め込むっていう非効率的な作業をやってる)

  543 :デフォルトの名無しさん:2016/06/16(木) 23:14:35.32 ID:oJOkyOjy
  パワーシェルは出来る事も多いし. 痒いとこ(チンポじゃないよ)にも手が届くけど.
  なんとなくバッチ組めちゃうdosコマンドに比べたら難しく感じちゃうな.
  ただ複数のアプリの同時起動が簡単に出来るからそういう用途ではよく使ってる.

  544 :デフォルトの名無しさん:2016/06/17(金) 07:01:08.70 ID:TQ7oR46s
  >>540
  >>537

  545 :デフォルトの名無しさん:2016/06/17(金) 07:14:29.17 ID:TQ7oR46s
  >>541
  書き方とかにちょっと違和感があるけど慣れればかなり使えるって感じ.
  特にバッチは文字列の扱いが色々面倒だからファイル名を切った張ったするようなケースだと PowerShell の方が楽.
  WPF 使って GUI もいけるし.

  546 :デフォルトの名無しさん:2016/06/17(金) 14:10:51.86 ID:ZjDSffK/
  >>544
  お前がな・・・.

  547 :デフォルトの名無しさん:2016/06/17(金) 14:14:36.97 ID:ZjDSffK/
  個々人がマナー違反だと思うのはその人の勝手.
  だが, 「皆が」そうだというならお前以外の意見つまりソースを出せと.
  そんなことも理解できんのね.

  548 :デフォルトの名無しさん:2016/06/17(金) 14:45:53.78 ID:kt8UtU4J
  >>540
  本来, 内容はどうであれ, マルチポストの相手をすべきではないんだよ.
  マルチポストとか思うから, マナーだとか言い出すんだろうけど,
  コピペの荒らしだと思えばいいんだよ. 相手にするヤツがバカだろう?

  549 :デフォルトの名無しさん:2016/06/17(金) 15:22:57.71 ID:PGPlVx2O
  いやー, そのレスでちょっとは盛り上がったじゃん.
  十分このスレでの意義はあったと思うよ.
  元のスレのofficeじゃスレ違いだとかいってハブって追い出したくせに.
  こっちに来たら追いかけてきてイチャモンつけるって性格悪いな.

  550 :デフォルトの名無しさん:2016/06/17(金) 18:35:44.26 ID:oyCWF+hy
  >>549
  そいつに関しては性格悪いなんてもんじゃないでしょ.
  わざわざ他スレへ出張って文句言う粘着性はガイキチ.
  池沼は相手にしないが吉.
  >>542-543
  >>545
  いや, おまえがスレチだろってツッコミ待ちだったんだがおまえら良い奴だな.
  ありがとう.
  既に.NET知ってる人は楽なんだろうけど一から覚えるの面倒臭くて. .
  ましてやPSの為だけにとなるとなかなか重い腰が動かず.
  >ファイル名を切った張ったするようなケースだと.
  まさにこの用途なんだよね.
  バッチから文字列の扱いを少し便利にしてくれるくらいで良かったんだけど覚える量的に一気にハードル上がって面倒臭い.
  覚えてしまえば楽になりそうなのは分かってるので, ぼちぼちやってくわ.

  551 :デフォルトの名無しさん:2016/06/17(金) 18:55:09.01 ID:TQ7oR46s
  >>548
  まあ, そう言うこと.
  ググって部屋のなかにうんこするなとかの書き込みが少ないからうんこするぜ.
  って言うのと同じ.
  考える力のない奴に何を言ってもしょうがない.

  552 :デフォルトの名無しさん:2016/06/17(金) 18:58:07.69 ID:TQ7oR46s
  >>550
  対話で使えなくてもいい.
  将来を心配したことがない.
  なら vbs/jscript + wsh でもいいかも.

  553 :デフォルトの名無しさん:2016/06/19(日) 09:59:28.72 ID:rDn80OX3
  >>551
  うんこと考えてるのは実はお前だけってな.
  お前さん理想と現実の区別付いてないだろ?

  554 :デフォルトの名無しさん:2016/06/19(日) 11:27:46.12 ID:Pvc+naRU
  >>553
  >>537

  555 :デフォルトの名無しさん:2016/06/19(日) 17:51:44.69 ID:UjrNrWKl
  2ちゃん初めてか?
  先週のネタいつまで引っ張ってんだよ, 切り替えていけよ.
  ネタがないなら保守だけしてろ.

  556 :デフォルトの名無しさん:2016/06/19(日) 20:28:17.53 ID:N0SKT7vZ
  > 2ちゃん初めてか?
  まだこんなこと言ってる奴がいるんだな. w.

  557 :デフォルトの名無しさん:2016/06/20(月) 05:15:32.88 ID:bz6tTT9I
  そもそも「2ちゃん」という言い方自体, 自称古参爺しか使わん.

  558 :デフォルトの名無しさん:2016/06/20(月) 12:37:29.60 ID:1rHeBxTu
  ちゃんちゃん.

  559 :デフォルトの名無しさん:2016/06/20(月) 12:56:47.33 ID:XUIKeVkP
  2chって言うよな.

  560 :デフォルトの名無しさん:2016/06/21(火) 23:17:02.70 ID:wIBHL76T
  言うの?
  発音はツーチャンネル?

  561 :デフォルトの名無しさん:2016/06/22(水) 03:22:26.83 ID:UKX8/FIx
  声には出さないけど「にちゃん」って読んでるな.
  書く時は2chって書くかな.

  562 :デフォルトの名無しさん:2016/06/22(水) 08:59:59.99 ID:ffHjJb8n
  >>561
  漏れも.

  563 :デフォルトの名無しさん:2016/06/24(金) 01:13:29.70 ID:buggiI8H
  俺は教育テレビって言ってる.
  Eテレは馴染めん.

  564 :デフォルトの名無しさん:2016/06/24(金) 02:23:17.48 ID:iovZLto/
  教育テレビは3チャンネルだと思ってたけど,
  地デジは3ちゃんTVKというCM思い出して.
  違うことに気づいた.

  565 :デフォルトの名無しさん:2016/06/27(月) 10:51:32.41 ID:IRTRDse4
  dir /Q はオーナー名が長いとファイル名とくっついてしまう欠陥コマンドだった.

  566 :デフォルトの名無しさん:2016/06/27(月) 13:44:52.16 ID:cmd3G8BZ
  会社のサーバに散在している.batファイルを片っ端から削除したい. いや, マジで.
  http://el.jibun.atmarkit.co.jp/101sini/2016/06/bat.html

  567 :デフォルトの名無しさん:2016/06/27(月) 13:56:09.99 ID:YSZG9z+3
  del /f /s /q *.bat
  でよくね?

  568 :デフォルトの名無しさん:2016/06/27(月) 14:13:24.61 ID:RStewB0e
  個人用ローカルPCだけど俺も何に使ったか分からないbatファイルがそれなりに残ってるわ. w.
  1度整理したから大量ってほどではないけど.
  ニッチな用途だとファイル名だけでは用途を思い出せないのが難点.

  569 :デフォルトの名無しさん:2016/06/27(月) 14:35:10.14 ID:N5RLWdSz
  batなんて使わなくなったら即削除してるから残ってるのはせいぜい20個程度だ.

  570 :デフォルトの名無しさん:2016/07/03(日) 21:43:03.57 ID:vq6Z+j1h
  「削除した」なら許せるが, 削除したい(削除できなかった)ならただの糞文.

  571 :デフォルトの名無しさん:2016/07/03(日) 22:02:09.39 ID:T1/0jYLy
  読んでねーけど, したいけど出来ないって愚痴なんじゃねーの?
  何に使うか分からんようなゴミを鯖に残してて勝手に消したら老害が何で消した?いつか使うかもしれんのに!って怒るとか.
  いつかって何だよって言う. たかがbatでアホかって老害SEあるあるネタ.

  572 :デフォルトの名無しさん:2016/07/03(日) 22:37:12.83 ID:CJuDkW1k
  んー, そもそもバッチを使う(作る)人に対する人格否定, という感じのブログ.
  アナウンス出して全て消しゃいいじゃん, というのが率直な感想.
  でもやりたいのは, バッチを使う(作る)人の排除みたいだから,
  社長になって独裁人事するのが一番の解決なんだろうね.

  573 :デフォルトの名無しさん:2016/07/06(水) 01:43:37.05 ID:j2aYQoha
  整理整頓が出来ていればいい話.
  バッチに限った事じゃない.
  不要の見極めも難しいから.
  消せずに残ってゴミ屋敷が現実.

  574 :デフォルトの名無しさん:2016/07/07(木) 00:24:13.51 ID:WGF782sG
  会社のサーバだとうちもバッチに限らずなんだかよく分からんのがいっぱいあったな.
  いらなさそうなのまとめて圧縮して1年後の日付書いてこの日まで使わなければ消すってしといた.

  575 :デフォルトの名無しさん:2016/07/07(木) 14:56:47.42 ID:TsrNo+6t
  そうやってなんか対処してるなら話はわかるんだけど.
  うぜぇうぜぇって言うだけで自分では対処しないで放置ってのはもう・・・.

  576 :デフォルトの名無しさん:2016/08/09(火) 17:07:41.16 ID:j5HqbEBX
  Windows 10のLinuxサブシステムを狙った攻撃が今後登場する可能性.
  http://srad.jp/submission/67150/
  免疫力がつくまでしばらく待った方がいいのか知らん.

  577 :デフォルトの名無しさん:2016/08/14(日) 22:50:59.47 ID:r/0nUjHR
  そもそもbe-taなんだし, 素人さんが手を出していい物じゃないんだけどな.

  578 :デフォルトの名無しさん:2016/08/15(月) 00:25:59.77 ID:8W38K+Qq
  まだcygwinのほうが安全ということなのかね.

  579 :デフォルトの名無しさん:2016/08/21(日) 07:59:09.76 ID:zhyP4GkP
  今んとこサーバ用途は全く想定してないからさして問題にはならないだろう.
  最終的にはMacのポジションを目指すのだろうからそれまでに直しておけば良い.
  テクノロジーカンファレンスがSurfaceで埋まる日は来るか.
  http://www.buildinsider.net/column/arton/003

  580 :デフォルトの名無しさん:2016/09/06(火) 18:28:00.80 ID:G35PExva
  Windows標準のコマンドプロンプトウィンドウをタブ化できる「ConEmu」
  https://osdn.jp/magazine/14/05/23/200000
  多数のDOS画面でお仕事する人向け.

  581 :デフォルトの名無しさん:2016/09/06(火) 18:51:20.42 ID:rT4OuLmz
  ConEmuも所詮バックグランドでcmd動かしてて,
  cmd単独よりは少し便利になるものの,
  元々の日本語の表示の不具合(端が切れる)を引き継いでるからなぁ.
  cmd完全互換のまともなシェルはないものかねぇ.

  582 :デフォルトの名無しさん:2016/09/07(水) 18:29:47.35 ID:b6UGEvRF
  タブでまともに機能するのはすごいたぶちさんだけ.

  583 :デフォルトの名無しさん:2016/09/07(水) 19:12:06.44 ID:eCxhE93W
  .BATと.CMDでは何が違うのでしょうか?
  使える命令などに違いがあるのでしょうか?
  教えてください.

  584 :デフォルトの名無しさん:2016/09/08(木) 00:57:15.94 ID:54d0WlHM
  >>583
  違いは無いよ.
  DOSの時代からWin16の時代は拡張子はBATであり,
  Win32の時代からMSはCMDに変えたがったみたいだが以前としてBATが主流となってるだけ.

  585 :デフォルトの名無しさん:2016/09/08(木) 01:30:50.71 ID:MGX2ZdyU
  cmd は WindowsNT, OS/2 由来じゃなかったっけ?
  例えば OS/2 だと bat にすると DOS互換ボックスでのバッチファイル動作で.
  cmd にすると OS/2 ネイティブ動作.

  586 :デフォルトの名無しさん:2016/09/08(木) 02:06:01.27 ID:54d0WlHM
  >>585
  そうだったっけ?
  OS/2は殆ど使ったことない(さわりだけ)んで, 拡張子batが動作したかどうか忘れちゃったんだけど.
  (暗黙の了解でcmdでしか使ってなかった)

  587 :デフォルトの名無しさん:2016/09/08(木) 02:15:48.19 ID:54d0WlHM
  ちなみに俺が使ってたOS/2はver.1.2のごく初期の奴だったんで.
  そもそもDOS互換とか存在してなかった気もする.

  588 :デフォルトの名無しさん:2016/09/08(木) 03:45:32.33 ID:Jzexm0YP
  >>583
  基本的には同じと思っていいけど厳密には少しだけ動作に違いがある.
  http://stackoverflow.com/questions/148968/windows-batch-files-bat-vs-cmd

  589 :デフォルトの名無しさん:2016/09/08(木) 04:05:36.46 ID:PAzqK7FZ
  .bat 普通のバッチファイル用途.
  .cmd ruby -x でrubyのコード埋め込む為に使用する. シンタックスハイライトをruby向けに設定.
  という超ローカルな使い分けをしている.

  590 :デフォルトの名無しさん:2016/09/08(木) 21:40:41.34 ID:5x3R57hb
  setlocal enabledelayedexpansion
  set STR="aaa"
  if STR=="aaa"(
  STR = "bbb"
  echo !STR!
  )
  echo !STR!
  echo %STR%
  遅延環境変数が分からないのですが, 自分の環境だと全て"aaa"になります.
  どこが間違っているんでしょうか?

  591 :590:2016/09/08(木) 21:53:39.72 ID:5x3R57hb
  すいません. 適当に書いてしまったのを訂正します.
  ・"bar"が出て上手く行かないケース.
  @echo off
  setlocal enabledelayedexpansion
  set foo2="bar"
  if %foo2% == "bar" (
  set foo2 = "hoge"
  echo !foo2!
  )
  pause
  ・"hoge"が出て上手く行くケース.
  @echo off
  setlocal enabledelayedexpansion
  set foo="bar"
  if %foo% == "bar" (
  set foo="hoge"
  echo !foo!
  )
  pause
  この2つの違いが分かりません.

  592 :デフォルトの名無しさん:2016/09/08(木) 21:58:24.35 ID:5x3R57hb
  自己解決しました.
  foo2と=の間に空白があるのが原因でした.
  バッチは文字列を代入する際には空白があってはいけないのですね.
  set foo2= "hoge"
  としたら上手く行きました.
  set /a foo2 = 10
  では空白があっても行けたのですが, 文字列の場合はダメなんですね.

  593 :デフォルトの名無しさん:2016/09/09(金) 03:51:09.43 ID:LpeB3e0i
  Linuxのシェルスクリプトでも, 変数代入時, = の前後に, 半角空白を入れられない.
  a=b
  a = b これはダメ.
  こういう点が, プログラミング言語としてはクソなんだよ.
  PowerShell_ise を使いな.

  594 :デフォルトの名無しさん:2016/09/09(金) 06:34:14.46 ID:Sx9RRTJO
  >この2つの違いが分かりません.
  そんな違いわかりたくもない.
  バッチファイルでif文をトラブルなく使う - Qiita
  http://qiita.com/ejiw/items/8a6ac11c117b6695b6ca
  バッチファイルでif文を使っていてハマったので, ハマらないための書き方と注意点をまとめてみた.
  解決方法.
  何も考えず必ず以下の形で書く.
  if 条件 ( <-(1)
  call :サブルーチン名 引数 <-(2)
  ) else if 条件 ( <-(3)
  call :サブルーチン名 引数.
  ) else ( <-(4)
  call :サブルーチン名 引数.
  ) <-(5)

  595 :デフォルトの名無しさん:2016/09/10(土) 14:10:07.42 ID:WyiyFmBQ
  >>591
  ダブルクォート記号を意図して含めたいならそういう記述もありだろうね.
  だけど, 純粋に文字列だけ比較したいだけなら変数名も含めてくくって, あとは判定部分で整形する方が自由度がある.
  set

  596 :デフォルトの名無しさん:2016/09/10(土) 14:14:02.54 ID:WyiyFmBQ
  途中で切れた?全角でリトライ.
  SET "foo= b a r "
  IF "%foo%"==" b a r " (
  IF "%foo%" == " b a r " (
  のようにすれば前後の空白も含めて評価されるし, この場合どちらも同じ結果が得られる.
  なので, >>592の「バッチは文字列を代入する際には空白があってはいけないのですね. 」は誤り.
  変数の文字列前後, if文のイコール記号の前後の空白の有無で意図しない比較結果になり得る記述は避けたほうがいいのは自明.
  環境変数の遅延展開に関しては, カッコで囲んだ複文の挙動を把握した上で適切に使う.
  環境変数はあとから再利用する性質上, 意図しない文字や空文字になってしまうのが一番怖い.
  別解としては, call set "foo=hoge" があり, echo;%%foo%% などのようにパーセント記号を重ねても同じ結果が得られる.
  こちらは setlocal enabledelayedexpansion は不要, この方法は公式とは言えないのでユーザーのお好み次第といったところ.

  597 :デフォルトの名無しさん:2016/09/11(日) 01:07:52.20 ID:4x/hjQLW
  sqlite3のコマンドラインツールでDB読込み時間を測って遊んでたら.
  sqlite3 hoge.db "SELECT * FROM TEST" > nul よりも.
  sqlite3 hoge.db "SELECT * FROM TEST" > "c:\Temp\hoge.txt" のほうが.
  出力完了までの時間が短かったんですが, 出力をnulに捨てるのって.
  普通にファイルに吐くより遅くなるもんなんでしょうか.

  598 :デフォルトの名無しさん:2016/09/11(日) 01:24:31.36 ID:zfXOe+JX
  >>597
  常にそうなるの?
  たまたまじゃなくて?
  db読み込みの時間とかが関係してきそうな気がするし.
  それにwrite時間は以外に掛からないんでファイルがでかくなければnulとの差はつかない.
  (read時間は掛かるし実行時間にかなりばらつきが出る, また2回目以降はキャッシュからになる)

  599 :デフォルトの名無しさん:2016/09/11(日) 02:05:36.54 ID:zfXOe+JX
  >>597
  ちょっと試してみた.
  確かにnulの方が時間が掛かる.
  そこで, sqlite3の代わりに, type xxx.txt >yyy.txtで試してみた.
  やっぱりファイルに書き出すよりnulの方がはっきり時間がかかる.
  何故なのかは分からん, スマン.

  600 :デフォルトの名無しさん:2016/09/13(火) 21:52:06.22 ID:NwZGDC4j
  コマンドプロンプトから実行して.
  処理しますか?(Y/N)=>処理=>処理完了後F3キー押すとして終了.
  するツールを毎日ポチらないといけないのですが.
  txtにYとF3を書いてリダイレクトで自動入力すれば楽にポチれる気がするんですが.
  F3をtxtファイルにどう書けばいいのかわかりません, 助けてください.

  601 :デフォルトの名無しさん:2016/09/14(水) 06:17:54.15 ID:xpMA1gBQ
  F3は無理だと思うけど・・・.

  602 :デフォルトの名無しさん:2016/09/14(水) 08:44:57.03 ID:f2EPB9Ji
  >>600
  uwscでやれば?

  603 :デフォルトの名無しさん:2016/09/14(水) 17:27:36.03 ID:Jy6DKzEX
  >>602
  ありがとうございます.
  EXECでバッチファイル起動してYとF3入力してexit=>ENTERで終了するようマクロ組みました.
  タイマー起動ソフトでUWSを指定時間に実行するようにしたので何もしなくてよくなりました.
  ありがとうございます.

  604 :デフォルトの名無しさん:2016/09/19(月) 03:08:13.70 ID:3gpWvjZ8
  cmdですが.
  schtasksでstartコマンドがうまく使えません.
  /tr "start フルパス実行ファイル名"
  [*] パスにはスペース無しです.

  605 :デフォルトの名無しさん:2016/09/19(月) 03:34:12.50 ID:rks5/FmO
  >>604
  cmd内部コマンドを起動するように登録するなら.
  "cmd /c start xxx"
  だけど, 単に.
  /tr xxx
  じゃああかんの?(xxxはフルパスの実行ファイルなんでしょ?)

  606 :デフォルトの名無しさん:2016/09/19(月) 04:07:56.77 ID:3gpWvjZ8
  >>605
  速いレスポンスありがとうございます.
  おっしゃる通りどちらもいけました!
  もともとスペースありのパスで悩んで.
  /tr "フルパススペース混じり" ・・・1
  /tr "\"フルパススペース混じり\"" ・・・2
  上記1.2から始まり詰まってましたが.
  お陰様でstartの使い方がわかりました.

  607 :デフォルトの名無しさん:2016/09/19(月) 12:05:07.29 ID:mqRkSqP8
  startは引数にスペースが混じるとおかしくなる.
  その場合は第一引数に空文字列入れると良い.
  start "" "c:\program files〜"

  608 :デフォルトの名無しさん:2016/09/22(木) 20:07:59.66 ID:yIBGfr99
  taskkill /im explorer.exe
  start explorer
  をバッチにしてエクスプローラ再起動に使ってたんだけど.
  最近explorer.exeが見つかりませんってなってkillできないんだけど何でだろう.
  タスクマネージャからなら止められるしPID指定でも止められるんだけど.

  609 :デフォルトの名無しさん:2016/09/27(火) 11:38:03.47 ID:clgfgzqk
  10か.

  610 :デフォルトの名無しさん:2016/09/28(水) 19:18:04.93 ID:zhCs69qF
  下記バッチファイルで call を実行する.
  @echo off
  set a1=%%a2%%
  set a2=%%a3%%
  set a3=%%a4%%
  set a4=%%a5%%
  call echo %a1%
  call echo %a1% | more
  pause
  結果は.
  %a3%
  %a4%
  なぜか表示が違う.
  パイプを使うと変数の展開が一回増えるようだ.

  611 :デフォルトの名無しさん:2016/09/29(木) 00:33:45.25 ID:RC/Dq8j5
  パイプは, 子タスクでインスタンスは別だと思うよ.
  set a=1
  echo %a%|(more|set a=2)
  echo %a%

  612 :デフォルトの名無しさん:2016/09/29(木) 00:34:51.35 ID:RC/Dq8j5
  echo %a%|(more&set a=2)

  613 :デフォルトの名無しさん:2016/09/29(木) 02:15:55.37 ID:HmIZKCJu
  echo %a1%
  echo %a1% | more
  %a2%
  %a3%

  614 :デフォルトの名無しさん:2016/09/29(木) 02:29:13.86 ID:HmIZKCJu
  call call echo %a1%
  call call echo %a1% | more
  %a4%
  %a5%

  615 :デフォルトの名無しさん:2016/10/07(金) 02:33:21.18 ID:E4yfrV8y
  /aaa/bbb/ccc
  上記から/cccもしくはcccを抜き出す方法は有るでしょうか?
  "最後のスラッシュから末尾までを出力"
  の方法がわかりません・・・.
  サクラエディタでもかまいません・・・.

  616 :デフォルトの名無しさん:2016/10/07(金) 02:39:36.76 ID:E4yfrV8y
  >>615
  追記ですが.
  "/"の数は変動します.

  617 :デフォルトの名無しさん:2016/10/07(金) 03:13:06.25 ID:PWoZvLSt
  bat素人が適当に書いたらこうなった.
  set token_number=1
  :start
  for /f "tokens=%token_number%, * delims=/" %%a in ("/aaa/bbb/ccc") do if
  "%%b"=="" (
  set hoge=/%%a
  ) else (
  set /a token_number=token_number+1
  goto start
  )
  echo %hoge%
  pause

  618 :デフォルトの名無しさん:2016/10/07(金) 03:33:35.13 ID:RDmrItg+
  ちょっと邪道だけど.
  powershell -Command

  619 :デフォルトの名無しさん:2016/10/07(金) 03:34:29.48 ID:RDmrItg+
  切れたので再送.
  powershell -Command Split-Path -Path /aaa/bbb/ccc -Leaf

  620 :デフォルトの名無しさん:2016/10/07(金) 03:44:17.59 ID:273HGXTN
  >>615
  tmp に & や % 等々が入っていない, ダメな文字が無いという楽観的な状態なら.
  set tmp=/aaa/bbb/ccc/ddd eee
  call %tmp:/=&set tailpart=%
  echo %tailpart%

  621 :デフォルトの名無しさん:2016/10/07(金) 10:20:31.14 ID:uWLqn+Rg
  echo [ERROR][%~n0][%date% %time%] エラー出た(ERRORLEVEL=%ERRORLEVEL%)
  これ標準エラー出力で出力するのってどうやるんですか?

  622 :デフォルトの名無しさん:2016/10/07(金) 10:47:05.46 ID:yoIkF7ck
  >>621
  標準出力先を標準エラー出力先と同じになるようにリダイレクトしてやるとかかな.
  (意図がわからんからこれで解決するのかどうかは知らんけど)
  echo xxx 1>&2
  例.
  2>errout.txt 1>&2 echo エラー(err no=111)

  623 :デフォルトの名無しさん:2016/10/07(金) 11:05:50.41 ID:yoIkF7ck
  出力先が同じだから, 2>errout.txt は >errout.txt に書き替えても同じ結果になることからも分かるように.
  やってることはあくまで出力先を同じにしてるだけなので, 標準エラー出力のみを取り扱ってるわけではないことに留意.
  (なお 1> の 1 は省略可能なので, 1>&2 は >&2 と書くことも可能)

  624 :デフォルトの名無しさん:2016/10/07(金) 11:23:31.75 ID:uWLqn+Rg
  echo aaa
  echo bbb 1>&2
  echo ccc
  で試したところ望みどおりの動作になりました.
  ありがとうございます.

  625 :デフォルトの名無しさん:2016/10/07(金) 11:44:29.04 ID:5wS7M9ck
  >>615
  案1:
  FOR /F "delims=" %%I IN ("/aaa/bbb/ccc") DO ECHO %%~nxI
  案2:
  CALL :SUB "/aaa/bbb/ccc"
  GOTO :EOF
  :SUB
  ECHO %~nx1

  626 :デフォルトの名無しさん:2016/10/07(金) 12:09:19.90 ID:PWoZvLSt
  色んなやり方があるんだなあ勉強になる.

  627 :デフォルトの名無しさん:2016/10/08(土) 07:09:00.83 ID:sXvXMvPu
  @echo off
  set "a=/aaa/bbb/ccc\ddd"
  set "b="
  call :x a b
  echo "%a%"
  echo "%b%"
  pause
  goto :eof
  :x
  setlocal enabledelayedexpansion
  set "a=/!%1!"
  set b=-1
  :y
  set "c=!a:~%b%, 1!"
  if "!c!" == "/" goto z
  set /a b-=1
  goto y
  :z
  set "c=!a:~%b%!"
  endlocal & set "%2=%c%"
  goto :eof

  628 :デフォルトの名無しさん:2016/10/09(日) 20:38:11.04 ID:mq9cB08l
  7z.exe x AAA.zip -oBBB >hoge.txt
  7z.exeで展開してるんだけど, 終了するまえに,
  次の処理に行ってしまい, その後がエラーになる.
  7z.exeの終了を待つには, どうしたらいいのですか?
  >hoge.txtは必要.
  start /wait 7z.exe x AAA.zip -oBBB >hoge.txt
  では, hoge.txtが空だし, コマンドプロンプトの窓がもう一個開くし.

  629 :デフォルトの名無しさん:2016/10/09(日) 21:25:06.80 ID:DFuD/t4t
  >>628
  start /B /wait "" 7z.exe x AAA.zip -oBBB -y >hoge.txt
  てやれば窓は開かないけど, 多分実行結果はstart無しの場合と同じだろう.
  解凍するまで待って制御が返ってるように思えるけど.
  その後エラーが出るとするなら, 多分OSのファイル遅延書き込みの所為だろうから.
  ウェイトを入れるなり何なり待たさないといけないと思うよ.

  630 :デフォルトの名無しさん:2016/10/10(月) 09:40:47.22 ID:UJJq0Lfa
  >>629
  ありがとうございます.
  10回くらいテストして, それ「start /B /wait "" 」でいけました.

  631 :デフォルトの名無しさん:2016/10/12(水) 15:15:40.33 ID:CXMCNpce
  for %%a in ("*.mkv") do ffmpeg.exe -i %%a -b:v 3000k -acodec ac3 -ar 48000
  -vcodec libx264 D:\encoded\%%~na.mp4
  mkvとflvを入力に使いたいです.
  二重ループ以外に方法ありませんかね?

  632 :デフォルトの名無しさん:2016/10/12(水) 15:33:04.97 ID:V1BPQ8PQ
  `dir /b *.mkv;*.flv`をキャプチャすればいいんじゃないの.
  自分なら2行にコピペするが. w.

  633 :デフォルトの名無しさん:2016/10/12(水) 15:35:36.60 ID:CyghQ6/+
  "*.*v"
  他にvが付くもの無ければ.

  634 :デフォルトの名無しさん:2016/10/12(水) 15:38:43.19 ID:CXMCNpce
  >>632
  すみません.
  2行にコピペするとはどういうことですか?
  >>633
  私も考えたのですがwmvがありました.

  635 :デフォルトの名無しさん:2016/10/12(水) 16:07:30.74 ID:aOSR32QX
  for %%a in (*.mkv *.flv) do ...

  636 :デフォルトの名無しさん:2016/10/12(水) 16:12:00.02 ID:YqqdfgOM
  >>634
  *.mkvで処理と*.flvで処理と2行for文を書くという意味じゃないかな?
  for /f "tokens=*" %%a in ('dir /b *.mkv *.flv') do 〜.
  とか.
  dir /b *mkv>files.tmp
  dir /b *.flv>>files.tmp
  for /f "tokens~*" %%a in (files.tmp) do 〜.
  del files.tmp
  とか色々とか色々と出来るよ.

  637 :デフォルトの名無しさん:2016/10/12(水) 16:51:21.25 ID:k+jI1aQa
  質問です. サブディレクトリのファイルで, 0バイトのファイルだけを削除したいです.
  以下のページにあるサンプルをベースに, dirに /s をつけてサブディレクトリも.
  対象とするようにしました.
  バッチで自動的に作成したファイルを容量チェックして削除する方法ってありますか? (DOSプロンプト活用相談室LOG)
  http://fpcu.on.coocan.jp/dosvcmd/bbs/log/delerase/4-0062.html
  実行してみると, 0バイト以外のファイルも条件が成立してしまい,
  動作してくれません. OSがwindows10のせいでしょうか.
  FOR /F %%F IN ('dir /s /B') DO ( CALL :CheckFile %%F )
  EXIT /B
  :CheckFile
  SET FileAttrib=%~a1
  IF NOT %FileAttrib:~0, 1%==d (
  IF not "%~z1" == "0" (
  ECHO "%1" はファイルサイズが %~z1 で, 0 なので削除します.
  REM DEL %1
  )
  )
  EXIT /B
  ==をEQUに変えてみたり, ダブルクォートをつけたりしましたが変化なしでした.
  どのように直せば, 0バイトのみが引っかかるようにできるか, 宜しくお願いします.
  なお, 上記コードは, 安全のためdelはREMをつけたままです.

  638 :デフォルトの名無しさん:2016/10/12(水) 17:01:12.97 ID:k+jI1aQa
  すいません補足です.
  >IF not "%~z1" == "0" (
  これは, notがないのが正常な状態です.
  なにをやっても条件が成立してしまうので,
  ためしにnotをつけて, 論理が反転するか試したところ,
  これも全部条件が成立してしまいました.
  その実験をしたときの残骸のnotが残ってしまいました.

  639 :デフォルトの名無しさん:2016/10/12(水) 17:10:16.64 ID:CyghQ6/+
  if %~z1==0
  のように書く. ==の両側にスペース入れたらダメ.

  640 :デフォルトの名無しさん:2016/10/12(水) 17:14:15.79 ID:CyghQ6/+
  それでもダメだったら.
  CALL :CheckFile %%~fF
  を試してみて.

  641 :デフォルトの名無しさん:2016/10/12(水) 17:19:24.35 ID:CyghQ6/+
  IF NOT %FileAttrib:~0, 1%==d
  これ必要?
  dir /a-d /b /s としておけば要らない.

  642 :デフォルトの名無しさん:2016/10/12(水) 17:32:19.00 ID:k+jI1aQa
  ありがとうございます. 指摘の件を全て直しましたが, ダメでした.
  FOR /F %%F IN ('dir /a-d /s /B') DO ( CALL :CheckFile %%~fF )
  EXIT /B
  :CheckFile
  SET FileAttrib=%~a1
  IF %~z1==0 (
  ECHO "%1" はファイルサイズが %~z1 で, 0 なので削除します.
  REM DEL %1
  )
  EXIT /B
  実行結果.
    IF 1695606 == 0 (
    "F:\TEST\file.txt" はファイルサイズが 1695606 で, 0 なので, 削除します.

  643 :デフォルトの名無しさん:2016/10/12(水) 17:37:43.49 ID:h3rHiOkq
  set hoge="hage te naiyo"
  とやると, %hoge%でダブルクォーテーションも読み込んでしまいます.
  対処法教えて下さい.

  644 :デフォルトの名無しさん:2016/10/12(水) 17:44:13.80 ID:X88zouZU
  パスにスペースが入ってんじゃ?
  for /f "delims=" %%i in ('dir /a-d /b /s *.*') do if %%~zi EQU 0 del "%%~fi"

  645 :デフォルトの名無しさん:2016/10/12(水) 17:46:49.24 ID:tJlO+qdh
  set "hoge=hage te naiyo"
  か.
  set hoge=hage te naiyo
  そもそも "" でくくらない.

  646 :デフォルトの名無しさん:2016/10/12(水) 17:54:18.24 ID:YqqdfgOM
  >>642
  本当にそんな表示なのか?
  上の IF 1695606 == 0 ( を書いてるということはbatの展開された実行ステートメントを表示してるだけじゃないのか?
  正確には.
  IF 1695606 == 0 (
  ECHO "F:\TEST\file.txt" はファイルサイズが 1695606 で, 0 なので 削除します.
  REM DEL F:\TEST\file.txt
  )
  と4行表示されただけなんじゃないの?
  それと, 半角空白の存在するファイル名があったらエラーになるよ.
  "tokens=*"とか"delims="をつけて, 引数は""で囲んで渡すようにした方がいい.
  (さらに^とかの文字もファイル名に含まれてる可能性があるなら引数渡しは諦めて環境変数で渡すようにする)

  647 :デフォルトの名無しさん:2016/10/12(水) 17:56:29.96 ID:CyghQ6/+
  for /f "usebackq delims=" %%F in (`dir /a-d /b /s`) do if %%~zF==0 echo %%~F
  これで0バイトだけechoされるはずだと思うけど.
  >>643
  set "hoge=hage te naiyo"

  648 :デフォルトの名無しさん:2016/10/12(水) 18:07:46.52 ID:YqqdfgOM
  >>643
  もし何らかの理由で""を付いたままで代入しなくてはいけないのなら, その後で取ることは出来る.
  set hoge=%hoge:"=%
  とか.
  set hoge=%hoge:~1, -1%
  とか.
  まあ後者は"が付いているかどうかチェックした方がいいけど.
  if ^%hoge:~0, 1% equ ^" set hoge=%hoge:~1, -1%

  649 :デフォルトの名無しさん:2016/10/12(水) 18:12:36.27 ID:CyghQ6/+
  後から外す場合はcallやforで%~1や%%~Iでも可.

  650 :デフォルトの名無しさん:2016/10/12(水) 18:13:42.95 ID:k+jI1aQa
  >>646
  すみません, こちらの勘違いでした. 教えていただいたコードで動きました.
  echo off していないため, 条件が成立しないコードが表示されてるのを見て,
  あたかも実行されているかのように勘違いしてるだけでした.
  この手のトラブルが嫌いなので対象のファイル名に空白は入っていませんでした.
  完成形ですが, 空白が含まれているファイル名も処理する場合は, 以下で大丈夫でしょうか.
  echo off
  FOR /F %%F IN ('dir /a-d /s /B') DO ( CALL :CheckFile %%~fF )
  echo 処理終わり.
  pause
  EXIT /B
  :CheckFile
  SET FileAttrib=%~a1
  IF "%~z1"=="0" (
  ECHO "%1" はファイルサイズが %~z1 で, 0 なので削除します.
  DEL "%1"
  ) else (
  ECHO "%1" はファイルサイズが %~z1 で, 削除しません.
  )
  EXIT /B

  651 :デフォルトの名無しさん:2016/10/12(水) 18:31:53.33 ID:k+jI1aQa
  うーん・・・このバッチだと, 0バイトかどうか調べる対象ディレクトリが1000個, 総ファイルが10万個とか有ると,
  最初のforから全然進んでくれないようです.
  core-i5で10分待っても開始されず. ディスクの能力じゃ無く, BATのCPU消費率が上がります.
  >>647さんの書き方で, 大量ファイルの処理時の挙動は変化するか, これから試してみます.
  大量処理に適した書き方などがあったらご教示ください.

  652 :デフォルトの名無しさん:2016/10/12(水) 18:44:53.26 ID:YqqdfgOM
  >>651
  そんな大量のファイルは無いので定かではないけど, 多分バッファが溢れてるんじゃないかと思う.
  一旦ファイルに書き出したらどうだろ?
  dir /a-d /s /b>list.tmp
  for /f %%F in (list.tmp) do

  653 :デフォルトの名無しさん:2016/10/12(水) 18:59:59.00 ID:CyghQ6/+
  10万とか処理させたこと無いけどバッチよりもPowerShell使った方が良いんじゃね?

  654 :デフォルトの名無しさん:2016/10/12(水) 19:01:10.45 ID:RjRHLuRO
  >>636
  ありがとうございます.
  出来ました.
  それともう一つ.
  エンコードの進捗状況を表示する事ってできませんかね?
  12/87(ファイル)みたいな感じで.

  655 :デフォルトの名無しさん:2016/10/12(水) 20:02:06.24 ID:nxsWiPWy
  forfiles使う方法も.
  forfiles /s /c "cmd /c if @isdir==FALSE if @fsize==0 del @file"

  656 :デフォルトの名無しさん:2016/10/12(水) 20:08:20.15 ID:IaZq30Xa
  Windows 10 だと rd hoge /S /Q でなかなかhogeディレクトリを削除できないけど,
  なにかいい方法ありますか?

  657 :デフォルトの名無しさん:2016/10/12(水) 20:19:09.72 ID:WWSUEmVo
  >>655
  for が速いとは言わないが forfiles は輪をかけて遅いから辛いんじゃないかな.

  658 :デフォルトの名無しさん:2016/10/12(水) 20:31:06.50 ID:YqqdfgOM
  >>654
  大昔DOSにあったansi.sysのようにエスケープシーケンスが使えたら可能なんだけどね.
  噂じゃwinsows10でエスケープシーケンスが使えるようになったとかの話もあるけど真偽のほどはどうなんだろ.

  659 :デフォルトの名無しさん:2016/10/13(木) 00:46:44.28 ID:cRZfvb+W
  >>650
  以下に修正したほうがいいけど, ざっと見ただけだから他にもあるかも. w.
  FOR /F %%F IN ('dir /a-d /s /B') DO ( CALL :CheckFile %%~fF )
  [下矢印]
  FOR /F

  660 :デフォルトの名無しさん:2016/10/13(木) 00:49:54.35 ID:cRZfvb+W
  FOR /F %%F IN ('dir /a-d /s /B') DO ( CALL :CheckFile %%~fF )
  [下矢印]
  FOR /F "delims=" %%F IN ('dir /a-d /s /B') DO ( CALL :CheckFile "%%~fF" )
  IF "%~z1"=="0" (
  [下矢印]
  IF %~z1==0 (
  ECHO "%1" はファイルサイズが.
  [下矢印]
  ECHO "%~1" はファイルサイズが.
  DEL "%1"
  [下矢印]
  DEL "%~1"
  サブルーチンへ引数を渡す際はダブルクォート記号が過不足なく評価されているか実行前に要テストね.
  それと, ifの数値比較についてはヘルプ読むべし. 数字以外を含むと文字列比較になるから.

  661 :デフォルトの名無しさん:2016/10/13(木) 01:11:54.49 ID:nRww2f6N
  >>646が指摘してるけど,
  もしファイル名が, "a^b.txt" だったり, "ab%cd%ed.txt" だったりしたらエラーになると思う.

  662 :デフォルトの名無しさん:2016/10/13(木) 02:20:45.86 ID:9ieIMwqB
  >>651
  FOR /R %%F IN (*.*) DO ( CALL :CheckFile %%~fF )
  にしたらマシになる?

  663 :デフォルトの名無しさん:2016/10/13(木) 02:28:09.62 ID:9ieIMwqB
  あ, 折角指摘が出てたのに修正漏れ.
  %%~fF -> "%%~fF"

  664 :デフォルトの名無しさん:2016/10/13(木) 02:30:01.50 ID:nRww2f6N
  >>662
  本来の目的だった半角空白のことを忘れたんか.

  665 :デフォルトの名無しさん:2016/10/13(木) 08:14:45.67 ID:CLiojDhV
  >>661
  そんなのまで対応しないといけないなら vbs とか PowerShell にした方がいいと思う.

  666 :デフォルトの名無しさん:2016/10/13(木) 19:02:37.99 ID:tpWzBOlc
  call するなら環境変数で渡せば問題ない.
  つうか直接に del すりゃいいだけだろ.
  for /r %%i in (*) do if %%~zi == 0 del "%%~fi"
  ファイル名に ^ とか % とか ユニコード特有文字とか有っても問題ない.
  あと, ==の両側にスペースがダメとか意味不明.

  667 :デフォルトの名無しさん:2016/10/13(木) 23:49:13.04 ID:BSlfrai+
  for %%a in (*hoge.txt) do 〜.
  この場合, ファイル名がaiueohoge.txtだった場合, aiueoだけを抜き出す方法有りませんか?
  %%~naみたいな演算子?でお願いします.

  668 :デフォルトの名無しさん:2016/10/14(金) 01:11:11.25 ID:Ep7xlThW
  >%%~naみたいな演算子?でお願いします.
  無理.
  一旦環境変数に入れて置換でhoge.txtを消し残りを取り出す事%fname:hoge.txt=%や.
  %fname:~0, -8%なら可能.
  set fname=%%~na
  echo %fname:~0, -4%

  669 :デフォルトの名無しさん:2016/10/14(金) 03:21:39.34 ID:onADalnL
  @echo off
  set

  670 :デフォルトの名無しさん:2016/10/14(金) 03:24:46.91 ID:onADalnL
  set "fname=*hoge.txt" & set b=-1
  setlocal enabledelayedexpansion
  :x
  if not "!fname:~%b%, 1!" == "*" set /a b-=1 & goto x
  endlocal & set /a b=%b%+1
  for %%a in ("%fname%") do set "c=%%~nxa" & call echo "%%c:~0, %b%%%"

  671 :デフォルトの名無しさん:2016/10/14(金) 20:38:01.10 ID:YifyNonQ
  ありがとうございます.
  set

  672 :デフォルトの名無しさん:2016/10/14(金) 20:40:05.91 ID:YifyNonQ
  "ありがとうございます.
  set "fname=*hoge.txt" & set b=-1
  setlocal enabledelayedexpansion
  :x
  if not "!fname:~%b%, 1!" == "*" set /a b-=1 & goto x
  endlocal & set /a b=%b%+1
  for %%a in ("%fname%") do set "c=%%~nxa" & HOGE "%%c:~0, %b%%%"
  ここでHOGEに処理を入れ, "%%c:~0, %b%%%"をファイル名として使えばいいんですかね?
  それとfor文で入力に使った*hoge.txtのだけ*hogeだけ抜き出したい場合はどうすればいいんでしょうか.

  673 :デフォルトの名無しさん:2016/10/14(金) 22:54:24.45 ID:+Ryxbx0f
  >>672
  call echo %%c:~0, %b%%%
  は環境変数の遅延展開を使わず展開させる方法だから, 別の処理で置き換えるなら,
  HOGE !c:~0, %b%!
  のように!記号でくくる方向で(call foo はどのコマンドでも使えるわけではないため)
  ファイル名の抜き出しは, パラメーターで調整できると思う.
  バッチパラメーターについては「call /?」あたりから.

  674 :デフォルトの名無しさん:2016/10/14(金) 23:02:08.75 ID:+Ryxbx0f
  ID違うからわかると思うけど, >>670とは別人なのであしからず(言い忘れすまそ)

  675 :デフォルトの名無しさん:2016/10/14(金) 23:39:49.51 ID:Ep7xlThW
  >aiueohoge.txtだった場合, aiueoだけを抜き出す方法有りませんか?
  に>>670が示してくれただけで.
  >HOGEに処理を入れ, "%%c:~0, %b%%%"をファイル名として使えばいいんですかね?
  そんな質問されてもファイル名として使うのかどう処理するのかとか分かる訳ねーだろ.
  aiueoをリネームに使うのか?何がしたいのか分からん事には答えようがない.

  676 :デフォルトの名無しさん:2016/10/15(土) 00:10:29.36 ID:GrBj6Sia
  >>672 質問の意図がよく分からん.
  set "fname=*hoge.txt" & set b=-1
  setlocal enabledelayedexpansion
  :x
  if not "!fname:~%b%, 1!" == "*" set /a b-=1 & goto x
  endlocal & set /a b=%b%+1
  for %%a in ("%fname%") do set "c=%%~nxa" & call :y "%%c:~0, %b%%%" "%%c%%"
  goto :eof
  :y
  echo hoge "%~1" "%~n2"

  677 :デフォルトの名無しさん:2016/10/15(土) 23:20:33.46 ID:DDtj3KwG
  バッチ初心者です.
  Windowsのタスクで指定時間した時間になったら, バッチファイルで指定した常駐ソフトを再起動(終了->起動)させたいのですが,
  taskkill /f /im app.exe
  start /MIN "" "C:\app.exe"
  のようにして最小化(/MIN)で起動するようにすると, そのソフトは何故かウインドウのスクロールバーが何故か消えてしまいます.
  なので一旦アクティブで起動させてスクロールバーを表示させてから最小化したいのですが, 方法がわかりません.
  taskkill /f /im app.exe
  start "" "C:\app.exe"
  で起動させたあと, アクティブなapp.exeをコマンドで最小化する方法があったら教えてください.
  よろしくお願いします.

  678 :デフォルトの名無しさん:2016/10/16(日) 06:33:42.07 ID:e+WiyjQC
  バッチにそんな機能はない.
  ahkなら.
  IfWinExist ahk_exe app.exe
      WinMinimize

  679 :672:2016/10/16(日) 10:52:23.32 ID:lNEScQ2P
  抽象的な事を言って困らせてすみません.
  何をやりたいのかと言うと, youtubeから落とした動画がhoge -[DASH].mp4とhoge - [DASH].m4aとなっているので,
  これを.
  ffmpeg -i hoge - [DASH].mp4 -vcodec copy -i hoge - [DASH].m4a -acodec copy
  hoge.mp4
  とエンコードして,
  hoge[DASH].mp4をforで検索して, その拡張子を取ったものを入力として使い, 出力ファイル名として, hoge.mp4としたかったのです.

  680 :デフォルトの名無しさん:2016/10/16(日) 17:03:52.47 ID:z1QBGf3F
  >>654
  set /p で改行を入れない文字列を出力して.
  コントロールコードのBSで消す.
  @echo off
  set bs=[BS]
  set delline=%bs%%bs%%bs%%bs%%bs%%bs%%bs%%bs%%bs%%bs%%bs%%bs%%bs%
  for /L %%i in (1, 1, 10) do (
  set /p x=%delline%%%i/10 <nul
  timeout /t 1 >nul
  )

  681 :デフォルトの名無しさん:2016/10/16(日) 19:44:42.76 ID:l/p5e+57
  >>679
  set "fname=* - [DASH].mp4" & set b=-1
  setlocal enabledelayedexpansion
  :x
  if not "!fname:~%b%, 1!" == "*" set /a b-=1 & goto x
  endlocal & set /a b=%b%+1
  for %%a in ("%fname%") do set "c=%%~nxa" & call :y "%%c:~0, %b%%%" "%%c%%"
  goto :eof
  :y
  ffmpeg -i "%~n2.mp4" -vcodec copy -i "%~n2.m4a" -acodec copy "%~1.mp4"

  682 :デフォルトの名無しさん:2016/10/16(日) 21:03:50.48 ID:cWFHk7WJ
  >>680
  コントロールコードを挿入できない人用.
  set bs=[BS]
      [下矢印]
  for /f "delims=0" %%I in ('cmd /u /c echo <') do set bs=%%I

  683 :その1:2016/10/18(火) 10:49:49.38 ID:492hutXa
  サーバサービスの起動条件がスタートアップ状態が自動でありながら.
  開始になっていないものをバッチで出力したい.
  とりあえずSCコマンドを使ってこんなことすると.
  sc \\HOGE query state= inactive |find "SERVICE_NAME" >hoge.txt
  下記のような起動していないサービスの名前がテキストに吐かれる.
  SERVICE_NAME: AeLookupSvc
  SERVICE_NAME: ALG
  SERVICE_NAME: AppIDSvc
  SERVICE_NAME: AppleChargerSrv
  SERVICE_NAME: AppMgmt
  SERVICE_NAME: aspnet_state
  SERVICE_NAME: AudioEndpointBuilder
  SERVICE_NAME: AudioSrv
  SERVICE_NAME: AxInstSV
  SERVICE_NAME: BDESVC
  SERVICE_NAME: Browser
  (以下. 略)

  684 :その2:2016/10/18(火) 10:50:03.97 ID:492hutXa
  そしてサービスのスタートアップ状態を調べるには.
  sc qc [サービス名]で表示される.
  sc \\HOGE qc AeLookupSvc |findstr "SERVICE_NAME START_TYPE"
  この2つを組合せればフルオートで起動条件がスタートアップ状態が自動でありながら.
  開始になっていないものを出せるはずなんだが.
  「SERVICE_NAME:」<-これが邪魔なんだ.
  教えてエロい人.
  これが消せたら下記でフルオートできるはず.
  @for /F %%=a in ('hoge.txt') do (
  sc \\HOGE qc %%a
  )

  685 :デフォルトの名無しさん:2016/10/18(火) 12:27:03.23 ID:6Un6ctsT
  for /f "tokens=1*" %%A in (hoge.txt) do echo %%B

  686 :デフォルトの名無しさん:2016/10/18(火) 12:44:29.69 ID:oqQNu1fO
  for /f

  687 :デフォルトの名無しさん:2016/10/18(火) 12:46:48.12 ID:oqQNu1fO
  for /f "usebackq tokens=2*" %%a in ("hoge.txt") do sc \\HOGE qc %%a

  688 :デフォルトの名無しさん:2016/10/18(火) 12:59:57.92 ID:oqQNu1fO
  "tokens=1*" %%b が正しい.

  689 :デフォルトの名無しさん:2016/10/18(火) 13:04:01.66 ID:492hutXa
  面目ない, 誤解させてしまったかも.
  オイラが知りたいのは.
  sc \\HOGE query state= inactive |find "SERVICE_NAME" >hoge.txt
  で出力される下記を.
  SERVICE_NAME: AeLookupSvc
  SERVICE_NAME: ALG
  SERVICE_NAME: AppIDSvc
  SERVICE_NAME: AppleChargerSrv
  SERVICE_NAME: AppMgmt
  (以下. 略)
  先頭の文字列「SERVICE_NAME:」を外して出力したいというのが主旨です.
  AeLookupSvc
  ALG
  AppIDSvc
  AppleChargerSrv
  AppMgmt
  (以下. 略)

  690 :デフォルトの名無しさん:2016/10/18(火) 13:39:39.76 ID:oqQNu1fO
  for /f "tokens=1*" %%a in ('sc \\HOGE query state^=inactive ^| find
  "SERVICE_NAME"') do echo %%b >>hoge.txt

  691 :デフォルトの名無しさん:2016/10/18(火) 13:41:17.91 ID:l1RYXy70
  サービス扱うならPowerShellの方が楽でいいよ.
  バッチから呼ぶならこんな感じ.
  powershell -command

  692 :デフォルトの名無しさん:2016/10/18(火) 13:44:58.91 ID:l1RYXy70
  ダブルクオーテーション使うとそこで切れるんだけど書き込めてる人との違いってなんなんだろう.

  693 :デフォルトの名無しさん:2016/10/18(火) 13:49:59.99 ID:l1RYXy70
  powershell -command "Get-Service | ?{$_.StartType -eq 'Automatic' -and
  $_.Status -eq 'Stopped'}"

  694 :デフォルトの名無しさん:2016/10/18(火) 13:51:45.76 ID:flBcMs6G
  てすと.
  powershell -command "Get-Service | ?{$_.StartType -eq 'Automatic' -and
  $_.Status -eq 'Stopped'}"

  695 :デフォルトの名無しさん:2016/10/18(火) 13:52:36.16 ID:UJ1l7XRj
  setlocal enabledelayedexpansion
  for /f "tokens=1, 2 delims=:" %%i in ('sc \\HOGE query state^= inactive') do (
  if "%%i"=="SERVICE_NAME" set name=%%j
  echo;!name:~1!>hoge.txt
  )

  696 :デフォルトの名無しさん:2016/10/18(火) 17:21:44.41 ID:IWtXyw3/
  ありがとうございます.
  早速試してみたのですが・・・.
  まずパワーシェルの方は「$_.StartType -eq 'Automatic'」これが効かないようです.
  (「$_.Status -eq 'Stopped'」こちらは効いてます)
  バッチの方は1件目の「WwanSvc」だけで終ってしまうようです.

  697 :デフォルトの名無しさん:2016/10/18(火) 17:24:37.38 ID:XKgIhtEU
  バッチファイルってWindowsタブレットで使える?

  698 :デフォルトの名無しさん:2016/10/18(火) 17:25:51.36 ID:IWtXyw3/
  大事な事を忘れてました.
  CL:Windows7プロ SP1(32bit)6.1.7601
  SV:WindowsSV 2008R2 SP1(64bit)

  699 :デフォルトの名無しさん:2016/10/18(火) 17:59:25.19 ID:oqQNu1fO
  >「WwanSvc」だけで終ってしまう.
  >hoge.txtと上書きしてるんじゃ?>>hoge.txtと追記になってる?

  700 :デフォルトの名無しさん:2016/10/18(火) 20:40:09.09 ID:UJ1l7XRj
  アウチ!
  ミスってた.
  >>699の通り. 695追記になってない.
  x echo;!name:~1!>hoge.txt
  o echo;!name:~1!>>hoge.txt

  701 :デフォルトの名無しさん:2016/10/18(火) 22:14:57.94 ID:N6eA0nOq
  なるほど, 追記になってなかったんですね.
  ただ, 今度は同じサービス名が8回ずつ記録されるようになってしまいました.
  PCがおかしいのかなとwindows7とwindows8.1, そして懐かしのWindows2000で試しても.
  同じように8回ずつ記録されてしまうようです.
  AdobeFlashPlayerUpdateSvc
  AdobeFlashPlayerUpdateSvc
  AdobeFlashPlayerUpdateSvc
  AdobeFlashPlayerUpdateSvc
  AdobeFlashPlayerUpdateSvc
  AdobeFlashPlayerUpdateSvc
  AdobeFlashPlayerUpdateSvc
  AdobeFlashPlayerUpdateSvc
  ALG
  ALG
  ALG
  ALG
  ALG
  ALG
  ALG
  ALG
  AppIDSvc
  AppIDSvc
  AppIDSvc
  AppIDSvc
  AppIDSvc
  AppIDSvc
  AppIDSvc
  AppIDSvc

  702 :デフォルトの名無しさん:2016/10/18(火) 22:41:11.76 ID:UJ1l7XRj
  type nul>hoge.txt
  setlocal enabledelayedexpansion
  for /f "tokens=1, 2 delims=:" %%i in ('sc query state^= inactive') do (
  if "%%i"=="SERVICE_NAME" (
  set name=%%j
  echo;!name:~1!>>hoge.txt
  )
  )

  703 :デフォルトの名無しさん:2016/10/18(火) 23:32:59.96 ID:N6eA0nOq
  >>702
  成功しました.
  カッコの有無でなんでこんなに違うんだろうと不思議です.

  704 :デフォルトの名無しさん:2016/10/19(水) 01:04:29.51 ID:OIm1eZAK
  何がマズイっていうと.
  "SERVIE_NAME"がある行でサービス名を取得するまではよかったが.
  それが無い行でも前に取得したサービス名を出力するようになってたんだわな.
  1つのサービスに付いて8行情報があったから8行ずつ出力されてた・・・と.

  705 :デフォルトの名無しさん:2016/10/19(水) 01:12:10.60 ID:cKBmHXZY
  そんな回りくどい事しなくても>>690で出来んじゃん.

  706 :デフォルトの名無しさん:2016/10/19(水) 07:11:53.90 ID:Jbfd2Dlj
  >>690は一瞬コマンド窓が開くだけで動かなかったのです.

  707 :デフォルトの名無しさん:2016/10/19(水) 07:56:59.52 ID:OiCCOICb
  >>692
  2chのバグだろ.
  書き込み確認画面が出る際, " を使うと, そこで文字列の終了とみなされる.
  " を, \" とエスケープすれば, どうかな?

  708 :デフォルトの名無しさん:2016/10/19(水) 12:52:41.93 ID:nMHfZfYD
  &#34; と文字参照を使って書き込めばいいのでは?
  結果として, " となるはず.

  709 :694:2016/10/19(水) 13:03:34.54 ID:fhJbq8nW
  JaneXenoでは特別な事しなくても書き込めた.

  710 :デフォルトの名無しさん:2016/10/20(木) 18:11:41.71 ID:fyY9mWCP
  いっつもStyleで書いてるけど"で切れたことなど一度もないけどなあ.

  711 :デフォルトの名無しさん:2016/10/20(木) 18:13:00.13 ID:1rA0OcU3
  >>681
  遅くなってすいません.
  無事動きました.
  ありがとうございます.

  712 :デフォルトの名無しさん:2016/10/20(木) 19:03:20.93 ID:LBhOxlVJ
  ダブルクオーテーションで切れるのこれっぽい.
  http://echo.2ch.net/test/read.cgi/unix/1439563321/777
  自分も確かにこのケースだった.

  713 :デフォルトの名無しさん:2016/11/02(水) 06:03:13.96 ID:CHmLMhVd
  バッチファイル終了のお知らせ.
  "Microsoft Flow"が正式公開. さまざまなサービスを組み合わせた自動処理が可能 - 窓の杜.
  http://forest.watch.impress.co.jp/docs/news/1027809.html

  714 :デフォルトの名無しさん:2016/11/02(水) 06:40:56.27 ID:w2Q1/JQP
  アイデアは良いと思うが.
  >さまざまなアプリやサービスを組み合わせた自動処理を作成できるクラウドサービス"Microsoft Flow"を正式公開した.
  >"Microsoft Flow"は"**したら, xxする"といった一連の手続き(ワークフロー)をビジュアルでデザインし, 自動実行できるサービス.
  >料金は1ユーザー1カ月あたり750回までの実行であれば無料. 有償プランであれば実行回数が増える.
  回数制限で有料とかゴミすぎ.

  715 :デフォルトの名無しさん:2016/11/02(水) 09:32:20.20 ID:5fVzD+K5
  こんなのは華や茶の流派と同じで新しいのがでても統合などされることは無いんだよね.

  716 :デフォルトの名無しさん:2016/11/02(水) 23:59:36.62 ID:WEv5cQ3m
  >>713-714
  ワークフローなんか各社から出てるじゃん.

  717 :デフォルトの名無しさん:2016/11/04(金) 00:14:32.57 ID:0ODaAY82
  そういうのってネットに繋いでない時にも必要なのにクラウドサービスって.
  しかも有料って.

  718 :デフォルトの名無しさん:2016/11/04(金) 01:47:32.80 ID:DvwqGnEZ
  完全にスタンドアロンで放置して動かすときにクラウドなんて使ってられない.

  719 :デフォルトの名無しさん:2016/11/10(木) 06:45:58.93 ID:+oUm9x6Y
  TidyTabs Window Manager: give every program a tabbed user interface
  http://www.nurgo-software.com/products/tidytabs

  720 :デフォルトの名無しさん:2016/11/11(金) 12:54:54.72 ID:ZYU/THNy
  batファイルをつくりたいのですが, どのようにすればいいでしょうか.
  全くの初心者なのでヒントが欲しいです.
  目標としては,
  親フォルダAの中に, 子フォルダ[aaa]あああ, [aaa]いいい, [bbb]ううう.
  があります.
  (1.)([aaa]あああ)の[ ]内の文字(つまりaaa)を自動で取得し, その名前の新規フォルダを作成. (つまりaaaという名前の新規フォルダ)
  (2.)その後, 親フォルダA内の[aaa]が入っているフォルダを検索する.
  (3.) (2.)で検索された複数フォルダを(1.)で作成されたフォルダに入れる.
  という流れを自動で行いたいです.

  721 :デフォルトの名無しさん:2016/11/11(金) 14:42:02.48 ID:OyxHpcMK
  >>720
  親フォルダを引数で渡すとしての一例.
  @echo off
  pushd %1
  for %%i in ([*]*) do (
  for /f "tokens=1* delims=[]" %%j in ("%%~i") do >nul 2>&1 (md "%%~j"&move /y
  "%%~i" "%%~j")
  )
  popd

  722 :デフォルトの名無しさん:2016/11/11(金) 15:12:14.98 ID:p31+l1cx
  >>721
  最初のforは/dつけないとだめでは.

  723 :デフォルトの名無しさん:2016/11/11(金) 15:56:59.78 ID:OyxHpcMK
  おおー, フォルダだったのか.
  てっきりファイルだと思い込んでたよ.

  724 :デフォルトの名無しさん:2016/11/13(日) 18:37:37.78 ID:cer+jHW2
  質問させていただきます.
  初めてバッチファイル, コマンドプロンプトを勉強して作っているのですが, HTMLページから特定のURLを抜き出してバッチファイルに代入したいのですが,
  その場合はWSH等で抜き出さないと出来ませんでしょうか.

  725 :デフォルトの名無しさん:2016/11/13(日) 20:15:27.03 ID:YAp+h9P5
  >>724
  HTMLページって具体的に何?

  726 :デフォルトの名無しさん:2016/11/13(日) 20:16:08.95 ID:vGjlz1Ep
  そんな大雑把過ぎる質問では最適解など分かるはずもなくレスつかないよ.
  PowerShell使ったら?

  727 :デフォルトの名無しさん:2016/11/13(日) 20:19:41.15 ID:cer+jHW2
  >>725
  OPENREC.tvという動画サイトです.
  ここから動画ファイルのURLを吸い出して, エンコソフトをコマンドプロンプトに直接代入したいと思いまして・・・.
  >>726
  すみません, この手の事は不慣れで・・・.
  PowerShellというものを初めて知りましたので, 調べてみます.

  728 :デフォルトの名無しさん:2016/11/13(日) 23:00:08.77 ID:BL+CTUiW
  手段の前にまず手順を具体的に整理して見るといい.
  要件についてまったく何も知らない他人に.
  全部手作業でやってもらうよう依頼するとしたらどう説明する?

  729 :デフォルトの名無しさん:2016/11/14(月) 01:02:54.70 ID:csZc9y3a
  松岡修造みたいにすると思う.

  730 :デフォルトの名無しさん:2016/11/14(月) 13:10:56.92 ID:vvHHVAL2
  バッチなんて所詮手作業を自動化するだけ.
  ここでは手作業を自動化するのを支援することは出来るが.
  手作業で出来ないor内容がわかってない人はどうしようもない.

  731 :デフォルトの名無しさん:2016/11/14(月) 14:36:44.38 ID:O1UQmJEN
  >>727
  1.PowerShellで.NETFramework使う.
  2.PythonやRubyなんかのllを使う.
  3.C#で簡単プログラミング.
  さあ選べ.

  732 :デフォルトの名無しさん:2016/11/14(月) 15:07:34.34 ID:WHs7zj8I
  この場合は, バッチファイルにて.
  htmlを取得して, url文字列を抜き出して, エンコソフトにオプション渡し.
  ができるのか?, という問いなので, さあ答えは.

  733 :デフォルトの名無しさん:2016/11/14(月) 15:27:55.44 ID:bnBDmUvf
  >>727
  そこのサイトは知らんけど.
  >動画ファイルのURLを吸い出して.
  なんて書いてるけど今時動画ファイル直リンなんてあるの?手段すら分かってないんじゃない?
  この手の技術に明るくないのであれば既存ソフトを用いてUWSCやAHKで自動化が現実的だと思う.
  rtmpdumpみたいなcuiソフトがそのサイトで使えるならバッチで出来ると思うが.

  734 :デフォルトの名無しさん:2016/11/14(月) 15:29:20.63 ID:9SfC86lS
  動画サイトって普通ストリームじゃないの?
  URLからダウンロード, エンコって, まず手作業でどういう手順で行うのか説明してくれないと.
  wshやPowershellでだって出来るかどうかも答えられないよ.

  735 :デフォルトの名無しさん:2016/11/14(月) 19:02:24.40 ID:GWnO6+Yj
  >>731
  4のperlで・・・.
  >>732
  まさしくそういう事です.
  >>733
  ようはライブストリーミング動画が鯖側に保存してあって, それを録画再生するようなイメージです.
  それを, ffmpegというcuiソフトを使いtsファイルにしています.
  >>734
  今までは動画ページからm3u8形式の格納されてるURLをソースから引っ張ってきて, ffmpegを使いtsファイルにしていました.
  その一連の動作が面倒なので,
  動画ページのURLを貼り付けるだけで動画ページのソースからm3u8ファイルのURLを検索->ffmpegにm3u8ファイルのURLと動画ファイル名をコマンドに代入し,
  そのままソフトを走らせるというバッチファイルを作りたいと思っております.

  736 :デフォルトの名無しさん:2016/11/14(月) 19:40:40.70 ID:kXxSR+Dw
  >>735
  人に聞くならまず正しい日本語で頼む.
  > 今までは動画ページからm3u8形式の格納されてるURLをソースから引っ張ってきて.
  君には動画ページとかソースが何者かがわかってるんだろうけど, 他の人にはそれが何者なのか?どこから与えられるのか?とか全然わからない.

  737 :デフォルトの名無しさん:2016/11/14(月) 20:28:41.10 ID:8ZP1uHGR
  >>735
  その動画サイトとやらを教えられない理由があるなら.
  先に説明しておく方が親切だよ.

  738 :デフォルトの名無しさん:2016/11/14(月) 20:35:09.15 ID:GWnO6+Yj
  >>727でも書いた通り, openrec.tvというサイトです.
  動画ページはどこを見ても同じソースだと思うので深く考えず, URLを載せなかっただけですがやはり載せた方がよろしいでしょうか?
  divタグ内に変数で各情報が載っておりますが, そこは重要ではなく>>732が仰ってる通りです.

  739 :デフォルトの名無しさん:2016/11/14(月) 20:51:56.98 ID:sZZGpXNZ
  >>735
  普段使いのcURLというCUIなダウンローダーで試した, 使いたいツールがあるならお好みでどぞ.
  https://curl.haxx.se/
  https://bintray.com/artifact/download/vszakats/generic/curl-7.51.0-win32-mingw.7z
  Win32 - GenericにあるSSL, SSH対応版ね.
  前提として, 外部ツールの検索パスは設定済みとする.
  バッチファイルの引数としてURLをひとつ渡す. 例: batchfile.bat
  https://www.openrec.tv/movie/TvWlSwoCUOI
  ここから.
  @echo on
  setlocal ENABLEEXTENSIONS
  cd /D %~dp0
  @rem 引数有無と引数名チェック.
  if "%~1"=="" goto ERROR
  echo;%1|findstr /R /C:"^http" /C:"openrec" >NUL||(echo "%1" を処理できません) && goto
  ERROR
  @rem URLのアドレスとHTMLを環境変数へ設定.
  set ADDR=%1
  for %%I in (%1) do set HTML=%%~nxI
  @rem HTMLダウンロード.
  curl -L --max-redirs 10 -R -O %ADDR%
  @rem HTMLから文字列抽出.
  for /F "tokens=2 delims=<>| " %%I in ('type %HTML%^|findstr /R /C:"<title>"')
  do set TITLE=%%~I
  for /F "tokens=2 delims=, " %%I in ('type %HTML%^|find /I "m3u8"') do set
  TARGET=%%~I
  echo ffmpeg -c copy "%TITLE%.ts" -i "%TARGET%"
  pause
  exit
  ここまで.

  740 :デフォルトの名無しさん:2016/11/14(月) 20:56:46.40 ID:sZZGpXNZ
  すまそ, goto先がすっぽ抜けてた.
  中略.
  echo ffmpeg -c copy "%TITLE%.ts" -i "%TARGET%"
  pause
  exit
  :ERROR
  echo 引数が無効のため処理できませんでした.
  pause
  exit
  ここまで.

  741 :デフォルトの名無しさん:2016/11/14(月) 21:08:57.72 ID:nGSer73d
  curlってすごく便利なコマンドがあったね.
  連番ファイルとか今までperlやbashでスクリプト書いてたのがアホらしい.

  742 :デフォルトの名無しさん:2016/11/14(月) 21:15:57.14 ID:sZZGpXNZ
  >>739
  追伸, 安全対策としてcurl処理のすぐ下に条件分岐も追加しておいてほしい.
  @rem HTMLダウンロード.
  curl -L --max-redirs 10 -R -O %ADDR%
  if not %ERRORLEVEL%==0 goto ERROR

  743 :デフォルトの名無しさん:2016/11/14(月) 21:28:24.00 ID:GWnO6+Yj
  おお, サンクスです・・・.
  が, 一つわがままを言わせてもらうとやっぱり外部バイナリなりを使わないと出来ないですか・・・.
  どのPCでもすぐに使えるようにしておくと楽だなーと思ったのがきっかけだったので・・・.

  744 :デフォルトの名無しさん:2016/11/14(月) 21:35:57.24 ID:4gwDzXsT
  そもそもffmpeg使う時点で外部バイナリ必須では?
  それでも外部バイナリに頼らないでhttpダウンロードしたいっていうのなら.
  bitsadmin /transferって手がなくはないけど.

  745 :デフォルトの名無しさん:2016/11/14(月) 21:37:40.26 ID:sZZGpXNZ
  >>743
  bitsadmin.exe があるけど, 拡張子がないサイトだと無理っぽかった, 俺環かもだが.
  試してダメだったためcurlに書き換えた.

  746 :デフォルトの名無しさん:2016/11/14(月) 21:38:23.41 ID:GWnO6+Yj
  なんというか, インストール不要であるのが理想的だなと・・・.
  それで, 一時はWSHでjavascriptでHMTLをダウンロードしようかと考えていました.

  747 :デフォルトの名無しさん:2016/11/14(月) 21:58:48.06 ID:4gwDzXsT
  >>745
  それは知らなかった.
  そうすると後はPowerShellとか.
  powershell -C "$h = Invoke-WebRequest http://example.com; $h.Content"

  748 :デフォルトの名無しさん:2016/11/15(火) 08:29:35.25 ID:bLa91iv6
  vbsでhttpすればいいんじゃね.

  749 :デフォルトの名無しさん:2016/11/16(水) 04:24:03.14 ID:tgJZOdTt
  dir /ad /b /s "abc"
  サブディレクトリ含め"abc"フォルダのパスを列挙したかったんだけど.
  子に"abc"がある時と無い時で挙動が全く変わる.
  子に"abc"が無ければ望み通りの結果になるけど.
  子に"abc"があるとそこで dir /ad /b /s されて全てのディレクトリが列挙される.
  "*abc"だと"zabc"も出て来るし.
  "*\abc"や"C:\TEST\*\abc"は構文error
  if exist "abc" で例外処理しないとダメ?
  何かサクッと出来る方法があるならお願いします.

  750 :デフォルトの名無しさん:2016/11/16(水) 05:28:34.82 ID:g04DIhTd
  "\abc"

  751 :デフォルトの名無しさん:2016/11/16(水) 06:28:47.52 ID:tgJZOdTt
  >>750
  それやると何故かカレントディレクトリは C:\TESTなのに (echo %cd% で確認)
  ドライブ全体から検索してるのか C:\Users や C:\Program Files 配下の abcディレクトリまで表示されるんだけど Win10

  752 :デフォルトの名無しさん:2016/11/16(水) 09:56:14.36 ID:l4m+U27H
  こういうこと?
  dir /ad /s /b | findstr /r \abc$

  753 :デフォルトの名無しさん:2016/11/16(水) 16:58:26.02 ID:tgJZOdTt
  >>752
  dir /ad /b /s | findstr /r "\\abc$"
  これで行けそうかな. ありがとう.
  /s スイッチの時フルパスで無ければ強制的にディレクトリ名orファイル名と見做してくれればいいのに.
  子にあると対象パスの省略形と見なし, 無ければ検索するディレクトリ&ファイル名になるとか罠もいいところだわ.
  dir /ad /b /s "\abc"
  これだとカレントディレクトリが無視されてドライブ全体?からabcフォルダが検索されるんだけど理由が分かる人が居たら教えて下さい.

  754 :デフォルトの名無しさん:2016/11/16(水) 19:53:01.57 ID:G/QgDslQ
  >>753
  for /r %%i in (.) do if "%%~nxi" == "abc" echo "%%~fi"
  \abc みたいに先頭に \ があるとそれはルートを示すんだよ.
  DOS の頃から同じ仕様なんだけど.

  755 :デフォルトの名無しさん:2016/11/16(水) 20:29:10.66 ID:G/QgDslQ
  >>754
  ABC とか Abc とか abC とか有ったら /i を追加.
  for /r %%i in (.) do if /i "%%~nxi" == "abc" echo "%%~fi"

  756 :デフォルトの名無しさん:2016/11/16(水) 20:36:19.30 ID:tgJZOdTt
  dir /ad /b /s | findstr /r "\\%name%$"
  てな場合nameの末尾にスペースが入ると意図した結果にならず.
  dir /ad /b /s | findstr /e "\%name%" で解決出来ました.
  >>753
  for /r とif での方が間違いが無さそうですね. ありがとう.
  "\abc" は, まず dir /ad /b /s "C:\abc" とドライブ省略形の対象ディレクトリと見做して.
  対象が無ければ検索するディレクトリ名&ファイル名として扱われている感じなのかな.

  757 :デフォルトの名無しさん:2016/11/16(水) 22:35:57.05 ID:fww2Eit8
  いままでdir /sのディレクトリ指定は開始位置を指定するもんだとばかり思ってたけど違うんだな.
  指定ディレクトリが存在してたらこの通りで他のディレクトリの下は対象外なんだが.
  存在しないと他のディレクトリの下へ探しにいくんだな.
  気をつけないといけないな.
  実行速度は遅いだろうが.
  forfiles -s -mabc -c"cmd /c if @ISDIR==TRUE echo @PATH\@FILE"

  758 :デフォルトの名無しさん:2016/11/17(木) 01:33:10.64 ID:45hMt1B7
  >>753
  dir .\abc /ad /b /s
  カレント配下ならドット付けとくんじゃないの.

  759 :デフォルトの名無しさん:2016/11/17(木) 01:41:34.94 ID:3AVvQ2An
  DOS/Windowsでは, 単にabcとするのが普通で.\abcとは書かないかな.

  760 :デフォルトの名無しさん:2016/11/18(金) 00:23:10.73 ID:MVrqW6/3
  さらに複数パターンの一致を検出してみる.
  for /r /d %%i in ("abc.*" "xyz.*") do if "%%~xi"=="" echo "%%~fi"

  761 :デフォルトの名無しさん:2016/11/18(金) 05:45:03.27 ID:aprTvklx
  >>759
  は?

  762 :デフォルトの名無しさん:2016/11/18(金) 07:12:41.73 ID:MVrqW6/3
  フォルダに拡張子が無いとしたら.
  dir /ad /b /s abc.*
  で良さそう.

  763 :デフォルトの名無しさん:2016/11/18(金) 15:43:00.69 ID:MssNdFsD
  >>760
  >>762
  "abc.*"だと"abc."が最低条件になって"abc"は除外されるものだと思ってたけど"abc"も出てくるね.
  実際は末尾"."のフォルダは作れないから拡張子の付いているフォルダしか出ないと思ってた.
  なんで???"."て特殊なの?ちょっと目からウロコ.

  764 :デフォルトの名無しさん:2016/11/18(金) 16:29:03.81 ID:TqE/rt71
  もともとドットは拡張子の区切り記号だったわけで.
  abc. = abc
  Windowsになって複数のドットも付けられるようになったが.
  ドット2つ使うとファイル管理領域も2倍使う結果に.

  765 :デフォルトの名無しさん:2016/11/18(金) 16:44:12.24 ID:MssNdFsD
  拡張子の区切り記号なのは分かるけどそれが.
  abc.==abc
  となる理由が分からない.
  ドットが区切り記号だからファイル名(文字列)と見做さず比較の際に無視されるとかなのかな?

  766 :デフォルトの名無しさん:2016/11/18(金) 16:52:38.55 ID:TqE/rt71
  ファイル管理領域は, ファイル名部分と拡張子部分とに分かれており.
  ドットはその管理領域のどこにも書き込まれない.
  単に区分けする識別子の役割りしか持たない.
  つまり, 管理上は, ファイル名=abc, 拡張子=NULLってなってる.
  だからabc.とabcの見分けは付かない.
  エクスプローラでファイルをabc.で作成したってabcファイルが作られるだけ.

  767 :デフォルトの名無しさん:2016/11/18(金) 17:06:48.25 ID:TqE/rt71
  なんか勘違いしてた気がする.
  LFNではドットもそのまま入ってる.

  768 :デフォルトの名無しさん:2016/11/18(金) 17:12:57.12 ID:MssNdFsD
  >>766
  >ドットはその管理領域のどこにも書き込まれない.
  >管理上は, ファイル名=abc, 拡張子=NULL
  >だからabc.とabcの見分けは付かない.
  詳しい説明をありがとうございます.
  納得出来ました. もうなんと言って良いのやら.
  ひとつ理解が深まりました. ドラクエのレベルアップの音が鳴り響いた気分です.

  769 :デフォルトの名無しさん:2016/11/18(金) 17:24:08.15 ID:MssNdFsD
  コマンド側が古い仕様を引き摺ってると判断しておきます.

  770 :デフォルトの名無しさん:2016/11/18(金) 18:07:23.95 ID:TqE/rt71
  おそらくコマンドやエクスプローラは, 最後のドットに特別な意味(拡張子)を持たせて.
  ドットだけなら削除する仕様なんだろう.

  771 :デフォルトの名無しさん:2016/11/18(金) 21:00:10.73 ID:TqE/rt71
  ピリオドと半角空白には色々と罠があるかも.
  md aaa
  cd "aaa....."
  md "abc. . . " (エクスプローラでのフォルダ・ファイル作成も同じ)
  dir "abc.."
  dir "abc..."(abc..とは異なる結果に)

  772 :デフォルトの名無しさん:2016/11/19(土) 03:25:52.98 ID:JjiTnU56
  #!/bin/bash
  # すれ違いですまないが.
  apt-get moo #に見えてきた.
  echo "Enter to Exit"
  read wait

  773 :デフォルトの名無しさん:2016/11/19(土) 04:02:30.76 ID:6BFx2XsN
  すれ違い杉.

  774 :デフォルトの名無しさん:2016/11/19(土) 10:40:41.73 ID:I/7/X0k0
    ケイン・コスギ.
    英才・出木杉.
    ・・・・板違い.

  775 :デフォルトの名無しさん:2016/11/19(土) 11:47:06.46 ID:HaGDkE41
  >>766-767
  合ってるよ.
  短い名前(いわゆる 8.3形式)ではカレントディレクトリの "." と ".." を除いて "." は記録されない.
  https://ja.m.wikipedia.org/wiki/8.3%E5%BD%A2%E5%BC%8F
  LFN ではそのまま Unicode で記録される.

  776 :デフォルトの名無しさん:2016/11/20(日) 01:32:41.69 ID:5hQ1kNDg
  %random% って代入すると機能を失って, クリアするとまた復活するのね.
  一時変数の名前に使うとちょっと便利かも.

  777 :デフォルトの名無しさん:2016/11/20(日) 08:06:59.15 ID:plO26YRe
  777

  778 :デフォルトの名無しさん:2016/11/20(日) 22:07:31.97 ID:mYrLDeuJ
  >>776
  バグの元だろ.

  779 :デフォルトの名無しさん:2016/11/21(月) 02:59:43.79 ID:bNk8tUAy
  %errorlevel%とか%date%に代入するとかもやりそうな気配.

  780 :デフォルトの名無しさん:2016/11/21(月) 18:40:20.55 ID:1UsqdqxT
  win10が時期アプデでコマンドラインシェルをデフォルトから格下げだってさ. えらいこっちゃ.
  fossBytesに11月19日(米国時間)に掲載された記事「Microsoft Replaces Command Prompt
  With PowerShell As Windows 10 Default Shell」が, Windows 10のデフォルトシェルが.
  コマンドプロンプトからPowerShellに変更されると伝えた. Windows 10 Insider Build 14971で.
  すでに入れ替えが実施されたと説明がある.
  Windows 10 Insider Build 14971では, これ以外にもMicrosoft EdgeでEPUB電子ブックを読む.
  機能や新しいPaint 3Dアプリケーションの導入などが実施されている.
  (後略)
  http://news.mynavi.jp/news/2016/11/21/374/

  781 :デフォルトの名無しさん:2016/11/21(月) 19:58:33.06 ID:4eyhD8wV
  >>780
  まあそろそろいいかなって思うわ.
  慣れれば PowerShell めっちゃ便利やし.

  782 :デフォルトの名無しさん:2016/11/22(火) 16:32:55.50 ID:OivDuOyC
  >>779
  おもしろい, どうなるのだろう.

  783 :デフォルトの名無しさん:2016/11/23(水) 04:53:34.68 ID:lMEr/SWa
  %参照は上書きの値, if errorlevel文には set errorlevelしても無効.
  set errorlevel=5 などバッチ内で errorlevelを自分で設定する場合は if errorlevel文は使えない.
  if %errorlevel% GEQ 1 などであれば可.

  784 :デフォルトの名無しさん:2016/11/23(水) 09:54:12.77 ID:pZmHnyz7
  WindowsPEも起動したらPowershellで始まるの?
  最新のヤツでもマトモに動かせないのに.

  785 :デフォルトの名無しさん:2016/11/24(木) 00:02:10.88 ID:b21vlpof
  >>721>>722
  ありがとうございます.
  返信遅くなりました.
  ただ, せっかくヒントを頂いたのですが, 想像より自身のレベルに見合わないスクリプトでした. 実際につくるのは先になりそうです・・・・・・.

  786 :デフォルトの名無しさん:2016/11/24(木) 00:50:33.49 ID:aisAFXaT
  >>785
  >>721-722 はヒントじゃなくて720の要件の全部だぞ.
  721をbatで保存してそのbatに親フォルダAをドロップすれば720の通りになる.

  787 :デフォルトの名無しさん:2016/11/26(土) 00:47:02.26 ID:61EwoExF
  >>721>>722>>786
  ありがとうございます!できました.
  >>722の方が言っていた直しが正しく行えなかっただけでした.
  皆さん本当にありがとうございます.
  自分で書けるようにもなりたいのですが, 皆さんどのようにバッチファイルを学んだのでしょうか.
  サイトなどを回ってもなかなか進まなくて・・・・・・.

  788 :デフォルトの名無しさん:2016/11/26(土) 02:10:39.28 ID:CoCq2KiG
  for /?
  set /?
  この二つ読んでわからないところをぐぐる.

  789 :デフォルトの名無しさん:2016/11/26(土) 04:48:01.93 ID:0eLSGHGV
  「バッチ 入門」でググって出て来るページを読む.
  コマンド一覧を載せてるサイトを見てどんなコマンドがあるのか一通り目を通す(暗記までする必要なし)
  /?でヘルプ見ながら書いて一つ一つ試す.
  pauseを挟みつつ期待した通りに動いてるか確認しながら書いていく.
  分からなければここで質問.
  自分の場合, リダイレクトとかエスケープとかcall set で遅延環境変数を使わない方法とかはここで教わった.
  何をやっているのか分からないものは必ず解読するようにすれば覚えていける.
  動作を理解していないとテストでは問題無く動いても本番でエラーになる事もあるからファイル操作させたりする場合は予めバックアップを取る.
  処理対象が大量にある場合などは1度に全てを処理せず何度かに分ける.
  721で難しそうなのはforのみ.
  最初のforで対象フォルダ("[*]*"にマッチするもの)を抽出してる.
  for /d %%i in ([*]*) do echo %%i
  と分解してみれば分かりやすい.
  for /f "tokens=1* delims=[]" %%j in ("%%~i") do
  delims=[] は "[" "]" の文字を区切り文字に指定.
  tokens=1* は1つ目のトークンを%%jに残りを%%kに.
  "[aaa]あああ"であれば %%jに"aaa"が %%kに"あああ"が入る.
  md "%%~j"&move /y "%%~i" "%%~j"
  フォルダ作成&移動.
  "[]あああ"なんてのがあると想定していない"あああ"フォルダに移動になるから注意ね.

  790 :デフォルトの名無しさん:2016/11/27(日) 09:52:07.02 ID:mLcTWF4w
  おはようございます.
  同一フォルダ内にある複数ファイル.
  a.jpg, あ.jpg, 1.jpg等を一括で001-a.jpg, 002-あ.jpg, 003-1.jpgに連番を付加する.
  batファイルを教えて下さい!

  791 :デフォルトの名無しさん:2016/11/27(日) 11:17:31.27 ID:2v7FHJZn
  a, あ, 1の順序付けにどういう規則をつけるの?
  普通の昇順降順ではこの順番にならないけど.

  792 :デフォルトの名無しさん:2016/11/27(日) 11:19:13.96 ID:mLcTWF4w
  紛らわしくてすいません.
  普通の昇降順でお願いします.

  793 :デフォルトの名無しさん:2016/11/27(日) 11:33:53.80 ID:2v7FHJZn
  こういうのって結構難しいんだよね.
  例えば,
  a.jpgと001-a.jpgの二つのファイルがあったら.
  先に001-a.jpgをリネームして001-001-a.jpgにしないと.
  ファイル名が重複してリネームできなくなるし.
  (さらに001-001-001-a.jpgがあったりすると. . . )

  794 :デフォルトの名無しさん:2016/11/27(日) 11:57:08.03 ID:mLcTWF4w
  単純に今あるファイル名の先頭に001や002と連番をつけるだけで大丈夫です.
  この前作ったのですが誤ってファイルを消してしまって(泣.

  795 :デフォルトの名無しさん:2016/11/27(日) 12:22:44.82 ID:2v7FHJZn
  >>794
  正常系だけでいいのなら.
  @echo off
  pushd %1
  set n=0
  for /f "delims=" %%i in ('dir /b /on *.jpg') do (
  set /a n+=1
  call set nn=00%%n%%
  call set nn=%%nn:~-3%%
  call ren "%%~i" %%nn%%-"%%~i"
  )
  popd

  796 :デフォルトの名無しさん:2016/11/27(日) 12:47:37.07 ID:3PyehhaB
  作成代行スレじゃないので自力でここまではできたけどここから先がわからない.
  というような努力の跡がほしいなぁ.

  797 :デフォルトの名無しさん:2016/11/27(日) 15:20:44.02 ID:V1m99hal
  @echo off
  pushd "%~dp1"
  set n=1001
  :ARGCHK
  if "%~1"=="" pause &exit /b
  ren "%~1" "%n:~-3%-%~nx1"
  echo.
  echo "%~nx1"
  echo "%n:~-3%-%~nx1"
  set /a n+=1
  shift &goto :ARGCHK
  選択ファイルを送るやバッチにD&D. 001から999まで.
  Winの仕様によりD&Dの際は先頭ファイルを掴まないと順番が狂うので注意.

  798 :デフォルトの名無しさん:2016/12/04(日) 12:46:34.73 ID:RTx2BH8+
  >>788>>799
  ありがとうございます!返信遅くなりました.
  とくに799の方, 具体的に話していただいて本当に助かりました.

  799 :デフォルトの名無しさん:2016/12/04(日) 16:10:49.30 ID:J7/x1rKh
  799

  800 :デフォルトの名無しさん:2016/12/04(日) 19:03:21.48 ID:rwQpbrj5
  799は素晴らしいな.

  801 :デフォルトの名無しさん:2016/12/10(土) 00:17:50.34 ID:CO5JTr10
  pushd "%~dp1" || exit /b
  if not exist "title.txt" exit /b
  for /f "usebackq delims=" %%a in ("title.txt") do (
  ren "%~1" "%%~a%~x1"
  shift
  )
  forの中でshiftが働きません.
  どう書けば良いでしょうか?
  選択ファイルをドラッグ&ドロップしてtitle.txtの順通りにリネームしたいです.

  802 :801:2016/12/10(土) 14:16:28.41 ID:CO5JTr10
  自己解決しました.
  @echo off
  pushd "%~dp1" || exit /b
  if not exist "title.txt" exit /b
  :LOOP
  if "%~1"=="" pause &exit /b
  for /f "usebackq %SKIP%%N% delims=" %%a in ("title.txt") do (
  ren "%~1" "%%~a%~x1" || (echo "%~1" "%%~a%~x1"&pause &exit /b)
  goto :NEXT
  )
  :NEXT
  if not defined SKIP set SKIP=skip=
  set /a N+=1
  shift &goto :LOOP

  803 :デフォルトの名無しさん:2016/12/10(土) 15:09:17.17 ID:ga5ibtHW
  forループは実行前に式展開されてから実行されるので.
  式展開時に変数が内容の文字列に置き換わってしまい変数の意味を失う.
  @echo offを取って表示させたらわかるだろう.
  面倒なのでヒントだけ.
  for %%a 〜 do (
  set b=%%a
  call echo %%a - "%%~1" - %%b%%
  shift
  )

  804 :デフォルトの名無しさん:2016/12/10(土) 16:20:43.39 ID:CO5JTr10
  >>803
  ありがとうございます.
  callで遅延展開風にする場合%で囲むと思っていたので.
  call ren "%%~1%" "%%~a%%~x1%" と書いていて出来ませんでした.
  call ren "%%~1" "%%~a%%~x1" と書けば良かったのですね.
  %で囲むではなく「%を重ねる」と覚えるようにします.

  805 :デフォルトの名無しさん:2016/12/10(土) 16:27:31.21 ID:ga5ibtHW
  式評価されるということは,
  %%->%になるっていうことなんだよ.
  (これは%を表記する方法として覚えるけど)
  set a=echo hoge
  call %%a%%
  call call %%%%a%%%%

  806 :デフォルトの名無しさん:2016/12/11(日) 10:51:05.79 ID:HwfbXu/f
  >>804
  引数や変数を遅延展開するのは無理あるよ.
  あらかじめ環境変数をセットしたものが対象であり, どのコマンドにも適用できるわけじゃない.
  パーセントを前方に重ねるのはバッチ上の書式, 一重囲みが環境変数, call command 二重囲みが遅延展開というように意味が異なる.
  よくわからなければエクスクラメーション記号にするか, カッコを使った複文を避けてサブルーチンに渡す, など別の方法をとる.

  807 :デフォルトの名無しさん:2016/12/11(日) 15:29:30.80 ID:wBKcLq5q
  遅延展開というより.
  式評価が, 実行時とcallの2回実施される.
  一回目の式評価ではまだ変数展開が行われずに残ったままにしたい.
  ってのが%%にする理由.

  808 :デフォルトの名無しさん:2016/12/11(日) 15:39:49.38 ID:wBKcLq5q
  for /F %%i in ('command')
  形式の'command'の部分, ここにも式評価が入ることが結構忘れられる.

  809 :デフォルトの名無しさん:2016/12/11(日) 16:35:43.66 ID:wBKcLq5q
  補足.
  commandにパイプやリダイレクト記号を書くような場合は.
  ^| や ^>とかのように'^'を付けないとエラーになるから忘れるということは無いだろうが.
  忘れる場合ってのは, >>517や>>532のような場合のことで.
  元のように%一つにしておくと何が起き得るかは"ab%cd%ef"とかが入ってる場合を考えれば解かる.

  810 :デフォルトの名無しさん:2016/12/11(日) 22:14:02.08 ID:iHWHaBgd
  \/:*?"<>|
  テキストファイルに含まれるこれらのファイル名に使えない文字を全角文字に置換したいのですが.
  バッチで試してみたところ"*は無理でした.
  バッチから使えるcuiソフトなどで良いものや何か方法があれば教えて下さい.
  あ/あ "abc"
  など括弧のように対応する"がある場合は, あ/あ "abc"
  あ/あ a"
  など対応するものが無ければ, あ/あ a"
  みたいに出来れば理想です.

  811 :デフォルトの名無しさん:2016/12/11(日) 22:19:57.19 ID:iHWHaBgd
  あ/あ "abc"
  が何か分かり難くなってますが.
  左側が左ダブル引用符という下から上へコロン打ってるやつで.
  右側が右ダブル引用符で上から下へのコロンです.

  812 :デフォルトの名無しさん:2016/12/14(水) 00:05:22.68 ID:vS/jNHEE
  netstat みたいに気軽で, もっと高速にアクセス中のホストが分かる方法ないでしょうか?
  というのは, EdgeのURLを取得するのはかなり面倒なので.
  でも, netstat の情報は1分以上遅延するので, できれば数秒で知りたい.

  813 :デフォルトの名無しさん:2016/12/14(水) 00:51:13.45 ID:/GnWlzD4
  >>812
  netstatそんなに遅れるか?
  名前解決に時間が掛かってるんなら-nを付けて数値のみで表示させてみては?

  814 :デフォルトの名無しさん:2016/12/14(水) 01:19:09.19 ID:vS/jNHEE
  >>813
  なるほど, -nなら一瞬でした. w.
  名前で反応したかったので, -fにしてました.

  815 :デフォルトの名無しさん:2016/12/14(水) 01:31:44.57 ID:/GnWlzD4
  セッション数幾つぐらいなのか知らないけど.
  普通名前解決に秒単位なんてかからないよ.
  自分のプロバイダのところのDNSサーバー使ってるか?

  816 :デフォルトの名無しさん:2016/12/14(水) 01:54:27.20 ID:vS/jNHEE
  >>815
  特に何もしてないので, プロバイダのDNSだと思います.
  普段は4つですが, ブラウザ開くと1ページでも何十個も出てきますね.
  よく見ると, 一瞬で何十個もリストアップされる場面と, ひっかかる場面があって, 相手先によるようですね.

  817 :デフォルトの名無しさん:2016/12/14(水) 03:29:46.39 ID:PdV20HuV
  >>810-811
  ファイル名には, 半角英数字と, _ アンダーバーだけを使うこと.
  バグるアプリがあるから, それら以外の文字は使うな.

  818 :デフォルトの名無しさん:2016/12/14(水) 04:28:14.68 ID:/GnWlzD4
  まあ今時ファイル名に日本語を使うなってのはちょっと無理っぽいだろ.
  良いものがあるかどうかは俺は知らんよ(人に探させずに自分で探すのがいいだろう)
  PowerShellやWSHでやる分にはそれくらいは出来るだろうけど.
  ファイル名にはいろいろ落とし穴があるからなあ.
  長さ制限とか, con, com1等のデバイス名とか後につくピリオドや半角空白とか.
  com1. ..txt
  とか作れない.

  819 :デフォルトの名無しさん:2016/12/14(水) 17:45:01.83 ID:vFnJFYnV
  コマンドラインから「システムの環境変数」を参照するのってできる?
  具体的には最近のJavaインストールすると,
  システムの環境変数PATHの先頭に余計なもの追加しやがるので.
  それを削除するスクリプト書きたいんだよね.
  設定は setx 使えばいいらしいんで, 参照さえできれば削除できるかなーと.

  820 :デフォルトの名無しさん:2016/12/14(水) 17:55:14.06 ID:puNU7ctc
  reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
  個人的には reg export 使ってファイルでごにょるのが好み.

  821 :デフォルトの名無しさん:2016/12/14(水) 21:30:56.66 ID:PdV20HuV
  PowerShell_ise では, 大文字・小文字は同一として扱われる.
  環境変数PATHを表示する.
  $Env:Path
  設定は,
  $str = ";C:\Program Files\Internet Explorer\"
  set-item -path env:path -value "$Env:Path + $str" -WhatIf
  -WhatIf を付けているので, 実際には実行されないで, 結果を見れる.

  822 :デフォルトの名無しさん:2016/12/14(水) 23:47:39.26 ID:vFnJFYnV
  >>820
  さんくす.

  823 :デフォルトの名無しさん:2016/12/15(木) 22:24:24.35 ID:Jry/Bq76
  このスレってやっぱり仕事でCMD使ってる人がほとんどなのかな?

  824 :デフォルトの名無しさん:2016/12/15(木) 23:46:26.73 ID:Jj9qQdSY
  余裕で趣味です.

  825 :デフォルトの名無しさん:2016/12/16(金) 00:25:58.77 ID:EPzN1wXR
  今もバッチで色々やってるけど.
  そろそろPowershell覚えた方がいいんかナー.

  826 :デフォルトの名無しさん:2016/12/16(金) 03:59:28.83 ID:rja7Rz9P
  かなり前からそう思ってるけど.Net覚えるのが面倒臭くて先延ばしにしたままだわ.

  827 :デフォルトの名無しさん:2016/12/16(金) 19:20:13.39 ID:UvIhWraO
  少し前から cmd/wsh+vbs から PowerShell に移行したけどチョー楽しい.
  ただ各所にトリッキーなトラップがあるのと比較演算子が -eq とか -lt とかなのがいまだに慣れない.

  828 :デフォルトの名無しさん:2016/12/17(土) 20:01:48.32 ID:rAxcOYFz
  キッティングで使ってるけど.
  PowerShellはストアアプリの駆除がメインだな.

  829 :デフォルトの名無しさん:2016/12/18(日) 08:18:40.79 ID:qKtu6SDf
  シェルスクリプトはリダイレクトに > | < 使ったアホのせいで.
  比較演算子がまともに使えなくなったのが痛い.
  PowerShellではその悪習を断ち切って欲しかった.

  830 :デフォルトの名無しさん:2016/12/18(日) 11:49:41.76 ID:djwC/Ohb
  リダイレクトに<>を使ったのは大成功だったと思うがな.
  PowerShellでヘンテコな構文を導入したところで,
  マイクソシネって言われるだけじゃん.
  悪臭というなら, パス区切り文字の\だろ.

  831 :デフォルトの名無しさん:2016/12/18(日) 15:58:05.60 ID:oHmdKz4q
  []も問題起こすよね.

  832 :デフォルトの名無しさん:2016/12/18(日) 16:00:06.55 ID:oHmdKz4q
  なんか四角形に見える. w.
  『 [ 』と『 ] 』ね.

  833 :デフォルトの名無しさん:2016/12/19(月) 12:20:52.68 ID:H16UOEk6
  豆腐屋って減ったよなあ.

  834 :デフォルトの名無しさん:2016/12/19(月) 21:24:30.96 ID:j5IwDTpi
  峠を攻める豆腐屋.

  835 :デフォルトの名無しさん:2016/12/19(月) 22:09:00.93 ID:EFgj4hJx
  というよりも小売りが・・・.
  八百屋なんて, そういうのがネタになっている商店街か,
  近くに田畑があるようなところでしか見なくなったよ.
  ほとんど全ての街ではスーパーでいいからな.
  そう考えると, 花屋は頑張っている.
  未だにそれなりの数が残っているよな.
  ま, スーパーの置き場所は限られているからか.
  あとは客ひとりの利益率も悪くないんだろうなあ.

  836 :デフォルトの名無しさん:2016/12/23(金) 13:16:48.65 ID:C13rqdFY
  自身にマウントされてるドライブ/フォルダ名を指定してその対象がローカルドライブか否か判別できるコマンドってありますか?

  837 :デフォルトの名無しさん:2016/12/23(金) 13:19:26.61 ID:C13rqdFY
  あれ, なんか投稿が切れてる・・・.
  自身にマウントされてるドライブ/フォルダ名を指定してその対象がローカルドライブか否か判別できるコマンドってありますか?
  『net use ドライブレター』でCIFS/WebDAVでマウントされた物かそうでないかは判断できるけど,
  Dokanとかでマウントされた物も含めて, ネットワークドライブ全般を判別したいです.
  (ただiSCSI/FCとかのブロックデバイスは仕方ないかなと思ってます)
  よろしくお願いします.

  838 :デフォルトの名無しさん:2016/12/23(金) 20:54:24.61 ID:QxIckOqH
  >>837
  俺は以下の要領でVBScriptと併用してる.
  http://toro.2ch.net/test/read.cgi/tech/1374205515/587
  >587 : デフォルトの名無しさん[sage]:2014/06/16(月) 18:45:29.61 ID:R0cE173n [1/1回]
  >>>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ディスク.

  839 :837:2016/12/23(金) 22:21:21.24 ID:l7ZH1QCK
  >>838
  ありがとうございます. ちゃんと機能することを確認しました.
  ちなみにDokanのWin-SSHFSでマウントしたドライブは,
  エクスプローラーで確認するとHDDのアイコンにも関わらず.
  上記のVBスクリプトの出力は何故か1でした.
  流石にリパース・ポイントでマウントされているフォルダの情報とか.
  までは拾えないですね.
  ファイルシステムやパーテションの下位レイヤーに位置している.
  デバイスの情報までバッチで拾うのは無理があるとは思いますが.

  840 :デフォルトの名無しさん:2016/12/23(金) 23:59:30.85 ID:QxIckOqH
  >>839
  あとは https://technet.microsoft.com/ja-jp/scriptcenter あたりで,
  他に使えそうな構文がないかどうか探すしかないのでは?
  ちなみに以下の1行をVBScriptファイルとして保存してから別途呼び出す方式にすれば, 任意のドライブにメディアが挿入されているかどうかを判定可能.
  [下矢印]
  WScript.Echo
  CStr(CreateObject("Scripting.FileSystemObject").GetDrive(WScript.Arguments(0)).IsReady)

  841 :837:2016/12/24(土) 08:36:33.47 ID:bGXjBeNc
  >>840
  ありがとうございます.
  こちらのツールも勝手がよさそうですね. 使わせていただきます.

  842 :デフォルトの名無しさん:2016/12/24(土) 12:05:37.82 ID:mYH1sKhw
  WSH等を使う・・・と言ってたらバッチの出番が無くなったりしてな.

  843 :デフォルトの名無しさん:2016/12/27(火) 22:52:31.05 ID:tD8K2H9A
  errorleveになぜか9009が急に出はじめて.
  びっくりして検索したら, いろいろ出た.

  844 :デフォルトの名無しさん:2017/01/02(月) 07:34:29.54 ID:Jfm6LKzZ
  msys等のprintf をプロンプトから forループ, 変数 %s で実行すると困る, って夢を見たんだ.
  @for /d %s in ("%ProgramFiles%\M*") do @printf """%"s""" %"s"\n" "%s" "%s"
  (ワケワカラン・・・ もう一回寝たら何かひらめくかな・・・)

  845 :デフォルトの名無しさん:2017/01/07(土) 01:17:44.86 ID:mJLtkeqF
  http://pastebin.com/mEHBJq8T
  こんな感じでmp4からpng形式で切り抜きたいのですが, 出来ません.
  お願いします.

  846 :デフォルトの名無しさん:2017/01/07(土) 01:42:13.02 ID:QYFKEjsV
  >>845
  FILENAMEを%で囲ってないからでは.

  847 :通りすがり:2017/01/07(土) 09:57:36.05 ID:YuFs6plI
  FILENAMEを, %で囲めば, いいのか.
  phi(..)メモメモ.

  848 :デフォルトの名無しさん:2017/01/08(日) 00:48:03.49 ID:jXHP++jg
  >>846
  ありがとうございます.
  FILENAME=hoge hage
  としたい場合はどの様にしたらいいんですかね?
  どこをダブルクォーテーションで囲めばいいのか分からなくて.

  849 :デフォルトの名無しさん:2017/01/08(日) 01:06:14.31 ID:xvjZF4HS
  set文は引用符要らないでしょ, 右辺丸々空白ごと代入される(引用符で括れば引用符ごと)
  使用する状況によって "%var%" とかすれば.

  850 :デフォルトの名無しさん:2017/01/09(月) 12:41:03.48 ID:XllxQEeD
  set文の最後の改行前や=の前後に空白入れてしまってバグになるなんて.
  初心者にはありがちか・・・な?

  851 :デフォルトの名無しさん:2017/01/09(月) 17:39:58.40 ID:FdW16b/b
  >>850
  うん.

  852 :デフォルトの名無しさん:2017/01/09(月) 17:46:32.39 ID:Vl0ZF+DQ
  >>850
  こんな感じのが動かなくてなんでじゃーってなってた.
  @echo off
  set number=1 && echo hoge
  if "%number%"=="1" echo 成功.
  pause

  853 :デフォルトの名無しさん:2017/01/21(土) 18:44:36.79 ID:tXmcovE0
  スペース有り無しはホント罠.
  ファイルに出力リダイレクトする時も末尾に謎スペースが入ってるーとかよくある.
  vbsって別ファイルじゃなくてバッチ上に書いた文で実行できなかったっけ.

  854 :デフォルトの名無しさん:2017/01/21(土) 18:57:14.10 ID:0ZiC2kwV
  jscriptなら.

  855 :デフォルトの名無しさん:2017/01/23(月) 20:40:05.68 ID:D7Cv/vEJ
  バッチ処理で複数の作業を同時にするのはどうやるんでしょうか?
  hoge 1-100まで一気にやってしまうと負荷がひどいので, 3つずつ走らせたいです.
  FOR /F %%I IN (z, txt) do (
  start /b hoge %%I
  )
  これではすべて同時に実行されて困ってます.

  856 :デフォルトの名無しさん:2017/01/23(月) 20:47:18.46 ID:KnzUZKpX
  >>855
  取りあえず3つ起動して, それが終了するのを監視するとかかな.
  tasklist /fi "IMAGENAME eq hoge"
  が無くなるまで次の起動を待つ.

  857 :デフォルトの名無しさん:2017/01/23(月) 21:25:20.02 ID:ltIH4vtA
  同じ事で悩んだ記憶がある, こんなん如何でしょ?
  FOR /F %%I IN (z, txt) do (
  start /b hoge %%I
  call :hogecounter
  )
  goto :EOF
  :hogecounter
  set /a num_hoge = 0
  for /f "usebackq" %%i in (`tasklist /FI "IMAGENAME eq hoge.exe"`) do set /a
  num_hoge += 1
  if %num_hoge% GEQ 5 (
  echo hoge.exe 3つ以上実行中なので待機中... ---- %date% %time% ----
  ping -n 2 127.0.0.1 1>nul 2>&1
  goto hogecounter
  )
  exit/b

  858 :デフォルトの名無しさん:2017/01/24(火) 12:56:00.44 ID:wPNJq+TP
  >>856-857
  回答ありがとうございます. とても勉強になりました.
  tasklistを使ってどうやって監視するのか考えていたんですが, こうやるんですね.

  859 :デフォルトの名無しさん:2017/01/24(火) 20:29:53.92 ID:/B8f83m4
  startコマンドの第一引数はウィンドウタイトルと認識されるから, /b の効果は不明だね.
  start

  860 :デフォルトの名無しさん:2017/01/24(火) 20:30:49.14 ID:/B8f83m4
  start "" /b hoge %%I みたいに空文字でも入れておくといいかも.

  861 :デフォルトの名無しさん:2017/01/24(火) 23:59:56.75 ID:VxYK/9Zb
  処理の終了を知らせるために.
  rundll32 user32.dll, MessageBeep
  としてるんですが, 鳴る音がランダムです.
  音楽プレイヤーを起動することなく特定の音を鳴らしたい場合はどう書けばいいですか?

  862 :デフォルトの名無しさん:2017/01/25(水) 08:04:52.52 ID:JylBc2Qw
  >>861
  もし俺なら以下のようにする.
  echo ^G^G^G
  「^G」は実際にはコマンドプロンプト画面上で[Ctrl]と[G]を同時に押す事で入力できるアスキーコード7
  (元々BEEP音を鳴らすための制御コード)を指す. だから「^G^G^G」なら, BEEP音が「ピッピッピッ」と3回鳴る.
  パソコンによっては, ヘッドホンを繋ぐとBEEP音がヘッドホンからしか聴こえない機種もあるので注意.
  (昔のパソコンは, ヘッドホンを繋いでいてもBEEP音は本体スピーカーから聴こえる機種のほうが普通だったけど)

  863 :デフォルトの名無しさん:2017/01/26(木) 02:22:00.01 ID:xZjzKm01
  プログラムは起動させても自動的に終了するのなら大丈夫では?
  start "" /b /min sndrec32 /play /close "hoge.wav"

  864 :デフォルトの名無しさん:2017/01/26(木) 03:29:49.24 ID:xZjzKm01
  他スクリプトと併用した例.
  * start /minの代わりにWSHを併用(タスクバーにタブが出ない)
  @if(0)==(0) @echo off
  ::ここから@endの間にBATスクリプトを記述し, 最後はgoto :eofで終わらせる.
  echo 初回.
  cscript.exe //nologo //e:jscript "%~f0" "c:\media\foo.wav"
  echo 2回目.
  cscript.exe //nologo //e:jscript "%~f0" "c:\media\bar.wav"
  goto :EOF
  @end
  (new ActiveXObject("WScript.Shell")).Run('sndrec32 /play /close
  "'+WScript.Arguments(0)+'"', 0, true);
  * powershellを使ってBEEPで音階を演奏する.
  @echo off
  :: beep(周波数, 再生時間)
  powershell -C "(262, 294, 330) | % {[Console]::beep($_, 200)}"

  865 :デフォルトの名無しさん:2017/01/26(木) 03:42:07.64 ID:xZjzKm01
  訂正.
  powershell -C "(262, 294, 330) | %% {[Console]::beep($_, 200)}"

  866 :デフォルトの名無しさん:2017/01/27(金) 00:39:40.64 ID:igA7csKz
  >>862
  ほえーこんなんもあるんだなー.

  867 :デフォルトの名無しさん:2017/01/27(金) 00:47:40.39 ID:pF7zedh0
  初心者です.
  batの書き方wikiのようなものはないんでしょうか.
  代表的なサンプルコードがたくさんあるサイトとか.
  みんな何を参考にコード書いてるの?
  cmd help以外で.

  868 :デフォルトの名無しさん:2017/01/27(金) 00:52:08.69 ID:7NHk2TgN
  バッチ 入門.
  バッチ 使い方.
  バッチ リファレンス.

  869 :862:2017/01/27(金) 10:21:22.88 ID:01h1aWf4
  >>866
  その方法をバッチファイルで実現するには, 恐らく以下の方法が一番簡単だと思う.
  (1) 黒いコマンドプロンプト画面で「echo echo 」の10文字(半角スペースを含む)をキーボードから打ち込む.
  [*] この段階ではEnterキーをまだ押さない事!
  [下矢印]
  (2) キーボード上の「Ctrl」キーと「G」を好きな回数だけ同時に押す.
  [*] 例えばバッチファイルの実行によりBEEP音を2回鳴らしたい場合は2回やる.
  [下矢印]
  (3) そのまま「>>"」をキーボードから打ち込む.
  [下矢印]
  (4) 編集したいバッチファイル名をエクスプローラの画面からコマンドプロンプト画面にドラッグ&ドロップする.
  [*] 例えば"C:\temp\sample1.bat"をエクスプローラの画面からドラッグ&ドロップすると,
  コマンドプロンプト画面に「C:\temp\sample1.bat」の文字列が転記される.
  [下矢印]
  (5) そのまま「"」をキーボードから打ち込む.
  [*] ファイル名を「"」(ダブルクォーテーション)で囲む理由は, ファイル名やフォルダ名に空白が含まれていても問題なく作業できるため.
  [下矢印]
  (6) ここまでの一連の操作により, コマンドプロンプト画面では以下のように見えるはず.
  「echo echo ^G^G>>"C:\temp\sample1.bat"」
  それを目視確認できたらEnterキーを押す. これで作業完了.
  [下矢印]
  (7) あとはメモ帳などのテキストエディタでバッチファイル編集を続行すれば良い.

  870 :デフォルトの名無しさん:2017/01/27(金) 16:42:05.37 ID:o8MkOvQJ
  >>867
  おそらく, バッチの情報を1から100まで網羅してるページはネット上には無い.
  ここの人たちは現役で使ってた人ばかりだから, 習うより慣れろで成長してきた人.
  今から知りたければ, DOSが現役だった頃の20年〜30年前の参考書を読むといいよ.
  図書館に行けばいくらでもある. 古い本でも内容は全く問題ない.
  おもにPC-9801やJ-3100関連だが, コマンドの使い方や自由度については昔も今も変わってない.
  会社で98のDOSを使わざるを得ないサラリーマン向けの初心者用書籍が, わかりやすい.
  dateコマンドはフォーマットが若干変わったし, formatコマンドとかハードウェア制御系は.
  オプションが全然違うけど, 書き方は同じ. そういう差異だけはネットで調べるとよい.

  871 :デフォルトの名無しさん:2017/01/27(金) 16:59:28.96 ID:ss8+Q0ea
  DOSとNT系のコマンドはかなり違ってるから.
  今だとDOSのは全然参考にならないと思う.
  (重要なforとかsetとか)
  BATの概要や各コマンドの文法はヘルプを読む.
  コマンドのオプション/?のヘルプでも良いけど,
  Windowsのヘルプで概要から全体像を把握したほうがいい.
  後は, ウェブで探すことになるかな.
  だが, まずは自分のしたいこと, 興味のある処理をどうやれば実現できるのか考えて,
  googleで検索していき徐々に知識を増やすことになるだろう.
  読めば全部わかる教科書とかいうものは多分無いだろうしね.

  872 :デフォルトの名無しさん:2017/01/27(金) 17:06:49.37 ID:M+jB2zw0
  ビーフ音ってモーみたいな音?

  873 :デフォルトの名無しさん:2017/01/27(金) 17:08:36.86 ID:coDtb1o3
  裏技みたいなやり方はどうやって習得していったのか気になる.

  874 :デフォルトの名無しさん:2017/01/27(金) 17:31:38.29 ID:01h1aWf4
  1995年以降に発売されたWindowsは大きく分けると, いわゆる9x系(95/98/98SE/Me)とNT系(それ以外の全部)の2種類ある.
  その内, NT系は従来のMS-DOSや9x系と異なる部分が多く, 例えば.
  エスケープ・シーケンスを利用してテキストをカラフルに装飾する事もできない.
  (その代わりNT系にはCOLORコマンドがあるけど用途は異なる)
  このような事情も, 最近のWindowsユーザーが知るのは難しいかもな.

  875 :デフォルトの名無しさん:2017/01/27(金) 17:46:39.61 ID:ss8+Q0ea
  >>874
  ansi.sysの組み込みで使えるようになった奴ね.
  懐かしい(いろんなプロンプトを作って遊んでた)
  まあエスケープシーケンスって聞くと印刷で使うものって感じだったけど.
  ところで, windows10 Threshold 2でコマンドプロンプトにANSI/VT100互換表示ができるような記事を読んだ記憶があるんだが.
  実際のところはどうなのかな.

  876 :デフォルトの名無しさん:2017/01/27(金) 20:53:22.87 ID:xhE2/Vp0
  >>873
  言えてる, 個人的にはここで初めて知った call の使い方.
  call hoge %%fuga%%
  みたいなの.
  あとこれもここで覚えた.
  set /p <NUL=
  と コントロールコードの 0x08 [BS] を組み合わせての進捗表示.

  877 :デフォルトの名無しさん:2017/01/27(金) 20:57:37.23 ID:ss8+Q0ea
  DOSだとcallも外部BATファイルしか呼べなかったんだよなあ.
  式評価はもとより内部ラベルも呼び出せない.
  @echoもこれしかコマンドに@は付けられなかった.

  878 :デフォルトの名無しさん:2017/01/27(金) 21:16:38.29 ID:ss8+Q0ea
  こういうのもここで覚えたよ.
  for /f "delims=0" %%I in ('cmd /u /c echo o') do set BEL=%%I
  echo %BEL%

  879 :デフォルトの名無しさん:2017/01/27(金) 21:20:50.03 ID:01h1aWf4
  >>875
  http://www.excite.co.jp/News/it_g/20160210/Slashdot_16_02_09_0639223.html
  の件については俺も知らん.
  何しろ現在まだWin7ユーザーで, Win10は一度も使った事がないからな.
  >>877
  そういやechoコマンドに@を付けられるようになったのは, MS-DOSのVer.5.0からだったっけ?

  880 :デフォルトの名無しさん:2017/01/27(金) 21:24:19.98 ID:coDtb1o3
  >>878
  なんじゃこりゃ.
  凄い.

  881 :デフォルトの名無しさん:2017/01/27(金) 21:36:09.67 ID:xhE2/Vp0
  >>878
  すごい, どーいう仕掛け???
  コマンドプロンプトのプロパティに「コンソールの新機能の詳細」[下矢印]があって.
  https://technet.microsoft.com/en-us/library/mt427362.aspx
  読んでコンソールウィンドウの透明度の変更が.
  CTRL+SHIFT+Plus (+) or CTRL+SHIFT+mouse scroll up
  CTRL+SHIFT+Minus (-) or CTRL+SHIFT+mouse scroll down
  であることを知ったのはまだいい?として.
  CTRL+F
  で検索ができるのを初めて知ったよ・・・・・・.

  882 :デフォルトの名無しさん:2017/01/27(金) 21:49:56.71 ID:01h1aWf4
  >>878
  おぉ, その方法で環境変数%BEL%にアスキーコード7が1つ格納されるとはな.
  だから>>862と同じ仕組みの事が実現できるわけだ.
  >>869の方法やVBScriptのChr関数をうまく使えない人には, 面倒でも利用価値があるかもな.

  883 :861:2017/01/29(日) 14:25:18.42 ID:ddwWtq0w
  >>862
  音は鳴りませんでした.
  >>863
  できました.
  >>864-865
  できませんでした.
  一瞬起動するのが気持ち悪いですが>>863で妥協しますありがとうございました.

  884 :デフォルトの名無しさん:2017/02/02(木) 16:41:44.39 ID:2a/0H2Op
  教えて欲しいのですが, バッチファイルでhostsファイルを上書きコピーしたり, 一部を糀谷したりすることは可能でしょうか?
  単純にコピーコマンドではうまく行きません.

  885 :デフォルトの名無しさん:2017/02/02(木) 23:15:37.79 ID:LhAHr7Zi
  hostsは普通のテキストファイルだから, へんな制限は無い気がするが.
  バッチで全部実装するのが面倒なので俺はAutoHotkeyで整形した後.
  hostsへ1行ずつ追記してるけど, ちゃんと追記できてるよ.

  886 :デフォルトの名無しさん:2017/02/02(木) 23:27:36.20 ID:rUH8Ic6o
  俺はXPなので最近のは知らないけど.
  ユーザー権限の問題なのでは?
  問題のファイルはWINDOWS\system32\drivers\etcの下にある.
  ここは一般ユーザー(Power Users, Users)資格では変更・書き込み不可になってるはず.

  887 :デフォルトの名無しさん:2017/02/03(金) 11:18:52.82 ID:qUN7oehH
  >>874
  それはNTだからじゃなくて, cmdだからだよ.

  888 :デフォルトの名無しさん:2017/02/03(金) 11:32:41.65 ID:PzggaHL+
  >>887
  そりゃそうだけど, BATファイルからしてみれば関係なくね?

  889 :デフォルトの名無しさん:2017/02/03(金) 23:21:27.20 ID:qUN7oehH
  >>888
  command.com起動すれば従来通り動いたはずだよ.
  64bitだと動かないけど.

  890 :デフォルトの名無しさん:2017/02/06(月) 22:43:42.84 ID:Dm4Nipmb
  今更だが, WindowsNT系のイベントログを自動的にテキストファイルへ出力.
  (エクスポート)する方法としては, PowerShellインストール済の状態で.
  以下の3行をバッチファイル内で実行するのが俺には一番妥協できそうだ.
  powershell.exe -command ("Get-EventLog Application | Export-CSV
  '%~dpn0_%COMPUTERNAME%_app(%DATE:/=%-%TIME::=%時点)_psh.csv' -Encoding unicode")
  powershell.exe -command ("Get-EventLog Security | Export-CSV
  '%~dpn0_%COMPUTERNAME%_sec(%DATE:/=%-%TIME::=%時点)_psh.csv' -Encoding unicode")
  powershell.exe -command ("Get-EventLog System | Export-CSV
  '%~dpn0_%COMPUTERNAME%_sys(%DATE:/=%-%TIME::=%時点)_psh.csv' -Encoding unicode")
  以下の3行をバッチファイル内で実行する手もあるが,
  時間がかかりすぎる上に英語でしか出力されないのが難点.
  wmic ntevent where "(logfile='application')" list /format:CSV >
  "%~dpn0_%COMPUTERNAME%_app(%DATE:/=%-%TIME::=%時点)_wmic.csv"
  wmic ntevent where "(logfile='security')" list /format:CSV >
  "%~dpn0_%COMPUTERNAME%_sec(%DATE:/=%-%TIME::=%時点)_wmic.csv"
  wmic ntevent where "(logfile='system')" list /format:CSV >
  "%~dpn0_%COMPUTERNAME%_sys(%DATE:/=%-%TIME::=%時点)_wmic.csv"

  891 :デフォルトの名無しさん:2017/02/07(火) 23:49:52.03 ID:OwFQ4nmk
  command.comで16bitアプリが動いたらいいのに.

  892 :デフォルトの名無しさん:2017/02/08(水) 01:50:38.96 ID:QE6/hL5U
  almond.com
  command not found.

  893 :デフォルトの名無しさん:2017/02/08(水) 07:20:17.84 ID:h1zz+gVt
  >>890
  wevtutil じゃダメなの?
  https://technet.microsoft.com/ja-jp/library/cc732848(v=ws.10).aspx

  894 :890:2017/02/08(水) 16:12:37.67 ID:45vPMFEy
  >>893
  今使ってるWin7 Pro x64マシンは4年以上前に買ったものだが, そのコマンドは初めて知った.
  実際やってみると従来より処理結果が見やすい上に速いな. ありがとよ.
  wevtutil qe Application /f:text /uni:true >
  "%~dpn0_%COMPUTERNAME%_app(%DATE:/=%-%TIME::=%時点)_weu.txt"
  wevtutil qe Security /f:text /uni:true >
  "%~dpn0_%COMPUTERNAME%_sec(%DATE:/=%-%TIME::=%時点)_weu.txt"
  wevtutil qe System /f:text /uni:true >
  "%~dpn0_%COMPUTERNAME%_sys(%DATE:/=%-%TIME::=%時点)_weu.txt"

  895 :デフォルトの名無しさん:2017/02/15(水) 04:47:51.68 ID:aywwqEZo
  %%i(ファイル名)が半角英数, "_" だけで構成されていたらという判定はどうやればいいんでしょうか.

  896 :デフォルトの名無しさん:2017/02/15(水) 04:56:51.86 ID:wUshnQbT
  findstr /?

  897 :デフォルトの名無しさん:2017/02/15(水) 09:59:50.17 ID:7bSa3oIc
  >>878ってなんで?これと関係ある?
  http://ash.jp/code/unitbl21.htm
  > UnicodeのUCS-2の文字コード表は, UTF-16と同じです.
  > UTF-16 3007 o

  898 :デフォルトの名無しさん:2017/02/15(水) 12:14:52.43 ID:Q79MmBL5
  >>897
  もう一つ例を出せばはっきりするかな.
  for /f "delims=N" %%I in ('cmd /u /c echo 三') do set TAB=%%I

  899 :デフォルトの名無しさん:2017/02/15(水) 14:00:41.73 ID:fyxpm6Tl
  >>897
  その通り. 半角文字「0」のアスキーコードを16進数で表すと30で,
  BEEP音を出す制御コードのアスキーコードは07だからね.

  900 :デフォルトの名無しさん:2017/02/18(土) 09:27:34.31 ID:aH8Tos2O
  >>898
  ついにその「三」を出したか. w.

  901 :デフォルトの名無しさん:2017/02/18(土) 13:52:15.93 ID:8EFqk4IF
  >>900
  三だと, 何か, あるんですか?
  アホなもので, 教えてください.

  902 :デフォルトの名無しさん:2017/02/18(土) 13:58:40.90 ID:np+iCDRO
  >>901
  この(過去)スレで初登場したオリジナルってことかな?
  コード表を見ればわかるけど使える文字は結構限られてて, この「三」は0x30以外でTABとして使える珍しい部類かな.

  903 :デフォルトの名無しさん:2017/02/18(土) 16:19:49.41 ID:aH8Tos2O
  >>901
  >>897のURLだと「三」は"4E09"になってるだろ?
  んで[下矢印]のASCIIコード表だと「N」は"4E"だから, 「N」で「三」を区切ると"09"つまり「HT(水平タブ)」が残るってこと.
  http://www9.plala.or.jp/sgwr-t/c_sub/ascii.html

  904 :901:2017/02/19(日) 13:32:35.73 ID:OLDLML6K
  >>902
  >>903
  ありがとうございます.
  アホの私に, 丁寧な説明, ありがとうございます.

  905 :デフォルトの名無しさん:2017/02/20(月) 12:38:49.83 ID:Yd+dsT91
  社内のシステム管理者してます.
  WSHかpower shellを勉強したいのですが, VBA多少わかるのでWSHがよいかと思ってたのですが, これから勉強するならpower
  shellのほうが良いのでしょうか?

  906 :デフォルトの名無しさん:2017/02/20(月) 12:46:25.36 ID:DNbD6mo9
  社によりけりだから会社に聞け.

  907 :デフォルトの名無しさん:2017/02/20(月) 12:59:56.69 ID:o4bNBCuM
  自分はPowerShell好きなので聞かれたら答PSって言っちゃうけど.
  実際は組合せが必要になる場面もあるだろうしbatも含めて触れやすい所からやって行こう.

  908 :デフォルトの名無しさん:2017/02/20(月) 13:21:52.61 ID:aGrUDuyU
  今後htmlやJavaに関わる可能性があるなら, WSH(JScript)が良いかも.

  909 :デフォルトの名無しさん:2017/02/20(月) 14:02:23.91 ID:H64DODQY
  一通り, 全部実用できるように, するしか無いのでは.
  得意なものは, 一つあるけれども, 他のも使えますと言うのが, よろしいかと.

  910 :デフォルトの名無しさん:2017/02/20(月) 14:14:39.50 ID:GNpZgzhH
  鬼の全パターン回答.

  911 :デフォルトの名無しさん:2017/02/20(月) 14:19:59.36 ID:aGrUDuyU
  最終的にどうするかじゃないだろ.
  学習する優先順位, つまりまず最初に何から勉強していくのか.
  が問われている.

  912 :鬼?:2017/02/20(月) 15:40:20.74 ID:H64DODQY
  鬼?
  でも, 実務上は一通り, できたほうが, よろしいかと.

  913 :デフォルトの名無しさん:2017/02/20(月) 18:46:18.21 ID:ybI95Kss
  言語の選択もさることながら.
  レジストリ操作が出来ると良いかと.
  キーは同じだけど枝が違うヤツを.
  変えることもあるので.

  914 :デフォルトの名無しさん:2017/02/20(月) 20:05:53.47 ID:7yJYF54k
  >>905
  今更 WSH はないだろ.
  PowerShell は癖があるけど慣れれば全然楽だよ.

  915 :デフォルトの名無しさん:2017/02/20(月) 20:22:08.30 ID:ynZG7eTn
  まだまだ使える! WSHプログラミング 〜 VBScriptのテストツールの紹介 (1/2):CodeZine(コードジン)
  https://codezine.jp/article/detail/9124

  916 :デフォルトの名無しさん:2017/02/20(月) 21:44:53.54 ID:D++FG3XO
  WSHはファイルに保存しないと実行できないのが致命的.

  917 :デフォルトの名無しさん:2017/02/21(火) 12:35:55.81 ID:4H0MJuHo
  .Netがハードル.
  C#使うとか覚えるとかで他でも使うなら良いがPSの為だけに.Net覚えるのはコスパ悪くない?

  918 :デフォルトの名無しさん:2017/02/21(火) 12:44:43.11 ID:jPlNYKt3
  C#もひっくるめて, 全部マスターが効率いいかも.

  919 :デフォルトの名無しさん:2017/02/21(火) 12:45:57.01 ID:BY3mJNCy
  WSHはBATよりはましだがもう過去のものだし.
  PSはMSが広めようとするも全然使われてないし.
  これやったら絶対いいといった決め手はない.
  結局はどれに興味がわくかで決めるしかないのが現状.

  920 :デフォルトの名無しさん:2017/02/21(火) 13:05:43.90 ID:jPlNYKt3
  >>919
  結局, 一通りマスターするしか, ないのよね.
  決定的なもの, ひとつマスターすれば, okとは行かないのが現状.

  921 :デフォルトの名無しさん:2017/02/21(火) 14:15:03.94 ID:y0kzTLQN
  >>917
  テキスト処理とか WSH でやる程度のことは .NET に頼らなくてもできるよ.
  お陰で -split 演算子と String.Split( ) みたいに似て非なるものが色々できてしまうわけだが...

  922 :デフォルトの名無しさん:2017/02/22(水) 20:10:23.63 ID:mAYQQSaw
  Windows7において二つのバッチファイルを同じフォルダ内に作る.
  ・hoge.bat
  (以下中身)
  echo これはhoge.batです.
  pause
  ・hoge(A).bat
  (以下中身)
  echo これはhoge(A).batです.
  pause
  保存した後おのおののバッチファイルを右クリックして「開く」を実行する.
  当たり前だがおのおののecho文の内容が表示される.
  ここまではいい.
  次にhoge(A).batを右クリックして「管理者として実行」をクリックする.
  すると,
  「これはhoge.batです」
  と表示されるではないか.
  末恐ろしい・・・.

  923 :デフォルトの名無しさん:2017/02/22(水) 21:19:44.12 ID:L0zJ8/8i
  ほえ〜, ファイル名に ( が入っていると「管理者として実行」にしくる場合があるのね.
  hoge.bat を.
  echo, all "%*"
  echo, 0 "%~f0"
  echo, 1 "%~f1"
  echo, 2 "%~f2"
  echo これはhoge.batです.
  pause
  hoge(A).bat のファイル名を hoge(A)(S(D).bat
  にすると最初の ( で分割されてるっぽいのが見て取れる.
  hoge(A).bat の ( の前に1個以上半角or全角スペースを入れてやると,
  そのファイル名なら問題ないみたい.
  なんで???

  924 :デフォルトの名無しさん:2017/02/22(水) 23:00:05.19 ID:mAYQQSaw
  バグかね?

  925 :デフォルトの名無しさん:2017/02/22(水) 23:56:41.49 ID:0ijMuyId
  "("を含むパス上にあるbatファイルを, 「管理者として実行」で正常実行できない.
  https://social.msdn.microsoft.com/Forums/ja-JP/43f69d0b-1e8a-457b-8e85-57f4c06f2e56/bat?forum=windowsgeneraldevelopmentissuesja

  926 :デフォルトの名無しさん:2017/02/23(木) 00:16:59.94 ID:OmWT2WV6
  なるほど, batfile とついでに cmdfile も書き換えて....っと.
  レジストリいじると ( で分断されないや, 勉強になります.

  927 :デフォルトの名無しさん:2017/02/23(木) 03:57:43.76 ID:5MDB4WX9
  WMIC PROCESS GET /FORMAT:LIST | FINDSTR /R "CommandLine= Caption=" >
  "%~dpn0_%COMPUTERNAME%_プロセス一覧(%DATE:/=%-%TIME::=%時点)_wmic-findstr.log"

  928 :デフォルトの名無しさん:2017/02/23(木) 12:05:36.44 ID:OfWDpqOl
  条件によって括る括らないとかせずに全部括るようにすれば良かったのにな.
  バッチに限らずWinでのこの引数関係の不具合やハマりは沢山あるが.
  そうしていればほぼ全て解決してただろうに.

  929 :騙し髪:2017/02/24(金) 02:03:32.35 ID:bJGVi00E
  これもバクじゃないから困る.
  systeminfo | findstr /i /r /c:"^OS バージョン"

  930 :デフォルトの名無しさん:2017/02/24(金) 10:39:00.57 ID:y7jxU5gN
  >>929
  [下矢印]これで妥協するしかないのかな?
  systeminfo | findstr /i /r "OS" | findstr /i /c:"バージョン"

  931 :デフォルトの名無しさん:2017/02/24(金) 11:34:02.28 ID:YZGHPd2K
  >>929
  何でいきがって /r なんて指定してるんだ?

  932 :デフォルトの名無しさん:2017/02/24(金) 11:57:48.17 ID:y7jxU5gN
  >>931
  findstr /?
  これの実行結果を読めば分かる.
  要はsyteminfoコマンド実行結果の内, 「OS バージョン」という文字列が.
  行頭にある行だけを正規表現で抽出したいというのが>>929の意図.
  実際は以下のように記述するしかない感じだが・・・.
  systeminfo | findstr /i /r "^OS" | findstr /i /c:"バージョン"
  ちなみに>>930は少し記述ミスがあるので無視してほしい.
  また, 実行結果の表記がverコマンドの場合と少し異なる点にも注目.

  933 :デフォルトの名無しさん:2017/02/24(金) 12:15:58.03 ID:FJeAwGiZ
  >>930
  systeminfo | findstr /b /c:"OS バージョン"

  934 :デフォルトの名無しさん:2017/02/24(金) 13:24:30.97 ID:IrOG+H9r
  もっと困りそうなのが, 引数(ファイル名)で使われることが多そうな全角スペースの取扱いだよ.
  cmd と エクスプローラーで, 半角スペースと同じように扱ったりそうじゃなかったりする.
  エクスプローラーからのドロップやタブ補完なんかを行うと, 半角スペースとは異なる扱いになるのに,
  コマンド実行の際には半角スペースと同様の扱いをして, そのままではパスが通らないことがある.
  たとえば, C:\test dir\test.txt (batやexeでもいい) があるとして, カレント・ディレクトリが C:\ の場合,
  cd test dir はクォートなしで通るし,
  cat test dir\test.txt も普通に実行できるけど,
  dir test dir\test.txt は通らない(クォーティングが必要).
  全部クォーティングすれば問題にならないと思われるにも関わらず,
  C:\test dir\test space.txt というファイルパス(全角スペースのみならず半角スペースあり)の場合,
  エクスプローラーからコマンド・プロンプトへドロップした際,
  先の C:\test dir\test.txt はクォーティングされないが,
  C:\test dir\test space.txt だと, きちんとクォーティングされる.
  色んなパターンが合って, 上手く説明できないけど,
  補完とかの挙動もおかしかったりするので, ちょっといじってみるとわかってもらえると思う.

  935 :デフォルトの名無しさん:2017/02/24(金) 18:08:43.97 ID:S5p8nT+v
  >>929
  負けた気がするけど.
  systeminfo | findstr /i /r /c:"^OS バ..ジョン"

  936 :デフォルトの名無しさん:2017/02/24(金) 18:53:46.21 ID:J9Egd7AE
  パス区切りをバックスラッシュにしたやつ,
  円記号とバックスラッシュを同じにしたやつ,
  全角スペースをデリミタにしたやつ,
  は土下座行脚, いや, 焼き土下座行脚すべき.

  937 :デフォルトの名無しさん:2017/02/24(金) 21:47:48.07 ID:y7jxU5gN
  >>933, 935
  そちらはどれも正常に機能するんだな.

  938 :デフォルトの名無しさん:2017/02/24(金) 22:06:52.03 ID:cAJGTXKH
  正規表現で日本語使うのに一々文字コードを確認しなきゃならないってのは大変.
  MSにはもっとマルチバイト言語圏に気を配って欲しかった.

  939 :デフォルトの名無しさん:2017/02/25(土) 04:26:31.35 ID:xGmZcvF/
  systeminfo | findstr /i /r /c:"^OS バ"

  940 :デフォルトの名無しさん:2017/02/25(土) 09:03:13.40 ID:5GrbAtXq
  パスに含まれるスペースも問題を起こすけど, "["と"]"もこれまた厄介だ.

  941 :デフォルトの名無しさん:2017/02/27(月) 23:58:11.99 ID:WTG5WMst
  めっちゃスレチだけど, SSDってちょっと前まで寿命が短いって言われてたけど.
  いつの間にかHDDより寿命が長くなってるんだな. びびったわ. w.

  942 :デフォルトの名無しさん:2017/03/01(水) 05:48:52.22 ID:AsJGDaOR
  新人がバッチファイルに興味を持ったらしく, 遅延展開のことを聞いてきたので.
  まずお約束の「SETLOCAL ENABLEDELAYEDEXPANSION」の記述を教えたら.
  それだけでウンザリされたぞ.
  「%」ではなく「!」で囲まなきゃならないことを教えたらさらにウンザリされた.
  やっぱりとっつきにくいよなあ.

  943 :デフォルトの名無しさん:2017/03/01(水) 12:07:40.17 ID:e1g5jWjK
  他の言語はある程度習得できたけど.
  バッチは何度やっても覚えられない.

  944 :デフォルトの名無しさん:2017/03/01(水) 12:53:16.16 ID:SJrJxNnQ
  >>942
  > まずお約束の「SETLOCAL ENABLEDELAYEDEXPANSION」の記述を教えたら.
  > それだけでウンザリされたぞ.
  俺ならその時点でそんなやる気のない新人は放置する.

  945 :デフォルトの名無しさん:2017/03/01(水) 13:11:32.18 ID:ZEta6nTz
  確かに, その段階で, うんざりするような人に,
  教えたくは無いな.

  946 :デフォルトの名無しさん:2017/03/01(水) 14:45:21.65 ID:XTrmDaeR
  ただただ長ったらしいんだよ.
  SetLocal EnableDelayedExpansion
  ってすればかなり反応も違ったのかも.

  947 :デフォルトの名無しさん:2017/03/01(水) 15:21:29.24 ID:XTrmDaeR
  それと意識の違いがあるかもな.
  C#とかだったらどんなに複雑でも必死で覚えようとするだろうが.
  BATだとまあそこそこ使えりゃいいんだよって感じで片手間の労力しか掛けたくないんだろう.
  実際使う機会なんて, ifで条件切り分けて起動アプリや引数を変える程度だろう.
  それ以上になるなら, 簡易なツールでも作ったほうがいいとなる.
  あとは, 何でも質問してくる新人なんて付き合ってられんだろう.
  学校の延長じゃないんだし, BATに限らず, まずはマニュアルやヘルプやwebで調べて自分で学習することを覚えさせるべき.

  948 :デフォルトの名無しさん:2017/03/01(水) 15:25:56.41 ID:TOh8r3Y7
  俺としては遅延展開は遅延展開が必要になった状況になって初めて教えた方がいいと思うけど.
  わけがわからんけどとりあえず書いとくおまじないってのプログラム関係の解説に多いけど.
  そういうの本当にうんざりする.
  おまじないなんてアホな事書くぐらいならきちんと説明しとけと.

  949 :デフォルトの名無しさん:2017/03/01(水) 19:10:44.78 ID:SJrJxNnQ
  >>947
  こういう知ったかにもげんなりする.
  > 実際使う機会なんて, ifで条件切り分けて起動アプリや引数を変える程度だろう.
  そんなものに遅延展開が必要になることはほぼない.

  950 :デフォルトの名無しさん:2017/03/01(水) 19:15:14.05 ID:XTrmDaeR
  >>949
  >>946も言ってるように, 遅延展開が必要になった場面で.
  それでも使わなければならないのなら教えればいい.
  単に勉強として教えても身にはつかない.

  951 :デフォルトの名無しさん:2017/03/01(水) 19:16:27.03 ID:XTrmDaeR
  >>946は>>948に訂正.

  952 :デフォルトの名無しさん:2017/03/01(水) 19:22:01.47 ID:SJrJxNnQ
  >>950-951
  何で俺にアンカーしてるんだ?
  >>948 はまあ正しいと思うし本当に必要になったかどうかは >>942 の所の新人に聞かなきゃわからんし.

  953 :デフォルトの名無しさん:2017/03/01(水) 20:34:12.60 ID:novnWMTs
  長い上に補完効かないからゲンナリしたんだろうと邪推, テンプレート的な何かを.
  用意してあげればハードル下がるんじゃないですかね?
  補完が効くなら大した事じゃないだろうし.
  内容はたったこれだけだけど, 右クリック->新規作成 にバッチファイルの雛形を追加してから随分楽になった>俺.
  @setlocal
  @echo off
  prompt $g
  title %~n0
  cd /d %~dp0
  for /f "usebackq delims=" %%i in (``) do (
  )
  color 07
  timeout 6
  goto :EOF
  :adminchk
  whoami /GROUPS|find "High" 1>nul 2>&1
  if errorlevel 1 (
  color 4e
  echo, このバッチファイルは 管理者権限 で実行してください.
  echo, 何かキーを押下するとバッチファイルを終了します.
  pause 1>nul
  color 07
  exit
  )
  exit/b
  今回なら 1行目に enabledelayedexpansion を[下矢印]追加したやつで.

  954 :デフォルトの名無しさん:2017/03/01(水) 20:35:34.84 ID:novnWMTs
  うを, 「 [下矢印] 」消し忘れた. orz.

  955 :デフォルトの名無しさん:2017/03/01(水) 21:10:31.50 ID:9330vN7g
  @echo offを使うコードは嫌い.
  ちゃんと動けば問題ないが, 大抵どこかがおかしいのに自信満々で隠してる.

  956 :デフォルトの名無しさん:2017/03/01(水) 21:57:06.50 ID:novnWMTs
  スタンスの違いですかね, そんな風に考えたこともなかった.

  957 :デフォルトの名無しさん:2017/03/01(水) 23:08:51.35 ID:yR2oLnRj
  使い道が限られてるし.
  めちゃくちゃ便利って思うバッチの恩恵がないと.
  覚えるキッカケにならないと思う.
  あとはキッティングとかやらないと必要にならない.

  958 :デフォルトの名無しさん:2017/03/01(水) 23:22:58.59 ID:kitmjsdZ
  >>955
  デバッグした後であれば, 表示されて煩わしい部分(コメントとか)隠すぶんにはいいんでないの?
  何のコマンドを実行しているかは, その説明をechoしたり, echo on を直前に記述したっていいわけだし.

  959 :デフォルトの名無しさん:2017/03/02(木) 03:25:05.16 ID:BRCb1ETq

  960 :デフォルトの名無しさん:2017/03/02(木) 05:28:42.72 ID:pdyDswRT
  @echo off
  rem title "name"
  goto :main
  comment
  USING: this.bat "hoge" ["foo" ["bar"...]]
  何のバッチかとか使い方とか引数や変数の説明.
  基本的にREMは使わない.
  :mein
  echo 俺は全部こんな感じ.

  961 :デフォルトの名無しさん:2017/03/02(木) 11:37:11.71 ID:T2bzQ343
  シェルスクリプトはタイプ数減らすために逆にエスケープ周りのルールが複雑化して全然生産性上がらないんだよな.
  デバッグもしづらいし.
  その点でVBSは良かった.
  文法は糞だけど.

  962 :デフォルトの名無しさん:2017/03/02(木) 17:09:23.49 ID:3Z7pahnd
  >>960
  「:mein」は, 「main」?

  963 :デフォルトの名無しさん:2017/03/02(木) 17:10:26.85 ID:3Z7pahnd
  間違った.
  「:mein」は, 「:main」?
  だ.

  964 :デフォルトの名無しさん:2017/03/02(木) 18:22:16.37 ID:s+qRP6Bf
  >>961
  複雑?
  お前さんの知能が足りんだけじゃね? w.
  .cmd のエスケープの方がトリッキーだろ, 正式なドキュメントもないし.

  965 :デフォルトの名無しさん:2017/03/03(金) 05:02:41.69 ID:WTPXL6BV
  delimsにダブルクォーテーションを使用することは出来ないですか?

  966 :デフォルトの名無しさん:2017/03/03(金) 12:31:28.29 ID:1c3U0vHr
  >>956
  エスケープすることで可能(forのオプションは囲むことは必須ではないため)
  http://stackoverflow.com/questions/7516064/escaping-double-quote-in-delims-option-of-for-f
  http://otnx.jp/CMD/コマンド別/for/

  967 :デフォルトの名無しさん:2017/03/03(金) 12:34:06.93 ID:1c3U0vHr
  >>965 の間違いだわ, 失礼.

  968 :デフォルトの名無しさん:2017/03/03(金) 13:12:34.59 ID:WTPXL6BV
  >>966
  囲まなくてもよかったんですね.
  勉強になりましたありがとうございます.

  969 :デフォルトの名無しさん:2017/03/05(日) 12:48:27.31 ID:4ixcbh2y

  970 :デフォルトの名無しさん:2017/03/05(日) 12:50:43.60 ID:4ixcbh2y

  971 :デフォルトの名無しさん:2017/03/05(日) 13:58:00.83 ID:7VmbrbTL

  972 :デフォルトの名無しさん:2017/03/06(月) 09:55:26.77 ID:cTPfG0tg
  cmd終了のお知らせ.
  次期大型アップデート, Windows 10 Creators Updateの実像 - PowerShellが標準に,
  Linux環境も強化したWindows 10 Creators Update:ITpro
  http://itpro.nikkeibp.co.jp/atcl/column/17/022400047/030100004/

  973 :デフォルトの名無しさん:2017/03/06(月) 19:59:20.47 ID:ZhaNpIEG
  まじかよ・・・まぁでもまだいける.

  974 :デフォルトの名無しさん:2017/03/06(月) 20:25:53.65 ID:ajpZLJux
  cmd環境はサポート維持が表明されてるから安心して良いよ.
  むしろ危ないのはWSHの方.

  975 :デフォルトの名無しさん:2017/03/07(火) 10:57:03.69 ID:yt35hC5o
  >>972

  976 :デフォルトの名無しさん:2017/03/07(火) 11:34:23.30 ID:NGhUJ85m
  >>974

  977 :デフォルトの名無しさん:2017/03/08(水) 16:42:00.84 ID:yjHW4J+N

  978 :デフォルトの名無しさん:2017/03/08(水) 16:42:42.42 ID:yjHW4J+N

  979 :デフォルトの名無しさん:2017/03/08(水) 16:43:19.20 ID:yjHW4J+N

  980 :デフォルトの名無しさん:2017/03/08(水) 16:44:30.11 ID:yjHW4J+N

  981 :デフォルトの名無しさん:2017/03/08(水) 16:44:57.54 ID:yjHW4J+N

  982 :デフォルトの名無しさん:2017/03/08(水) 20:25:28.66 ID:22c2SBHy
  del の外にごみ箱送りの削除コマンドを追加して欲しい.
  できるソフトはあるが, 内部コマンドで.

  983 :デフォルトの名無しさん:2017/03/10(金) 20:40:22.23 ID:f4ZS1b20

  984 :デフォルトの名無しさん:2017/03/10(金) 22:27:00.13 ID:yR7vM1Ks
  >>983

  985 :デフォルトの名無しさん:2017/03/11(土) 05:16:21.18 ID:fFh0REPG

  986 :デフォルトの名無しさん:2017/03/11(土) 11:23:33.97 ID:0VclosvM

  987 :デフォルトの名無しさん:2017/03/11(土) 13:48:33.39 ID:2LSSeyH1
  次スレ.
  [.cmd] バッチファイルスクリプト %12 [.bat]
  http://echo.2ch.net/test/read.cgi/tech/1489207631/
  あとヨロシク.

  988 :デフォルトの名無しさん:2017/03/11(土) 13:55:01.66 ID:+iqzxRFD

  989 :デフォルトの名無しさん:2017/03/11(土) 20:19:37.53 ID:+iqzxRFD

  990 :デフォルトの名無しさん:2017/03/11(土) 20:55:16.00 ID:a53QpxuN

  991 :デフォルトの名無しさん:2017/03/12(日) 05:37:51.15 ID:59Ox3raF

  992 :デフォルトの名無しさん:2017/03/12(日) 05:51:14.15 ID:FQp4yzuc

  993 :デフォルトの名無しさん:2017/03/12(日) 11:27:49.81 ID:1iqHgo3m
  shutdown /s /f /t 0 <-Windowsを即電源断.
  shutdown /r /f /t 0 <-Windowsを即再起動([*] 現在セーフモードならセーフモード, 通常モードなら通常モードで再起動)

  994 :デフォルトの名無しさん:2017/03/12(日) 11:35:19.11 ID:1iqHgo3m
  あと6レスで今スレともおさらばか・・・.

  995 :デフォルトの名無しさん:2017/03/12(日) 12:15:48.13 ID:eYHcL9Aw
  2年かかったな.

  996 :デフォルトの名無しさん:2017/03/12(日) 13:02:15.60 ID:59Ox3raF

  997 :デフォルトの名無しさん:2017/03/12(日) 18:55:33.66 ID:t+BguLGS

  998 :デフォルトの名無しさん:2017/03/12(日) 20:22:26.13 ID:1iqHgo3m

  999 :デフォルトの名無しさん:2017/03/12(日) 20:24:39.74 ID:1iqHgo3m
  >>987

  1000 :デフォルトの名無しさん:2017/03/12(日) 20:54:33.04 ID:1iqHgo3m

  1001 :1001:Over 1000 Thread
  このスレッドは1000を超えました.
  もう書けないので, 新しいスレッドを立ててくださいです. . .
  life time: 746日 1時間 44分 34秒.

  400KB
  レス数が1000を超えています. これ以上書き込みはできません.
  *スマホ版**掲示板に戻る*全部前100次100最新50
  read.cgi ver 06.0.0 2015/11 Mango Mangue *
  Code Monkey *


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