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


[.cmd] バッチファイルスクリプト %12 [.bat]
http://echo.2ch.net/test/read.cgi/tech/1489207631/l50
http://mevius.2ch.net/test/read.cgi/tech/1489207631/l50
http://mevius.5ch.net/test/read.cgi/tech/1489207631/l50
[.cmd] バッチファイルスクリプト %12 [.bat]

* 1002コメント_* 374KB
* 全部_* 1-100_* 最新50
*スマホ版*_*掲示板に戻る*_*ULA版*
レス数が1000を超えています. これ以上書き込みはできません.

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

  2: デフォルトの名無しさん:2017/03/11(土) 14:16:25.14 ID:tWxSSf/m
  2GET

  3: デフォルトの名無しさん:2017/03/11(土) 17:24:01.08 ID:aIgw+L4R
  そろそろ次スレ立てた方がいいと思う.

  4: デフォルトの名無しさん:2017/03/11(土) 19:08:44.39 ID:ayh8mOJp
  タヒ.

  5: デフォルトの名無しさん:2017/03/12(日) 22:04:13.40 ID:LKmH3irJ
  達人の方々!お教えください.
  set文による文字列の置き換えで.
  =を置き換えたいのですが.
  どのように記述すればよいのでしょうか?

  6: デフォルトの名無しさん:2017/03/13(月) 02:51:46.65 ID:ieWeiZc+
  >>5
  setの文字列置換では無理.
  =の個数が決まっているのならforでderims==
  不特定なら一文字ずつ=かどうかを判定し=なら置換したい文字列を付け足し.
  テストしてないから不備があるかもだけど以下みたいな感じで出来ると思う.
  :ReplaceEqual
  if "%~1"=="" (echo ERROR&exit /b)
  set "str=%~1"
  set output=
  :CheckEqual
  if not defined str exit /b
  pause
  if "%str:~0, 1%"=="=" (
  set "output=%output%置換後文字列"
  set "str=%str:~1%"
  goto :CheckEqual
  )
  set "output=%output%%str:~0, 1%"
  set "str=%str:~1%"
  goto :CheckEqual

  7: デフォルトの名無しさん:2017/03/13(月) 02:56:02.96 ID:ieWeiZc+
  済まん pause テストするつもりで入れてたのを消すの忘れてた.
  まあそのままテストしてみて.

  8: デフォルトの名無しさん:2017/03/13(月) 03:26:40.42 ID:Kv5ZfyaF
  :ReplaceEqual
  set "str=%~1"
  set output=
  :CheckEqual
  if "%str:~0, 1%"=="=" (
  set "output=%output%置換後文字列"
  set "str=%str:~1%"
  ) else (
  set "output=%output%%str:~0, 1%"
  set "str=%str:~1%"
  )
  if defined str goto :CheckEqual
  exit /b

  9: デフォルトの名無しさん:2017/03/13(月) 07:40:38.20 ID:KSFKLeET
  >>6-8
  ありがとうございます.
  色々試して見ます.

  10: デフォルトの名無しさん:2017/03/13(月) 22:53:05.48 ID:UotY540z
  >>8と同じだけど, もう少し使いやすいI/Fにしたもの.
  @echo off
  rem 文字列中には, ", %(1つのみ) を入れないこと.
  set "var==abc=def=!#$&'()=^~|-+*;:{}<>, ./?\_%%"
  call :replace var "=" "="
  echo "%var%"
  rem savety stopper
  goto :eof
  :replace
  setlocal
  set i=0
  set s=
  :replace_loop
  call set "c=%%%1:~%i%, 1%%"
  if not defined c (endlocal&set "%1=%s%"&goto :eof)
  if "%c%" equ "%~2" (set "s=%s%%~3") else(set "s=%s%%c%")
  set /a i+=1
  goto :replace_loop

  11: デフォルトの名無しさん:2017/03/15(水) 08:22:32.42 ID:Ekd3hMdD
  cmderいいな.
  この手のツールで表示が崩れたりせずまともに動くやつ見るの初めてだ.

  12: デフォルトの名無しさん:2017/03/15(水) 19:39:27.45 ID:sbz59NLr
  for /r %%i in (*.jpg) のようなコマンドで取得した絶対パスをカレントフォルダとの相対パスに変換するにはどうするのが一番ですか?
  現在はsetコマンドの置換機能でカレントフォルダの部分のパスを消しているんですがパスに変な文字列が入っていると誤作動を起こしそうで少し不安です.
  もっとスマートなやり方はありますか?

  13: デフォルトの名無しさん:2017/03/16(木) 01:00:29.70 ID:DixFGYK0
  >パスに変な文字列が入っていると.
  どのみち%が入っているとバッチだと詰む. やれなくないけど物凄く面倒.
  バッチでは完全な文字列操作は無理だと割り切った方がいい.
  PowerShell使えば?
  https://www.google.co.jp/search?&q=powershell+%E7%9B%B8%E5%AF%BE%E3%83%91%E3%82%B9+%E5%A4%89%E6%8F%9B

  14: デフォルトの名無しさん:2017/03/16(木) 01:47:18.14 ID:9KCSEqzj
  >>13
  分かりました, 何か別の方法を考えます.

  15: デフォルトの名無しさん:2017/03/16(木) 02:25:05.07 ID:iKA3O6Cf
  >>14
  実際の有効なパスが対象なんだから.
  問題となるのは上に出てきたequalを含んだフォルダがある場合だけだろう.
  setlocal
  echo %cd%>tmpfile
  for %%i in (tmpfile) do set /a size=%%~zi-2
  del tmpfile
  if %size% neq 3 set /a size+=1
  for /r %%i in (*.txt) do (
  set "p=%%~i"
  call set "p=%%p:~%size%%%"
  call echo ".\%%p%%"
  )
  endlocal

  16: デフォルトの名無しさん:2017/03/16(木) 02:32:32.21 ID:iKA3O6Cf
  肝心なのは, 文字列操作, 表示まで扱う場合は.
  文字列を必ず""で括るようにすること.
  & % ^ 等を含んでると括ってないとおかしくなる.

  17: デフォルトの名無しさん:2017/03/16(木) 04:08:08.29 ID:gadu0oc0
  chcp 437

  18: デフォルトの名無しさん:2017/03/16(木) 11:46:49.75 ID:iKA3O6Cf
  >>17
  ファイルサイズじゃ根本的にダメだったね.
  (それにecho %cd%も""で括ってなきゃいけなかったし)
  call :length "%cd%" n
  for /r %%i in (*.txt) do (
  set "p=%%~i"
  call set "p=%%p:~%n%%%"
  call echo ".\%%p%%"
  )
  goto :eof
  :length
  setlocal
  set s=%1
  set n=0
  :length_1
  call set "c=%%s:~%n%, 1%%"
  if defined c set /a n+=1&goto :length_1
  if %n% neq 5 set /a n+=1
  endlocal&set /a %2=%n%-2
  goto :eof

  19: デフォルトの名無しさん:2017/03/16(木) 12:49:57.48 ID:iKA3O6Cf
  訂正.
  call :length cd n
  for /r %%i in (*.txt) do (
  set "p=%%~i"
  call set "p=%%p:~%n%%%"
  call echo "%%p%%"
  )
  goto :eof
  :length
  setlocal
  set n=0
  :length_1
  call set "c=%%%1:~%n%, 1%%"
  if defined c set /a n+=1&goto :length_1
  if %n% neq 3 set /a n+=1
  endlocal&set /a %2=%n%
  goto :eof

  20: 12:2017/03/16(木) 18:53:00.18 ID:9KCSEqzj
  >>15
  ありがとうございます.
  文字列を置換することばかり考えていたのでカレントフォルダ分の文字数を削るという発想に行き着きませんでした.
  これで何とかなりそうな気がします.

  21: デフォルトの名無しさん:2017/03/17(金) 21:12:58.50 ID:V4hZYsin
  どなたかお詳しい方, ご教示ください.
  windows7を起動後, 自動で特定のアカウントパスワード入力後にログインし,
  ログイン後, デスクトップの特定座標を自動でクリックするという操作を行わせたいです.
  このような処理はbatファイルで可能でしょうか?
  win7初期状態にインストールされているものであれば他のものを使用してもよいのですが.
  キーワードだけでも結構ですので, お助けいただければ幸いです.

  22: デフォルトの名無しさん:2017/03/17(金) 21:46:29.02 ID:93Jxn9OB
  胡散臭すぎるだろ・・・.

  23: デフォルトの名無しさん:2017/03/17(金) 22:18:36.30 ID:Pk7DeofX
  ログインとはWindows7の登録ユーザーってことか?
  それともWebブラウザを起動してどっかのサイトにログインするってことか?
  あと何故マウスクリックなのか?
  デスクトップに表示してるアイコンなら別に直接起動できるだろうに.

  24: デフォルトの名無しさん:2017/03/18(土) 09:01:42.64 ID:KPOks79l
  >>21
  無理です.

  25: デフォルトの名無しさん:2017/03/18(土) 15:14:23.81 ID:cDGLzqpd
  start https://www.google.co.jp/search?q=windows7+自動ログイン.

  26: デフォルトの名無しさん:2017/03/20(月) 17:14:02.44 ID:QMGJB+5Y
  だいぶ使い道ないけど, DIRって複数フォルダの内容を1回で表示できるんだね.
    DIR C:\tmp C:\tmp2

  27: デフォルトの名無しさん:2017/03/24(金) 13:17:40.14 ID:jo55dHfH
  for文が同一フォルダに自分で出力したファイルを.
  一つだけ拾っちゃうんだけど, 何か対策はありませんか?
  for %%I in (*.jpg) do copy %%I %%~dpI_%%~nxI
  って感じに処理すると.
  1.jpg 2.jpg -> _1.jpg _2.jpg __1.jpg
  となっちゃう・・・.

  28: デフォルトの名無しさん:2017/03/24(金) 13:52:45.87 ID:OsTTofqK
  for /f "delims=" %%a in ('dir /a-d /b *.jpg') do

  29: デフォルトの名無しさん:2017/03/25(土) 20:50:35.80 ID:8s6m96Ov
  なるほどDIRか・・・.
  ありがとうございました.

  30: デフォルトの名無しさん:2017/03/28(火) 18:35:13.10 ID:oEoZ8De2
  バッチファイルで.
  echo %*
  とすると引数がすべて表示されるけど.
  %0=自分自身だけ無いのはなんで?
  *で0だけハブられるなんて可哀想・・・・・・.

  31: デフォルトの名無しさん:2017/03/28(火) 18:52:24.94 ID:IKXgMhqU
  少し考えれば分かりそうなものだが.
  %cmdcmdline%

  32: デフォルトの名無しさん:2017/03/30(木) 01:42:37.50 ID:gGp/SYAm
  なんか真似しそう(笑)

  33: デフォルトの名無しさん:2017/04/03(月) 06:06:20.82 ID:awE7Wvau
  バッチ書くのにオススメのエディタあったら教えて.
  最近目がめっきり弱くなって来たので色分け表示とかの視認性上がるものや.
  便利そうな機能があるものを知りたい.
  頻繁に使うわけじゃないからこそ探すの面倒で先人の知識をお借りしたい.

  34: デフォルトの名無しさん:2017/04/03(月) 07:06:14.38 ID:pL1jzkCs
  >>33
  VisualBatは?
  文字に色もつくしいろいろ設定できるよ.
  batをexe形式にすることもできる.

  35: デフォルトの名無しさん:2017/04/03(月) 07:12:25.04 ID:5ummjK72
  サクラエディタ.

  36: デフォルトの名無しさん:2017/04/03(月) 07:33:25.19 ID:uEU30p4H
  マジレスすると目が悪いならでかいモニタ買ってフォントサイズでかくするのが一番良い.
  PowerShell, Ruby, PythonとかならVSCodeでブレークポイント張ったり変数のインスペクトしたりできるけど.
  その手の支援機能が全く期待できないBatじゃどれ使っても同じだろう.
  手に馴染んだエディタ使えばいいしないならフリーのどれか一つ覚えればいい.
  キーワードの色分け程度なら大抵用意されてるし.
  VisualBatはちょくちょく見かけるけどそれ専用の環境を覚えるくらなら普通のエディタ使ったほうがいい気がする.
  個人的にはBatから別の言語のコード書いて呼び出す事が多いし.
  自作マクロになるけど.
  [下矢印]みたいなコードを一つのファイルに書いて##!!に挟まれたカーソル位置のコードを切り出して実行する機能が.
  言語の学習やちょっとしたテストに便利で気に入っているのでエディタマクロ覚えて作ってみるのお勧め.
  ##!! echo test
  echo hello
  ##!! for test
  for %i in (a, b, c) do echo %i
  ##!! calc test
  set a=1
  set /a a+=2
  echo %a%

  37: デフォルトの名無しさん:2017/04/03(月) 07:56:40.92 ID:wDpIbVKg
  中身のない長文要らんわ.

  38: デフォルトの名無しさん:2017/04/03(月) 22:35:33.81 ID:TkzGFBjq
  >>33
  黒背景に白地の文字が視認性あがるよ.
  フォントはゴシックで文字サイズも大きくする.
  俺の使ってるのは一般的にはオススメではないのでどうかと思うが.
  (New)QXエディタ(一応シェアウェアだが未登録でも機能制限も期間制限も無い)

  39: デフォルトの名無しさん:2017/04/03(月) 22:53:09.08 ID:jFb9lqNm
  真っ黒背景に真っ白文字は目がズキズキする.

  40: デフォルトの名無しさん:2017/04/03(月) 22:58:56.52 ID:TkzGFBjq
  >>39
  確かに, 目のいい人にとってはそうかもしれないけどね.
  コマンドプロンプト画面がエディタ画面だと思ってもらえれば想像できるよね.

  41: デフォルトの名無しさん:2017/04/03(月) 23:14:57.75 ID:rmwiW03F
  color 0f
  は目に痛い.

  42: デフォルトの名無しさん:2017/04/03(月) 23:18:55.00 ID:TkzGFBjq
  目のいい人がコメントしたって意味ないだろ.
  老眼やかすみ目で文字が読みにくくなったらわかるよ.
  特に, カンマとピリオドの区別が付かないとストレス溜まるぜ.

  43: デフォルトの名無しさん:2017/04/03(月) 23:37:00.86 ID:mc8PKhXW
  >>33
  サクラエディタ入れて.
  IPAゴシックフォントにする.

  44: デフォルトの名無しさん:2017/04/04(火) 00:06:37.41 ID:m/ZONOLH
  背景は薄い黄緑色にしてる.
  目が疲れない.

  45: デフォルトの名無しさん:2017/04/04(火) 00:16:41.83 ID:Q0uaZ4Jg
  そういえば昔のホスト端末とかって黒背景に緑字が多かったよね?
  あれってなんでだろ?

  46: デフォルトの名無しさん:2017/04/04(火) 02:35:10.99 ID:G7XsiAet
  >>45
  グリーンディスプレイがあったからじゃね?

  47: デフォルトの名無しさん:2017/04/04(火) 02:45:05.78 ID:ti2ez7YV
  緑やオレンジの蛍光体の方がTVの白蛍光体より刺激が少ないから採用されていたらしい.

  48: デフォルトの名無しさん:2017/04/04(火) 04:37:33.60 ID:RiJvnB3V
  >>40
  適当な画像エディタのスポイトで抽出してみればわかるけど.
  コマンドプロンプトは黒と白じゃなくて黒とグレー.
  理由は目への配慮.
  DQも同じ.

  49: 33:2017/04/04(火) 05:42:06.14 ID:ldgn2Vfw
  皆様たくさんのレスありがとうございます.
  VisualBat試してみました.
  デバッガとしては便利そうですがTab文字打てないのでエディタとしてはまだちょっと使えなさそうです.
  for や if の()で自動インデントとかしてくれるようになると便利かも.
  今後の更新に期待します.
  他, 挙げて頂いたアドバイスも順次時間が取れ次第試して行きたいと思っております.
  次はサクラエディタを試用する予定. 他候補にMery, QX
  コマンドプロンプトは color 07 不透明度80 で使っております.
  かすみ目, 乱視, 老眼, ド近眼, 何れも酷いです.
  他に思い付いたアドバイス等ございましたらよろしくお願いします.

  50: デフォルトの名無しさん:2017/04/04(火) 06:03:57.35 ID:o7weIbXl
  >>43
  フォントはVLゴシックのほうがいいと思う.

  51: デフォルトの名無しさん:2017/04/04(火) 12:05:28.05 ID:h1EI1nbQ
  gPadは色弄りやすい.

  52: デフォルトの名無しさん:2017/04/04(火) 12:56:18.88 ID:CQgziqhI
  >>50
  あのフォントゼロに斜線が入ってるから使ってる.

  53: デフォルトの名無しさん:2017/04/05(水) 00:03:13.02 ID:jDUjKmAY
  >>48
  >DQも同じ.
  ドラクエ?

  54: デフォルトの名無しさん:2017/04/08(土) 17:14:16.29 ID:3YaJnUcz
  ms製wgetなんてあったんだな.
  何故か異様に遅いが.
  bitsadmin /Transfer htmlget
  https://www.google.co.jp/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png
  c:\logo.png

  55: デフォルトの名無しさん:2017/04/08(土) 17:15:28.84 ID:3YaJnUcz
  フォントはMyricaがClearTypeと相性がいい.

  56: デフォルトの名無しさん:2017/04/08(土) 17:52:42.60 ID:RJCKk6tM
  VLゴシックは行間空き過ぎ.
  同じ行数が表示出来るようフォントサイズで調整した場合.
  VLゴシックのフォントサイズ10に対しIPAゴシック12, MSゴシック13
  やたらと空行入れたがる脳みそスカスカの空行厨が好みそうなフォント.
  自分にはIPAゴシックよりVLが良い点が見当たらないので.
  >>50さん, どの辺が良いのか具体的に教えていただけると助かります.

  57: デフォルトの名無しさん:2017/04/08(土) 18:14:54.54 ID:xnWSKOe7
  >>54
  これは知らんかった.
  バッチファイルで夜間にダウンロードとかに便利だな.

  58: デフォルトの名無しさん:2017/04/08(土) 18:57:28.10 ID:LC0ZcHdg
  >>54
  動かなかったんで/helpしてみたら, WindowsXPのbitsadminには/Transfarが無かった(version 1.0 [
  5.1.2600.0])
  調べてみたら,
  Windows XP Service Pack 2 サポート ツール.
  https://www.microsoft.com/ja-jp/download/details.aspx?id=18546
  をインストールすればいいことが判った.
  version 2.0 [ 6.6.2600.2180 ]

  59: デフォルトの名無しさん:2017/04/09(日) 11:47:08.97 ID:z+t/KLMw
  Myrica良いね.
  |が破線なのと\->\バックスラッシュに違和感あるけど慣れればこっちの方が見分け楽そう.

  60: デフォルトの名無しさん:2017/04/11(火) 20:07:11.55 ID:bvJ+shyZ
  set test=%1
  for /f "delims=" %%f in (%test%) do (
  E:\test\test.bat %%f
  )
  上記のfor処理にテキストのファイルパスを一つずつ読み込ませて専用batで処理した後に.
  全部終わったらシャットダウン処理をしたいのですが.
  ループ処理に割り込ませる方法って何かありますか?

  61: デフォルトの名無しさん:2017/04/11(火) 21:42:41.83 ID:ZiByT+J4
  質問の意味が不明瞭.
  全部終わった後でいいならforの後にshutdown書けばいいんでないの?
  for中に割り込ませたいのは何故?

  62: デフォルトの名無しさん:2017/04/11(火) 22:02:51.00 ID:bvJ+shyZ
  set test=%1
  for /f "delims=" %%f in (%test%) do (
  E:\test\test.bat %%f
  )
  shutdown /S /T 30
  単純にこれでうまくいかなかったので割り込ませる必要があるのかと思い質問しましたが.
  やっぱりそんなわけないですよね・・・.
  単純なミスをしてる可能性が高そうなのでもう一回見直してみます.

  63: デフォルトの名無しさん:2017/04/11(火) 22:31:07.73 ID:U8R3p0c1
  callしてないからtest.batから帰ってこないだけでは.

  64: デフォルトの名無しさん:2017/04/11(火) 22:39:54.03 ID:bvJ+shyZ
  あちゃーほんとだ.
  普通に動いてたから気づかなかった・・・.
  アホですね.
  ちょっと修正してテストしてみます.
  指摘ありがとう.

  65: デフォルトの名無しさん:2017/04/15(土) 01:17:56.44 ID:yuPX0yl1
  ソフトを起動した際に出るライセンスキーを入力する画面に値を自動でいれたいです.
  batで可能でしょうか?

  66: デフォルトの名無しさん:2017/04/15(土) 08:13:42.82 ID:eG98vJ7n
  ahk.

  67: デフォルトの名無しさん:2017/04/15(土) 23:02:38.65 ID:a3PF4w5O
  batでgrep検索をしようと思ってるんだけど,
  検索結果にファイルのフルパスを出力する方法を教えてください><
  現状だとファイル名+行の内容しか出ない・・・.

  68: デフォルトの名無しさん:2017/04/27(木) 06:44:05.61 ID:Ek2Yalzm
  複数のファイルがあり, ぞれぞれ中身が.
  fileID: aaaa within(
  );
  や.
  fileID: akf within(
  );
  などfileID: ~ within();は固定です.
  各ファイルのaaaaやakfを読み込みの際に変数に取り込みたいのですがどのように書けばいいでしょうか?
  fileID: aaaa within(はファイルの一行目なので set /p fl=< %inputFile% でとれました.

  69: デフォルトの名無しさん:2017/04/27(木) 07:31:26.21 ID:LF40VtKG
  テストしてないけどこんな感じ. 必要ならusebackqとかも. aaaaに&とか入るならsetでクオートする必要がある.
  for /f "tokens=2* delims= " %%a in (%inputFile%) do (
  set ID=%%b
  goto :NEXT
  )
  :NEXT
  または.
  set /p fl=< %inputFile%
  for /f "tokens=2* delims= " %%a in (%fl%) do set ID=%%b
  または.
  for /f "tokens=2* delims= " %%a in ('findstr /b /c:"fileID""%inputFile%"') do
  set ID=%%b

  70: デフォルトの名無しさん:2017/04/29(土) 21:00:05.56 ID:GvSnly4L
  >>69
  "within("しか取れませんでした.

  71: デフォルトの名無しさん:2017/04/29(土) 23:45:46.56 ID:AyX6Tpbc
  書いたコマンドとテストした対象ファイルの1行目をコピペで貼ってみ.

  72: デフォルトの名無しさん:2017/05/09(火) 16:43:52.50 ID:PScyAxKX
  助けて下さい!
  毎月第二木曜日の16:00になったら.
  Aフォルダに入っているgファイルにBフォルダに入っているgファイルを上書きする.
  batファイルを作って下さい.
  よろしくお願いします.

  73: デフォルトの名無しさん:2017/05/09(火) 17:29:08.98 ID:bjRIYrg3
  >>72
  ファイル上書きのBAT(c:\xxx.bat)を作成してタスク登録する.
  schtasks /create /sc monthly /mo second /d thu /st 16:00:00 /tn title
  /tr"c:\xxx/bat" /ru username /rp userpassword

  74: デフォルトの名無しさん:2017/05/09(火) 18:58:44.41 ID:PScyAxKX
  >>73
  ありがとうございます!

  75: デフォルトの名無しさん:2017/05/12(金) 00:01:39.58 ID:1meaH6LX
  set txt="C:\scr\a.txt"
  for /f "delims=, usebackq tokens=1, 2, 3, 4, 5, 6, 7, 8" %%iin (%txt%) do (
  set /a X="(%%j-%%i)+(%%l-%%k)+(%%n-%%m)+(%%p-%%o)"
  )
  echo %X%
  forを使った計算について質問ですがa.txtから数値を抜き出し計算したいのですが最後の二つが空の場合があり.
  この場合は%%pと%%oですがその場合はエラーになって強制終了してしまいます.
  gotoを使う方法は思いついたのですが他に空だった場合にゼロを代入するなどは可能でしょうか?

  76: デフォルトの名無しさん:2017/05/12(金) 08:46:27.33 ID:trqCrhEU
  set txt="C:\scr\a.txt"
  for /f "usebackq tokens=1, 2, 3, 4, 5, 6, 7, 8 delims=, " %%iin (%txt%) do (
  set /a X=%%j-%%i+%%l-%%k+%%n-%%m, po=%%p-%%o
  )
  set /a XX=X+po
  echo %XX%

  77: デフォルトの名無しさん:2017/05/12(金) 11:05:40.92 ID:lLM9Jqdl
  echo ^
  とすると more? と出る.
  ??

  78: デフォルトの名無しさん:2017/05/12(金) 12:02:37.54 ID:+kEWkBL6
  >>76
  空の場合に1が代入されてエラーを回避できました.
  サンクス.

  79: デフォルトの名無しさん:2017/05/19(金) 17:52:47.97 ID:ya28xWZT
  特定のフォルダ内のテキストファイルを処理するバッチを作りましたが.
  @echo off
  for /f "usebackq delims=" %%i in (`dir /B /S "E:\text_sc\*.txt"`)do (
  echo %%i
  call E:\work\syori.bat "%%i"
  )
  syori.batで処理したテキストを忘れないようにリスト化(syorizumi_list.txt)
  aaa
  bbb
  ccc
  のように処理したテキストの名前だけ縦に追記.
  次回から新しいテキストファイルが同じフォルダに出来た場合にsyorizumi_list.txtの.
  処理済みのテキストを除外して処理したいのですが.
  コマンドのアドバイスを頂けないでしょうか.

  80: デフォルトの名無しさん:2017/05/19(金) 19:38:36.49 ID:HiKVEJh7
  >>79
  もし, その入力ファイルをその後弄らないのならファイル属性を弄るのがいい.
  例えば, アーカイブ属性を削るとか読み取り専用属性にするとか.
  そうすれば, forの中のdirに/aで分別できる.
  それが無理な場合は, こんなかんじでファイルに登録されているかどうかチェックするとかかな.
  findstr /x "%%~ni" syorizumi_list.txt >nul
  if errorlenel 1 (
  echo %%i
  call E:\work\syori.bat "%%i"
  )
  )

  81: デフォルトの名無しさん:2017/05/19(金) 21:01:19.56 ID:ya28xWZT
  >>80
  レスありがとうございます.
  読み取り属性の方は最終手段としてとりあえず書かれたコマンドを追記してテストしていますが.
  エラーで強制終了してしまいます・・・.
  ヒントは頂けたのでちょっと考えてみます.

  82: デフォルトの名無しさん:2017/05/19(金) 21:32:14.27 ID:8Dg0HTHO
  処理済みファイルを下位ファルダに移動させるとかじゃダメなの?
  それが1番楽だと思うけど.

  83: デフォルトの名無しさん:2017/05/19(金) 22:02:54.16 ID:ya28xWZT
  ダメではないですし意地になってるだけです・・・.
  すいません.
  どうしようもなければそうしおうと思います.

  84: デフォルトの名無しさん:2017/05/19(金) 22:41:00.81 ID:HiKVEJh7
  >>81
  ただのtypoだから(errorlevel)
  あと処理済ファイルの指定はフルパスにしないとダメかも.

  85: デフォルトの名無しさん:2017/05/19(金) 22:45:30.06 ID:HiKVEJh7
  あと, 移動させるなら下位フォルダはダメだよ.
  dir /sではそれも対象だから.

  86: デフォルトの名無しさん:2017/05/19(金) 23:51:05.34 ID:ya28xWZT
  >>84
  修正したら動きました!
  ありがとうございます.
  ただsyorizumi_list.txtに.
  aaa
  bbb
  ccc
  とあったらaaaしか除外してくれませんね・・・.
  もう少し調べてみます.

  87: デフォルトの名無しさん:2017/05/20(土) 02:30:44.06 ID:HrYyDnOr
  >>86
  まあこっちが悪いっちゃ悪いんだけど, これくらい修正して使って欲しかった.
  /c:"%%~ni"

  88: デフォルトの名無しさん:2017/05/20(土) 08:10:06.10 ID:N++czmo3
  >>87
  眠すぎたのと集中力が散漫で気づいてないだけでした・・・.
  すいません.
  それと指摘の通り/c:に変えたら期待通りの動作になりました.
  サンクス!

  89: デフォルトの名無しさん:2017/05/20(土) 21:37:37.96 ID:HrYyDnOr
  >>88
  その言い方に嫌な感じがするんだがちゃんと引数の意味を調べて使ってるよね.
  /x /c:"%%~ni"としてるんなら, 変な勘ぐりスマン.

  90: デフォルトの名無しさん:2017/05/20(土) 22:35:16.21 ID:N++czmo3
  >>89
  /x /c:"%%~ni"で問題なく動作しています.
  細かいところまでありがとう.

  91: デフォルトの名無しさん:2017/05/22(月) 14:12:41.59 ID:Q9T2A2Wt
  こんなろくに理解せずそのまんまコピペして使ってるとトラップに引っかかるぞ.

  92: デフォルトの名無しさん:2017/05/22(月) 22:28:16.59 ID:b+LuBt/G
  下位フォルダに移動することも検討してるなんてレスから.
  /sが必要だとも思えんよね.

  93: デフォルトの名無しさん:2017/05/22(月) 22:30:42.85 ID:b+LuBt/G
  もし/sが意図通りだったら.
  aaa.txt
  aaa\aaa.txt
  なんて状況どうするんだって話だし.

  94: デフォルトの名無しさん:2017/05/26(金) 07:30:18.71 ID:/NUGeMQI
  >>89
  > その言い方に嫌な感じがするんだがちゃんと引数の意味を調べて使ってるよね.
  同意.
  88の1行目で奴の人物像がすべて分かる.

  95: デフォルトの名無しさん:2017/05/26(金) 16:05:36.92 ID:OOQCykcT
  引数 %1 %2 , , は%9 までだが.
  shiftで取り出せば%10以上でも取り出せた.

  96: デフォルトの名無しさん:2017/06/15(木) 12:35:49.64 ID:j04OpPTD
  Cドラのdown配下のmp4とaviを.
  DドラTozakaruzoSaikonkaraに集約してコピーしたいときはどうするの?
  XCOPY "C:\down\*.mp4" "D:\TozakaruzoSaikonkara\" /d/e /h /r /y
  XCOPY "C:\down\*.avi" "D:TozakaruzoSaikonkara\" /d/e /h /r /y
  ワイルドカード使いたいけど, eroやmoroのところが難しい.
  for文の記述の方がいいなど, よろしくお願いします.
  C:/
  +down/
  |  + ero/
  |      + 111.mp4
  |  + moro/
  |      + xx2.avi
  |  + zzz.mp4
  |  +xxx.avi
  D:/
  +TozakaruzoSaikonkara/
  |  + 111.mp4
  |  + xx2.avi
  |  + zzz.mp4
  |  + xxx.avi

  97: デフォルトの名無しさん:2017/06/15(木) 13:13:57.77 ID:6QOS5lbl
  robocopy /?

  98: デフォルトの名無しさん:2017/06/15(木) 15:41:43.67 ID:y+UEOWCj
  >>96
  cd /d c:\down
  cd d:TozakaruzoSaikonkara
  for /r %%i in (*.avi *mp4) do copy /y "%%~fi" d:

  99: デフォルトの名無しさん:2017/06/15(木) 15:46:23.72 ID:y+UEOWCj
  cd d:\TozakaruzoSaikonkara の方がいいか.

  100: デフォルトの名無しさん:2017/06/15(木) 15:50:20.24 ID:y+UEOWCj
  もしフォルダが無いなら.
  md d:\TozakaruzoSaikonkara 追加してくれ.

  101: デフォルトの名無しさん:2017/06/15(木) 16:07:02.35 ID:y+UEOWCj
  *.mp4 だった.
  穴だらけだな.
  俺もボケてきたか.

  102: デフォルトの名無しさん:2017/06/15(木) 17:02:52.10 ID:+JrLzVDI
  >>98
  おー, inの句に並列できるんですね.
  %%~fiのfはfileの意味でしょうか.
  いずれにしても無事コピーされました.
  応用も効きそうなので調べて利用させていただきます!
  ありがとう.

  103: デフォルトの名無しさん:2017/06/15(木) 17:08:46.74 ID:+JrLzVDI
  いや, フルパスかな.
  初めてだったので, 楽しみます.
  ありがとう.

  104: デフォルトの名無しさん:2017/06/16(金) 01:17:16.66 ID:fojoWyA2
  >>103
  俺がもっといいやり方がないか調査するからとりあえずmoroフォルダをうp!

  105: デフォルトの名無しさん:2017/06/17(土) 18:10:57.34 ID:hP08xqzx
  >>98
  ドライブとディレクトリの違いであるのか, コピーと移動の違いであるのか,
  教えていただけたらうれしいです.
  >>96
  で, 同じドライブの別フォルダに移動したいとき, 下記教えていただいたコマンドを変えて実行すると,
  別ドライブのときのようにコピーがされない状況です.
  cd /d c:\down
  cd c:\TozakaruzoSaikonkara
  for /r %%i in (*.avi *mp4) do move /y "%%~fi" c:
  ---------
  下記の用に移動したい.
  C:/
  +down/
  |  + ero/
  |      + 111.mp4
  |  + moro/
  |      + xx2.avi
  |  + zzz.mp4
  |  +xxx.avi
  C:/
  +TozakaruzoSaikonkara/
  |  + 111.mp4
  |  + xx2.avi
  |  + zzz.mp4
  |  + xxx.avi

  106: デフォルトの名無しさん:2017/06/17(土) 21:48:00.86 ID:4uF4heHb
  for /r c:\down %%i in (*.avi *.mp4) do move /y "%%~i" c:\TozakaruzoSaikonkara

  107: デフォルトの名無しさん:2017/06/17(土) 22:08:13.20 ID:hP08xqzx
  >>106
  ありがとうございます!
  比較して, 代入の引数iに違いがあるし, もう少し勉強します.
  また, わからないことなど出てくるかもしれませんが, その時はよろしくお願いいたします.

  108: デフォルトの名無しさん:2017/06/17(土) 22:53:57.13 ID:4uF4heHb
  参考に言っておくが () の中の引数なんだが, ワイルドカード以外は要注意だ.
  例えば (*.avi *.mp4 sukebe.jpg) とかにすると.
  各ディレクトリに sukebe.jpg が無くても強引にコマンド実行してエラーになったりする.

  109: デフォルトの名無しさん:2017/06/19(月) 21:06:26.56 ID:HM1jnBNt
  moroとかsukebeとか名付けがオッサン臭いんだが. w.

  110: デフォルトの名無しさん:2017/06/26(月) 00:08:20.51 ID:a4kJ2YgH
  DIRコマンドでは*を使って検索みたいなことが出来ますね.
  [コマンド]
  C:\>dir /s /b C:\Windows\System32\host*
  [実行結果]
  C:\Windows\System32\hostname.exe
  C:\Windows\System32\dllcache\hostname.exe
  C:\Windows\System32\drivers\etc\hosts
  他にもっと複雑な検索も出来るのでしょうか?

  111: デフォルトの名無しさん:2017/06/26(月) 00:10:31.02 ID:a4kJ2YgH
  あと「DIR /?」で出てくるヘルプにはこの機能について触れられていないのはなぜなのでしょう?こんなに便利なのに.

  112: デフォルトの名無しさん:2017/06/26(月) 00:24:40.04 ID:1HPve1dM
  ワイルドカードはDIR固有じゃないけど.

  113: デフォルトの名無しさん:2017/06/26(月) 00:27:25.02 ID:q7GF7ZpN
  >>111
  windowsXPで恐縮なんだが, Windowsヘルプ(ヘルプとサポートセンター)では,
  Dirの項目の説明の中で, ワイルドカード関係のものとして以下のものが書いてあったよ.
  解説.
  ・複数の filenames を使用する.
    複数の filenames を使用できます. スペース, カンマ, またはセミコロンでファイル名を区切ります.
    FileName でワイルドカード文字 (? と *) を使うと, ファイルのグループを表示することができます.
  ・ワイルドカードを使用する.
    ワイルドカード (? と *) を使うと, ファイルとサブディレクトリのサブセットの一覧を表示できます.
  例.
  ドライブ C のすべてのディレクトリで, 拡張子が .txt のすべてのファイルの一覧を表示するには, 次のように入力します.
  dir c:\*.txt /w/o/s/p
  各ディレクトリにある拡張子が .txt のファイル名が, アルファベット順にソートされた一覧がワイド形式で表示されます.
  画面単位で一時停止し, キーが押されると次の画面が表示されます.

  114: デフォルトの名無しさん:2017/06/26(月) 01:37:25.73 ID:q7GF7ZpN
  >>111
  つまりコマンドの内蔵ヘルプは簡略版ってことなんだ.
  それと, なんかちょっと検索してみたら.
  Windows10には「ヘルプとサポート」がないらしい.
  なのでオンラインでのコマンドラインリファレンス.
  https://technet.microsoft.com/ja-jp/library/cc755121%28v=ws.10%29.aspx
  XPの「ヘルプとサポート」には.
  「コマンドラインリファレンス」の他にも,
  「新しいコマンドラインツール」
  「コマンドシェルの概要」(ここにパイプやリダイレクトの説明が載っている)
  ってのがあったんだけどなあ.

  115: デフォルトの名無しさん:2017/07/01(土) 02:44:43.86 ID:mwCfh4Ih
  質問があります.
  ちょっと事情があってすべての引数をダブルクオーテーションで囲って実行しなければならなくなりました.
  例えばこんな感じで.
  "C:\Software\ffmpeg\ffmpeg.exe" "-i" "%~1""-vcodec" "utvideo" "-acodec"
  "pcm_s16le""%~dpn1_test.avi"
  ffmpegでは正常に動くことを確認したのですが他の一般的なソフトウェアもこのような起動方法で動作すると考えてもいいのでしょうか?

  116: デフォルトの名無しさん:2017/07/01(土) 03:37:58.17 ID:QCoLM9eW
  引数の仕様はそれぞれだが問題無い.

  117: デフォルトの名無しさん:2017/07/05(水) 22:31:01.85 ID:9GxT9B4i
  とあるファイルの中身の文字列を置換したいのですが, 何かいい方法はありますでしょうか?
  とあるファイルはtxtファイルではないですが, テキストエディタで開くと文字列が書いてあります.

  118: デフォルトの名無しさん:2017/07/05(水) 22:46:04.03 ID:R8zuGv9z
  全部テキストならともかくそれ以外のバイナリファイル内の置換はcmdじゃ無理だろ.
  WSHとかPower Shellとかで探せ.

  119: デフォルトの名無しさん:2017/07/06(木) 00:29:11.58 ID:l/JVwvz3
  テキストファイルだけど, 拡張子がtxtではないファイルのことです.

  120: デフォルトの名無しさん:2017/07/06(木) 01:41:06.31 ID:vizsBHcK
  findstr である程度のことはできるけど, 置換の条件とかが複雑になってくるとしんどい.
  外部コマンドが使用可能なら, onigsedとか, SEDを使った方が多少は楽.

  121: デフォルトの名無しさん:2017/07/06(木) 02:34:32.14 ID:VUvDmuBp
  >>119
  拡張子になんの意味があると思ってるの?
  なんかそのレベルの知識だったら, メモ帳でも使った方がいいと思うよ.

  122: デフォルトの名無しさん:2017/07/07(金) 17:03:51.39 ID:peDYPYbs
  >>119
  ren Nullpo.unko Nullpo.txt

  123: デフォルトの名無しさん:2017/07/09(日) 19:10:43.21 ID:Gxva3cTk
  バッチファイルからシリアルポートを簡単に読み書き出来る手段って無いですかね?
  古くはCOM?を使う方法が有名ですがBluetoothなどで作られた仮想シリアルポート?には使えないようです.

  124: デフォルトの名無しさん:2017/07/13(木) 00:28:41.39 ID:m+WJUz/m
  シリアルポートってなんだ?RS-232Cとかか?

  125: デフォルトの名無しさん:2017/07/13(木) 00:45:21.62 ID:CfPNRtgi
  >>123
  232C->USB変換ケーブルみたいなのあったような.

  126: デフォルトの名無しさん:2017/07/16(日) 11:23:45.75 ID:FHjtOHLZ
  そもそもバッチファイルって何?
  CでもBasicでもなく, メモ帳の拡張子をbatに変えるだけで良くて,
  コマンドブロンプトとかいう, MS-DOSと何が違うのかわからないような画面で動いて,
  何なの?

  127: デフォルトの名無しさん:2017/07/16(日) 15:58:56.60 ID:30vHB81v
  CだってBASICだってメモ帳の拡張子を適当に変えれば行けますよ.

  128: デフォルトの名無しさん:2017/07/18(火) 02:02:06.89 ID:Bi+xDIbE
  「拡張子とは何か」から始めとけ.

  129: デフォルトの名無しさん:2017/07/18(火) 09:43:40.29 ID:YNdL6SIO
  >>126
  >メモ帳の拡張子をbatに変える.
  notepad.exeの拡張子をbatに変えたら動かなくなりますよ.

  130: デフォルトの名無しさん:2017/07/18(火) 12:15:15.33 ID:+17jTjCv
  >>129
  なんでメモ帳って書いてあるのにnotepad.exeをいじるわけ?

  131: デフォルトの名無しさん:2017/07/18(火) 12:23:23.94 ID:lxnTGpj5
  そらメモ帳の実体はnotepad.exeやし.

  132: デフォルトの名無しさん:2017/07/18(火) 19:54:35.52 ID:qQbuN+bc
  >>130
  お前の言う「メモ帳」とはnotepad.exeでない何か他のものなのか?

  133: デフォルトの名無しさん:2017/07/18(火) 20:32:10.68 ID:wtRY8Rgw
  もう夏休みか.

  134: デフォルトの名無しさん:2017/07/18(火) 23:42:51.89 ID:Wjn/rMX6
  揚げ足の取り方が寒い.

  135: デフォルトの名無しさん:2017/07/19(水) 00:03:00.46 ID:oeGL8Gu+
  >>126についていうなら, その辺のいい加減さが理解を妨げてると言える.

  136: デフォルトの名無しさん:2017/07/19(水) 00:19:58.81 ID:wIP5zHZ/
  とにかく>>126は色々とおかしい.
  どこから突っ込めばいいのかわからんくらいにアチコチおかしい.
  PC初心者板ならともかく, なぜム板にこんな人が居るんだ?ってレベル.
  迷い込んできたのか?

  137: デフォルトの名無しさん:2017/07/19(水) 00:23:24.87 ID:I6a60LYe
  しかし誰もきちんと説明できないという.

  138: デフォルトの名無しさん:2017/07/19(水) 02:27:06.77 ID:Gwnbk1WK
  どこから説明始めたらいいのかわからん程だし.

  139: デフォルトの名無しさん:2017/07/19(水) 21:02:00.27 ID:WMMf4PqS
  説明はできないが揚げ足は取れる, ということですね.

  140: デフォルトの名無しさん:2017/07/19(水) 22:27:12.79 ID:caLBuZR5
  コピー系コマンドのコピー速度って.
  遅  copy < xcopy < robocopy  早.
  で良いですよね?
  これはVista, 7, 10のどのOSでも同じでしょうか?

  141: デフォルトの名無しさん:2017/07/19(水) 23:32:30.26 ID:I6a60LYe
  copyの方が早くね?4文字だし.

  142: 140:2017/07/20(木) 03:04:39.26 ID:R4lBeVK+
  >>141
  コマンド打ち込むにも時間がかかりますから一理ありますね. copyは引数指定も直感的だし・・・.
  って常にコマンド手打ちする訳でもないですし! w.

  143: デフォルトの名無しさん:2017/07/22(土) 00:59:36.62 ID:J1O+P69V
  +.bat や , .bat もOKだった.

  144: デフォルトの名無しさん:2017/07/22(土) 21:18:13.40 ID:yBUCBb6t
  プラスバッドって, 何か格好いいな.
  カンマバットはダセェけど.

  145: デフォルトの名無しさん:2017/07/23(日) 16:18:49.88 ID:sxzHAQSA
  では,
  £.bat
  gamma.bat
  ラプラスバットと, ガンマバットでは, どうだろう?

  146: デフォルトの名無しさん:2017/07/29(土) 01:24:32.19 ID:ocuZvBLs
  @.bat や =.bat
  ファイルを作ることはできるが, 実行しようとしてもコマンドプロンプトに無視されて実行できなかった.

  147: デフォルトの名無しさん:2017/07/29(土) 02:07:03.67 ID:0L2d7SO5
  @.bat はフルパスで C:\work\@bat ってするか, キャレットでエスケープして ^@.bat で実行できる.
  =.bat はフルパスでもダメだけど, キャレットでエスケープすればいける.

  148: デフォルトの名無しさん:2017/08/01(火) 00:45:45.45 ID:7i1X54Qd
  >>147
  キャレットって何かわからなかったが, ^をつけることなんですね.
  ^@ や ^= でたしかに実行できました.

  149: デフォルトの名無しさん:2017/08/10(木) 19:56:28.38 ID:gQNT5BPl
  (^_^)

  150: デフォルトの名無しさん:2017/08/10(木) 21:54:16.62 ID:BFQhJ/Te
  "@ とか "= とか.

  151: デフォルトの名無しさん:2017/08/14(月) 22:38:23.70 ID:3xlVGOet
  すみません助けてください.
  遅延関数を宣言してるところから, 下記の親ディレクトリの名前だけ引くサブルーチンに.
  ファイルフルパス投げて, 戻そうとしているのですが.
  for文のところでDEST_DIRに値が入らなくて困っています.
  windows7環境で遅延関数について調べているのですが.
  なんで値が入らないのかわからず.  %%Pをechoすると中身が表示されるのですが.
  それをSETするときに何をやっても入りません. . . 助けてください.
  :GET_PARENTDIR
  setlocal enabledelayedexpansion
  SET PathLF=%1
  SET PathLF=%PathLF:~0, -1%
  SET PathLF=!PathLF:\=^
  !
  for /F %%P in ("!PathLF!") do SET DEST_DIR = %%P
  endlocal && set DEST_DIR = %DEST_DIR%
  echo %DEST_DIR%
  exit /b

  152: デフォルトの名無しさん:2017/08/14(月) 22:39:38.44 ID:3xlVGOet
  ああああ遅延変数でした.
  もうやだああぁ.

  153: デフォルトの名無しさん:2017/08/14(月) 23:55:08.58 ID:pZiLFUe+
  >>151
  これって例えばc:\aaa\bbb\ccc\test.txtってファイルを投げたら.
  最終的にtest.txって文字を得たいの?
  cccを得たいの?

  154: デフォルトの名無しさん:2017/08/15(火) 02:10:26.85 ID:F71LHla5
  >>151
  まずは.
  SET DEST_DIR = %%P
  endlocal && set DEST_DIR = %DEST_DIR%
  の空白がいけないのでは?
  SET DEST_DIR=%%P
  endlocal && set DEST_DIR=%DEST_DIR%

  155: デフォルトの名無しさん:2017/08/15(火) 08:22:11.69 ID:ltV5IdSe
  >>154
  後輩にその空白を入れられたことがある.
  「可読性を良くしようと思って・・・」って言ってたな.
  普通の高級言語やってる奴は=の前後に空白入れただけで不具合起こるなんて考えもしないわな.
  コマンドプロンプトはホント昔の仕様を引きずり過ぎだわ.

  156: デフォルトの名無しさん:2017/08/15(火) 08:51:21.42 ID:J2u+qflL
  setlocal
  enabledelayedexpansion使うとファイル名に!が入ってるとめんどくさいから極力使わないようにしてるんだけど俺だけ?みんなはどうしてる?

  157: デフォルトの名無しさん:2017/08/15(火) 08:55:13.27 ID:GzAS59pw
  >>155
  C言語で言うマクロ置換みたいなもんだからしょうがない.
  もう新規の奴はPowerShellに移行するしかない.

  158: デフォルトの名無しさん:2017/08/15(火) 10:13:39.94 ID:x5EZUuTK
  名前ソートで上に持ってきたいフォルダには名前の頭に!をつけてる.

  159: デフォルトの名無しさん:2017/08/17(木) 23:34:26.73 ID:jGLnJoZN
  スペースが入ったファイル名からスペースを取り除くには一行では無理ですか?

  160: デフォルトの名無しさん:2017/08/18(金) 00:59:25.98 ID:Oq4EZT3J
  こんな感じ?
  set "File=%~1" & ren "%File%" "remove=%File:=%"

  161: デフォルトの名無しさん:2017/08/18(金) 01:00:23.41 ID:Oq4EZT3J
  間違えた.
  set "File=%~1" & ren "%File%" "%File: =%"

  162: デフォルトの名無しさん:2017/08/20(日) 03:39:45.42 ID:w/lVOYHU
  バッチでよく使う pslist.exe はプロセス名が日本語だと間違える.
  pslist v1.4 sysonternals

  163: デフォルトの名無しさん:2017/08/20(日) 16:32:29.32 ID:7nn0chG1
  フォルダD:\XXXX直下の,
  AAAA, BBBB, CCCCの3つの隠しファイル(拡張子なし)を,
  定期的にE:\backupフォルダにバックアップするためのバッチファイルを作りたい.
  フォルダXXXX以下には, YYYY, ZZZZというフォルダがあり,
  この下にもAAAA, BBBB, CCCCと同名のファイルが存在するが,
  それはバックアップしなくていい.
  copyコマンドでは隠しファイルはコピーできない.
  xcopyコマンドではサブディレクトリ以下の同名ファイルもコピーされてしまう.
  バッチファイルで処理するためにはどうすればいいのでしょうか?
  できればアトリビュートはいじりたくないです.
  よろしくお願いいたします.

  164: デフォルトの名無しさん:2017/08/20(日) 16:35:22.92 ID:T95gEh5X
  >>161
  誰もツッコミ無しなの?

  165: デフォルトの名無しさん:2017/08/20(日) 16:53:03.09 ID:vBwVL8I3
  >>163
  xcopyでAAAAなどのファイルを一つずつ指定してコピーするというのは?

  166: デフォルトの名無しさん:2017/08/20(日) 17:25:05.34 ID:7nn0chG1
  >>165
  実験してみたんですが,
  xcopy D:\XXXX\AAAA E:\backup\
  とすると, backupフォルダには,
  AAAA
  \YYYY\AAAA
  \ZZZZ\AAAA
  の3ファイルがコピーされちゃうんですよ.
  \YYYYと\ZZZZのはいらないのでどうしたもんかなと質問させていただきました.

  167: デフォルトの名無しさん:2017/08/20(日) 17:36:31.70 ID:vBwVL8I3
  >>166
  こちらの方でもテストしたけど1ファイルだけコピーになるんだけどな.
  なんでだろ.

  168: デフォルトの名無しさん:2017/08/20(日) 17:43:47.57 ID:7nn0chG1
  >>167
  テストありがとうございます.
  あれ?
  なんか余計なスイッチ入れるとかしちゃってたかな?
  今出先なんで帰ったら再度実験してみます.

  169: デフォルトの名無しさん:2017/08/20(日) 19:15:30.58 ID:T95gEh5X
  >>161
  cd /d "%~dp1" & set "File=%~nx1" & call ren"%%File%%" "%%File: =%%"
  >>163
  cd /d "D:\XXXX"
  for %%i in (AAAA BBBB CCCC) do xcopy /h /y "%%~i" "E:\backup"

  170: デフォルトの名無しさん:2017/08/22(火) 19:19:28.49 ID:rIu52qT/
  以前こちらで聞いて試行錯誤しているのですが, 何分初心者で四苦八苦しております.
  そこでご教授願いたいのですが,
  @rem 引数有無と引数名チェック.
  if "%USR_INPUT_STR1%"=="" goto ERROR
  echo;%USR_INPUT_STR1%|findstr /R /C:"^http" /C:"openrec">NUL||(echo "%1"
  を処理できません) && goto ERROR
  @rem URLのアドレスとHTMLを環境変数へ設定.
  set ADDR=%USR_INPUT_STR1%
  for %%I in (%USR_INPUT_STR1%) do set HTML=%%~nxI
  @rem HTMLダウンロード.
  curl -L --max-redirs 10 -R -O %ADDR%
  if not %ERRORLEVEL%==0 goto ERROR
  @rem HTMLから文字列抽出.
  for /F "tokens=2 delims=<>| " %%I in ('type %HTML%^|findstr/R /C:"<title>"')
  do set TITLE=%%~I
  for /F "tokens=3 delims=, " %%I in ('type %HTML%^|find /I "m3u8"')do set
  TARGET=%%~I
  ffmpeg -c copy "%TITLE%" -i "%TARGET%"
  pause
  exit
  :ERROR
  echo 引数が無効のため処理できませんでした.
  pause
  exit
  このままだと, ファイル名がUTF-8で文字化けしてしまいます.
  これを, 面倒なのでファイル名で出力したいと思ったのですが, 正規表現が弱く全く前に進みません.
  丸投げで申し訳ございませんが, どうか手直ししていただけませんでしょうか.
  よろしくお願い致します.

  171: デフォルトの名無しさん:2017/08/22(火) 20:10:25.50 ID:uGuLhv+Q
  powershellに切り替えたら?

  172: デフォルトの名無しさん:2017/08/22(火) 20:50:12.77 ID:1dHyDD35
  >>170
  よく分からないけどbat自体をUTF-8で書いてchcp 65001というのは?

  173: デフォルトの名無しさん:2017/08/22(火) 20:52:58.84 ID:rIu52qT/
  >>172
  それも考えたのですが, 不特定多数のPCで使う機会があるので手間が増えてしまうなと思い諦めました.
  そこで, URLからIDとなる文字列を抽出してそれをファイル名に使おうと考えました.
  参考URL:https://www.openrec.tv/live/7cuVKOAY3lv
  この末尾の7cuVKOAY3lvの部分だけを, TITLEに代入したいと思ったのですが, 思うようにいかなくて・・・.

  174: デフォルトの名無しさん:2017/08/22(火) 21:10:23.56 ID:rIu52qT/
  結局, 実行batのディレクトリ内にnkf32を導入し,
  nkf -s --overwrite %HTML%
  と書き加えて対処致しました.

  175: デフォルトの名無しさん:2017/08/29(火) 14:35:48.67 ID:91TLAHUR
  フォルダの中に, あああ_1.flv あああ_2.flv ・・・ あああ_100.flvのようなファイルがあるときに,
  あああ_1.flvをあああ_001.flvのようにリネームしたりできないんでしょうか.

  176: デフォルトの名無しさん:2017/08/29(火) 15:34:02.29 ID:ZSKrJS0x
  >>175
  Flexible Renamer

  177: デフォルトの名無しさん:2017/08/29(火) 16:50:10.59 ID:iDduY4Qi
  お〜瑠璃ね〜むで十分やぞ.
  D&D用のショトカも作れるしな.

  178: デフォルトの名無しさん:2017/08/29(火) 17:11:24.47 ID:1aRkt9bd
  >>175
  「のようなファイルがあるときに」の条件がどこまでかわからないが.
  >>176が一番早いのは間違いない.

  179: デフォルトの名無しさん:2017/08/29(火) 20:06:42.61 ID:KnTCuJQc
  set "a=あああ_"
  set "b=.flv"
  setlocal enabledelayedexpansion
  for /L %%i in (1, 1, 99) do set /a c=%%i+1000 & ren "!a!%%i!b!""!a!!c:~1!!b!"

  180: デフォルトの名無しさん:2017/08/31(木) 16:38:58.30 ID:omILiWW+
  >>175
  pushd "%~dp1"
  :LOOP
  for /f "tokens=1, 2 delims=_" %%a in ("%~n1") do (
  set FNAME=%%a
  set /a FN=%%b+1000
  )
  ren "%~1" "%FNAME%_%FN:~-3%%~x1"
  shift
  if not "%~1"=="" goto :LOOP

  181: デフォルトの名無しさん:2017/08/31(木) 17:02:31.64 ID:KsdTyPQv
  >>180
  変換の数字の前が_文字じゃないかもしれないし.
  _文字がファイル名の中に混じっている可能性もあるし.

  182: デフォルトの名無しさん:2017/08/31(木) 17:53:19.91 ID:Vr+Gp9oD
  どのスレでも一緒だが質問の要件が分かりにくいのはめんどうだな.

  183: デフォルトの名無しさん:2017/08/31(木) 18:00:47.56 ID:kMuf1wHV
  なんでか知らないけど他人に勝手にマルチポストされたけど>>175の質問は元のスレで解決したのでもういいです.

  184: デフォルトの名無しさん:2017/09/03(日) 22:03:48.56 ID:BJjXydYg
  cd \
  pushd D:\abc
  setlocal
  popd
  としても元の \ に戻らなかった.

  185: デフォルトの名無しさん:2017/09/04(月) 00:02:37.80 ID:pBY/MKIa
  >>184
  そうならなきゃ逆にダメでしょ.
  setlocalでは(親の環境を引き継いだ)別の環境の上で実行されている.
  カレントを移動しようが環境変数を操作しようが元の環境には影響しない.
  pushd D:\abc
  setlocal
  endlocal
  popd
  または.
  setlocal
  pushd D:\abc
  endlocal

  186: デフォルトの名無しさん:2017/09/04(月) 01:15:44.81 ID:24unggVp
  >>185
  ありがとうございました.
  そういうことでしたか.

  187: デフォルトの名無しさん:2017/09/16(土) 05:02:43.18 ID:cRJ1WDqm
  今さらバッチファイル入門て・・・.
  余計な被害者増やさずPowerShellにしろよ.
  これだからIT後進国は.
  超入門コマンドプロンプト:バッチコマンドで定型処理を行う (1/3) - @IT
  http://www.atmarkit.co.jp/ait/articles/1709/15/news034.html
  017年09月15日 05時00分 公開.

  188: デフォルトの名無しさん:2017/09/16(土) 05:59:12.53 ID:TbhIjs8j
  >>187
  このスレのタイトル見てから言えよ.
  それとも, お前は, 自分が使ってないソフトのスレ行って.
  「別のソフト使え」って言って巡るのが趣味なのか?

  189: デフォルトの名無しさん:2017/09/16(土) 06:09:12.67 ID:NzFbxZfY
  PowerShellに移行しようと思ったこともあるけどファイルをD&D出来ないから断念した.
  あと他人の環境で動くのか分からないから渡しにくいし.

  190: デフォルトの名無しさん:2017/09/16(土) 06:11:20.82 ID:NzFbxZfY
  まあbatに面倒臭いとこがあるのも理解できるけど.
  せめて正規表現と小数の計算くらいはあればよかったんだが.

  191: デフォルトの名無しさん:2017/09/16(土) 11:00:27.02 ID:Nvo3nRRv
  自分で使うにはPoweShellはめちゃめちゃ便利だけど.
  一般的に定着してるかというとそうじゃないし.

  192: デフォルトの名無しさん:2017/09/17(日) 11:17:50.05 ID:jtG62g+O
  PowerShell は起動が遅いから小さいバッチをループで呼び出すのには向いてないんじゃないかな.
  いったんロードしたオブジェクトを関数形式で呼び出せばいいんだろうけどよくわからなくてめんどくさいし.

  193: デフォルトの名無しさん:2017/09/17(日) 11:23:06.30 ID:jtG62g+O
  最近, フリーソフトとかの小さいやつの管理がめんどくさくなって.
  メニュー代わりにバッチファイルを使うことにしたんですよ.
  全部をVHDに入れてマウントなんで, 持ち運びは仮想ディスクファイル1個をコピーするだけ.
  起動が素早いのがメリット.
  アイコンが出ないのがデメリット.
  アイコン出そうと思ったら全環境で共通のドライブ名に固定してショートカットを使ったらいいと思うけど.
  プログラムの入ったフォルダ.
  Program Files 3
  バッチファイルの入ったフォルダ.
  Program Link
  [FirefoxPortable.bat]
  set pathname1=%~d0\Program Files
  3\FireFoxPortable52.0.2\FirefoxPortable\FirefoxPortable.exe
  start "" "%pathname1%"

  194: デフォルトの名無しさん:2017/09/17(日) 12:31:00.83 ID:z++LvPT9
  それだけならバッチ作るまでもなくハードリンクにすればアイコン問題も解決では.

  195: デフォルトの名無しさん:2017/09/17(日) 12:37:46.24 ID:z++LvPT9
  あ, すまんそれだと実行ファイルと同じフォルダのDLL読めないからダメか.

  196: デフォルトの名無しさん:2017/09/18(月) 00:06:56.51 ID:AVBMNnfo
  短いファイル名に関していくつか質問.
  1 短いファイル名はダブルクオーテーションで囲まなくても実行可能?
  2 短いファイル名は取得して一ヶ月経っても変動せずにそのパスを実行出来る?

  197: デフォルトの名無しさん:2017/09/18(月) 23:50:36.04 ID:2dThcY7y
  >>196
  「1」は, 多分可能.
  「2」は, 他にファイルが出来なければが前提かと.
  「dir c:\*1」と「dir c:\*1 /x」を実行して挙動を確かめて下さい.

  198: デフォルトの名無しさん:2017/09/19(火) 00:09:36.87 ID:I5t298fo
  少なくともNTFSではファイルの情報としてショートファイルネームも格納されるから.
  ファイルが存在したままある日突然名前が変わることはないはず.
  そのファイルを削除して似たようなロングファイルネームの別のファイルを作った時.
  同名だけど別のファイルが出来てしまう事はありえる.

  199: 196:2017/09/19(火) 01:33:17.50 ID:FIGNw+kF
  レスありがとうございます.
  ちなみに自分がやりたかったのは[下矢印]と同じケースで自作のbatをタスクスケジューラに登録したいというものでした.
  schtasksで半角スペースを含むパスを実行させたい (DOSプロンプト活用相談室LOG)
  http://fpcu.on.coocan.jp/dosvcmd/bbs/log/taskkillstart/at/4-0842.html
  "を\"と書いてエスケープさせるやり方もあるようですがそちらではbatにダブルクォーテーションで囲った引数を渡すと不可解な動作をすることがあり上手くいきせんでした.
  batのパスにスペースを含んだ場合  起動しない.
  batのパスにスペースを含まない場合  %~dp0を実行したときにbatのフォルダパスの頭にカレントディレクトリの文字列も追加される.

  200: デフォルトの名無しさん:2017/09/19(火) 02:17:59.79 ID:Lhe/hdFe
  mklinkやsubstを使って違う名前でアクセスするのはどうなのでしょう.
  うまくいくかどうかわかりませんが.
  ファイル名フォルダ名に空白や%^!みたいな記号があると困ることが多いですね.

  201: デフォルトの名無しさん:2017/09/20(水) 03:12:37.88 ID:aIPv0JYK
  >>199
  この書き方に準じていないだけでは?
  A Scheduled Task Does Not Run When You Use Schtasks.exe to Create It andWhen
  the Path of the Scheduled Task Contains a Space
  https://support.microsoft.com/en-us/help/823093/a-scheduled-task-does-not-run-when-you-use-schtasks-exe-to-create-it-a
  Schtasks.exe を使用して, スケジュールされたタスクのパスにスペースが含まれている場合を作成するときにスケジュールされたタスクが実行されません.
  https://support.microsoft.com/ja-jp/help/823093/a-scheduled-task-does-not-run-when-you-use-schtasks-exe-to-create-it-a
  失敗例.
  schtasks /create /tn "my task" /tr "c:\foldername containingspaces\script.bat
  arguments" /sc once /sd 07/29/2003 /st 10:01
  成功例.
  schtasks /create /tn "my task" /tr "\"c:\foldernamename containing
  spaces\script.bat\" arguments" /sc once /sd 07/29/2003/st 10:01

  202: 196:2017/09/20(水) 06:44:59.65 ID:w13Y3qRA
  >>201
  自分の説明が下手で伝わらなかったんだと思いますが,
  成功例の方の記述でパスにスペースを含むbatは起動できるのですがそのbatにダブルクオーテーションを含む引数を渡すと動作がおかしくなるのです.
  引数にダブルクオーテーションを含まない場合は正常に起動できます.

  203: 196:2017/09/20(水) 07:01:29.72 ID:w13Y3qRA
  一応追記しておくと, おかしくなるのはタスクスケジューラから起動した場合限定で通常の起動では問題ありません.
  呼び出すbat内の記述にミスがあるとかそういうのではないと思います.

  204: デフォルトの名無しさん:2017/09/21(木) 11:18:59.39 ID:WXZB4PjF
  %CMDCMDLINE%はどうなってる?

  205: デフォルトの名無しさん:2017/09/21(木) 18:15:09.28 ID:X0F1M9Qy
  argumentにダブルクォーテションがある場合もパスと同様に\"してる?

  206: デフォルトの名無しさん:2017/09/21(木) 18:35:03.44 ID:uKBRYTKY
  test

  207: 196:2017/09/21(木) 18:38:58.99 ID:uKBRYTKY
  NGワードが含まれていたようなので他所に書きました.
  https://pastebin.com/9yMQfC37

  208: デフォルトの名無しさん:2017/09/24(日) 20:04:30.28 ID:0vysq0yQ
  基本的に引数の中の半角スペースはデリミタであり.
  そこより左に " が奇数個あればデリミタじゃなくなる.
  それに関しては \" とか ^" とかあっても関係ないんじゃね.

  209: デフォルトの名無しさん:2017/09/25(月) 14:27:46.65 ID:aNTDK6ge
  >>207
  もう見てないかも知れないけど.
  schtasks /create /tn "test\test" /sc once /st 23:00 /tr "cmd/s /c
  \"\"C:\schtasks test\schtaskstest.bat\" hoge1 hoge2\"ho ge3\" \"h oge4\"\""
  これだと実行ファイルのパスにスペースがあっても問題ない.

  210: 196:2017/09/26(火) 15:58:12.82 ID:dvSxVtoZ
  >>209
  なるほど, 直接batを登録するのではなくてcmdのほうを登録すれば良かったんですね.
  思いつきませんでした.
  助かりました, ありがとうございます.

  211: デフォルトの名無しさん:2017/10/10(火) 23:43:05.86 ID:Z33TeZgR
  文字コードがUTF8のテキストファイルが2つあるのですが.
  FCコマンドで差分を出力したところ文字化けしてしまいました.
  何か良い方法はないでしょうか?

  212: デフォルトの名無しさん:2017/10/11(水) 07:47:52.42 ID:S/IKnpLv
  メモ帳でSJISで保存する.

  213: デフォルトの名無しさん:2017/10/12(木) 16:57:41.08 ID:c/LUECgg
  なんでSJISなんだよ, unicodeにすればいいじゃん(Windows2000, XPは除く)
  @echo off
  set f1=%1
  set f2=%2
  if not defined f2 echo 引数1.2に比較するファイルパスを指定してください& goto :eof
  if not exist %f1% echo ファイル %1 がありません& goto :eof
  if not exist %f2% echo ファイル %2 がありません& goto :eof
  start "" /min /wait cmd /u /c "chcp 65001 & type %1>u_%1& type %2>u_%2"
  chcp 932>nul
  fc /u /n u_%1 u_%2
  del u_%1 u_%2

  214: デフォルトの名無しさん:2017/10/12(木) 18:25:29.18 ID:c/LUECgg
  start付けるとうまくいかないな.
  訂正.
  start "" /min /wait cmd /c "chcp 65001&cmd /u /c type%1>u_%1&cmd /u /c type
  %2>u_%2"
  fc /u /n u_%1 u_%2

  215: デフォルトの名無しさん:2017/10/16(月) 01:07:49.23 ID:rrtzmh2c
  バッチファイル作っておいて以下のようなフォルダの名前の変更を毎回ダブルクリック一発で済ませたいのですが.
  いろいろやってみたのですが, というほどの力もなく.
  お知恵お貸し下さい.
  処理前のフォルダ名一覧.
  1008安住紳一郎の日曜天国.
  10月15日安住紳一郎の日曜天国.
  10月15日爆笑問題の日曜サンデー (1)
  10月15日爆笑問題の日曜サンデー (2)
  処理後のフォルダ名.
  1008安住紳一郎の日曜天国.
  1015安住紳一郎の日曜天国.
  1015爆笑問題の日曜サンデー (1)
  1015爆笑問題の日曜サンデー (2)

  216: デフォルトの名無しさん:2017/10/16(月) 04:34:03.61 ID:3Tj/cKOj
  vbs 正規表現置換 ファイルリネーム.

  217: デフォルトの名無しさん:2017/10/16(月) 08:11:27.58 ID:GL/w6Jlo
  >>215
  for /f "delims=" %%a in ('dir /ad /b ^| findstr /b /r
  "[0-9][0-9]月[0-9][0-9]日"')do call :SUB "%%~a"
  exit /b
  :SUB
  set s=%~1
  ren %1 "%s:~0, 2%%s:~3, 2%%s:~6%"

  218: デフォルトの名無しさん:2017/10/16(月) 23:00:12.58 ID:rrtzmh2c
  >>216
  ヒント下さったようでありがとうございます. でも, ゼロから書き始めることが出来ないんです.
  >>217
  私の求めていた動作です. これで完璧, ありがとうございます.
  ひと安心して解析に移ったわけです. . .
  1.
  "[0-9][0-9]月[0-9][0-9]日"
  [上矢印]これでは22月33日にも対応というわけか, こやつめハハハ.
  フォルダ名の行頭部分は日付として機械的に生成される予想できる値ですので[0-9]で何の問題もないです.
  勉強の為に, ここをいじってみました.
  Month部分は, 1 2 3...10 11 12, なら[1-12]で済むのかな.
  ところが0埋めなので, 01 02 03...10 11 12, となると, 0[1-9]|1[0-2], かな.
  Day部分は, 01 02 03...29 30 31, うーん0[1-9]|[1-2][0-9]|3[0-1], となる.
  これらを書き換えてみて, はい, 動きませんでした.
  今回のような自分用プログラムは動けばよいわけで, 教えて下さった[0-9]で何の問題もない.
  これ以上無駄な時間を掛けても&シンプルな方が可読性がよい.

  219: デフォルトの名無しさん:2017/10/16(月) 23:01:09.80 ID:rrtzmh2c
  2.
  for a in ('標準出力  パイプ  標準入力') do
  この部分, パイプの縦棒の左にくっついてる^は何者なのでしょう. . . 初めて見ました.
  アッ, 日付部分が行頭だからか?いやfindstrに行頭オプションの/Bが付いてるし, そもそもパイプの左になぜ?
  検索してみたのですがわからずここで冷や汗が出てきて.
  ウーンこれはなんなんだろう. そもそもメタ文字なのか銅貨さえわからない.
  3.
  そもそも何をしているのかというとradikoというプログラムでお気に入りのラジオ番組を録音しています.
  AMラジオ番組ではCMのほとんどが過払い金のCMで聞きたくないのでスキップしたいのです.
  ウォークマンで右ボタンを長押しすると早送り再生になるのですが, 突然入るCMにイラッときて.
  長押しではなく短く押してしまって次のmp3ファイルに飛んでしまうのです. イライラッ!
  そこで1分ごとに分割してしまうことにしました. mp3directcutというソフトを使って切り出すことが出来ることを.
  知りました. そのうち, 切り出し作業が面倒になって調べていくうちにコマンドラインでの実行も可能と分かり,
  バッチファイル化の作業に掛かりました. 出来上がったのは以下のような4行のバッチファイルです.
  @echo on
  echo %*
  for /D %%a in (%*) do (mkdir "%%~na")&(copy 1min.mpd
  "%%~na".mpd)&(mp3directcut"%%~fa" /autocue "%~dp1%%~na")&(del
  "%%~fa")&(del"%%~na".mpd)
  pause
  1min.mpdというのは1分ごとに切る指定が記述されているキューファイルです.
  同名の.mpdファイルがあるとそれを使ってくれるみたいなので,最初に元ファイルとして作っておきます.
  1分ごとに切り分けられたものを再生してもけっこう大丈夫で, 音楽だと気付く程度です.
  いろいろ書いてしまいましたが頭が精一杯なのでとりあえずお礼申し上げ失礼ます.

  220: デフォルトの名無しさん:2017/10/16(月) 23:34:41.57 ID:1IRdIkAf
  >>219
  ^(キャレット)はエスケープ文字.
  これを付けずに実行すると, コマンドラインパーサで式評価時にパイプとして機能しちゃう.
  つまりfor文の途中にパイプが現れてそこで途切れちゃうことになる.
  やりたいことは, この行の最初の評価時には単なる|の文字として取り扱ってもらい.
  次の''で括ったコマンドの評価時にはパイプとして機能してほしいってわけ.
  1回の評価を->で表すとすると,
  ^| -> |
  ^^| -> ^| -> |
  ^^^^| -> ^^| -> ^| -> |
  って感じに展開されていく(俺は3回まで使ったことがある)
  %a%とかの環境変数の評価も似たようなもんだね.
  %%a%% -> %a%

  221: デフォルトの名無しさん:2017/10/16(月) 23:49:53.08 ID:1IRdIkAf
  環境変数の評価を遅延させる方法はつまり.
  %%temp%%と%^temp%との2通り書けるわけだ.
  (結果的に同じになるけど動作は違う)

  222: デフォルトの名無しさん:2017/10/16(月) 23:57:55.48 ID:1IRdIkAf
  >>221
  これはコマンドプロンプトでのことでbatに書くときはダメだね.

  223: デフォルトの名無しさん:2017/10/17(火) 00:03:17.05 ID:bWF1v8hX
  評価と展開がごっちゃになってる.
  俺の理解が浅い(忘れっぽい)せいだな.

  224: デフォルトの名無しさん:2017/10/17(火) 07:18:41.23 ID:3NFRyYoM
  ここで言ってる遅延と, いわゆる「遅延展開」は別物ですか?

  225: デフォルトの名無しさん:2017/10/17(火) 09:05:40.81 ID:fpIKg5e5
  >>218
  >Month部分は, 1 2 3...10 11 12, なら[1-12]
  []は文字集合. []内の文字のうち何れか1文字という意味. 文字列は扱えない.
  [1-12]だと"1-1"と"2"という意味で1か2になる.
  01-12月, 01-31日を表すのなら [01][0-9]月[0-3][0-9]日.
  [01]が0か1で十の位, [0-9]が0から9で一の位.
  桁の揃っている01なら可能だが1-12月はfindstrの貧弱な正規表現では1度に表すのは無理なので.
  1桁の場合と2桁の場合とを別けて検索文字列に設定する必要がある.
  ちょ, 誰か.
  findstr /r "検索文字列" とfindstr /r /c:"検索文字列" の違いを教えてくれ.忘れた.

  226: デフォルトの名無しさん:2017/10/17(火) 10:39:26.27 ID:AWu3veoe
  >>225
  解説ありがとうございます.
  とりあえず日付の所いろいろやってみてるのですがうまく行かないままです.
  正規表現といわず直接文字列を指定して | が有効になるかどうかというところから実験してます.
  for /f "delims=" %%a in ('dir /ad /b ^| findstr /b /r ""10月15日"|"10月16日""')do
  call :SUB "%%~a"
  pause
  exit /b
  :SUB
  rem set s=%~1
  rem ren %1 "%s:~0, 2%%s:~3, 2%%s:~6%"
  findstrについての解説は検索で出てきた.
  http://www.atmarkit.co.jp/ait/articles/0412/18/news018.html
  を読みました. 読んだだけです. 頑張ります.

  227: デフォルトの名無しさん:2017/10/17(火) 11:38:46.09 ID:fpIKg5e5
  >""10月15日"|"10月16日""
  "で""を囲えないしfindstrの正規表現で|は使えない.
  findstr /?
  まともな正規表現を使いたければvbsやPowerShell, Perlとか別のスクリプトに行ったほうがいい.
  バッチだと"&"や"%"とかダメ文字があるし凝った事をやろうとするといずれ行き詰まる.
  急がば回れ.

  228: デフォルトの名無しさん:2017/10/17(火) 22:45:54.56 ID:bWF1v8hX
  参考にWSHでもどうぞ(hoge.jsファイルとして作成), コマンドプロンプトから.
  hoge "フォルダ名" (又は  cscript //nologo hoge.js "フォルダ名")
  又は, エクスプローラ等からフォルダをこのjsファイル(又はショートカット)にドロップして実行.
  var fso = new ActiveXObject("Scripting.FileSystemObject");
  var args = WScript.Arguments;
  if(args.length<1) throw Error("引数にフォルダを指定してください");
  if(!fso.FolderExists(args(0))) throw Error("指定のフォルダが存在しません");
  var folder = fso.GetFolder(args(0)), s = "", success = [], fail= [], name,
  name2, em, i, r;
  var re = /^(\d{1, 2})月(\d{1, 2})日(.*)$/;
  var func_new_name = function(all, mm, dd, ss) {
  if(mm<1 || mm>12 || dd<1 || dd>31) return "";
  return ("0"+mm).substr(mm.length-1) + ("0"+dd).substr(dd.length-1)+ ss;
  };
  em = new Enumerator(folder.SubFolders);
  for(em.moveFirst();!em.atEnd();em.moveNext()) {
  name = em.item().Name;
  if(re.test(name)) {
  name2 = name.replace(re, func_new_name);
  if(name2) {
  try{em.item().Name = name2; success.push(" "+name+" ->"+name2);}
  catch(e) {fail.push(" "+name+" -> "+name2);}
  }
  }
  }
  if(success.length>0) s = "リネーム成功\n"+success.join("\n");
  if(fail.length>0) s += "\nリネーム失敗\n"+fail.join("\n");
  WScript.Echo(s || "対象フォルダなし");

  229: デフォルトの名無しさん:2017/10/17(火) 23:49:36.84 ID:G9wCIPXR
  もうPowerShellのRename-Item使おうぜ.
  個人用途だろうし制約ないでしょ.

  230: デフォルトの名無しさん:2017/10/18(水) 02:49:24.30 ID:nuzaMfIv
  覚えたてによく居るよね.
  要件無視した勝手な仕様でエラー判定とか結果ダイアログとかゴテゴテ実装してドヤ顔で持ってきちゃう子.

  231: デフォルトの名無しさん:2017/10/18(水) 02:57:26.06 ID:O0s7d+Fx
  まあダブルクリックで不意に実行されちゃうようなのは作りたくないよな.

  232: デフォルトの名無しさん:2017/10/18(水) 07:04:24.46 ID:G1+K6kx+
  >>215 無理やりバッチファイルの例.
  for /d %%i in (*) do set "a=%%~nxi" & call :w
  goto :eof
  :w
  setlocal enabledelayedexpansion
  set "e=m" & set /a b=0, m=0, d=0
  :x
  set "c=!a:~%b%, 1!"
  if not defined c goto :eof
  for /L %%j in (0, 1, 9) do if "!c!"=="%%j" set /a !e!=!e!*10+c& goto y
  if not "!c!"=="月" goto z
  if not "!e!"=="m" goto :eof
  if !m! gtr 12 goto :eof
  set "e=d"
  :y
  set /a b+=1 & goto x
  :z
  if not "!c!"=="日" goto :eof
  if not "!e!"=="d" goto :eof
  if !d! gtr 31 goto :eof
  set /a f=m*d, m+=100, d+=100, b+=1
  if !f! gtr 0 ren "!a!" "!m:~1!!d:~1!!a:~%b%!"

  233: デフォルトの名無しさん:2017/10/18(水) 22:17:20.50 ID:on6I0HDV
  >>231
  うちの現場のバッチは例え内部で使わなかろうが最低1つは必ず引数を渡す仕様になってる.
  そしてそれが渡されなかった場合は処理せずに終了する作りになっている.
  理由は誤ってダブクリしちゃった場合の対策なんだってさ.

  234: デフォルトの名無しさん:2017/10/18(水) 22:23:22.61 ID:hY2xT5yc
  batって大体はD&Dして使うようなの書いてるな.

  235: デフォルトの名無しさん:2017/10/19(木) 01:03:03.64 ID:cgLUQcTs
  >>230
  なんか癇に障ったみたいだけど, 言い訳すると.
  俺は, 質問者によって回答内容を変えてる.
  今回の質問者は初心者だと感じたし, さらには細かい拘りを持っているように見受けられた.
  (13月32日なんて作らないだろうし, もしあったって1332に変換されて悪いことはないと思う)
  色々と手を加えて試行錯誤することが好きなんだろうなって思ったから.
  役に立ちそうな追加部分を記述した.
  それに1レスで書く分には, 数行増えようが関係ないだろうと思ったしね.

  236: デフォルトの名無しさん:2017/10/19(木) 08:32:22.21 ID:ny4cf+Vz
  >>233
  なるほど.

  237: デフォルトの名無しさん:2017/10/19(木) 22:12:55.60 ID:JROgBEvY
  ザ・ワールド, 時よ止まれ.

  238: デフォルトの名無しさん:2017/10/20(金) 03:00:35.66 ID:1Na2h1P4
  キッティングの自動化をしたいんだが, 参考になるサイトない?

  239: デフォルトの名無しさん:2017/10/20(金) 03:00:59.71 ID:1Na2h1P4
  対象のレジストリ見つけるとかめんどい.

  240: デフォルトの名無しさん:2017/10/20(金) 23:41:00.84 ID:aZN6SiIl
  どの程度の自動化?

  241: デフォルトの名無しさん:2017/10/21(土) 08:56:40.19 ID:Nsvn2WYb
  >>238
  何を自動化するん?

  242: デフォルトの名無しさん:2017/10/21(土) 16:42:48.10 ID:DofUW9OG
  そんなんツールが出てるんだからその説明でも読めよ.

  243: デフォルトの名無しさん:2017/10/21(土) 18:43:14.12 ID:TBS9tbdH
  一発で, ファイアウォールの受信規則とかインターネットオプションとか.

  244: 名無しさん@そうだ選挙に行こう! Go to vote!:2017/10/22(日) 07:51:26.89 ID:eb/3UN8i
  >>215
  $before = ls -Directory | Where-Object { $_ -match "^\d+月\d+日"}
  $after = $before | foreach { $_.Name -replace '^(\d+)月(\d+)日', '$1$2' }
  $idx = 0;
  $before | foreach {
  Rename-Item -WhatIf $_.FullName $after[$idx];
  $idx++;
  }
  PowerShell で書いたので, cd で, そのフォルダへ移動して実行して.
  -WhatIf が付いているので, 本当には実行せずに, 結果だけを見れる.
  本当に実行する際は, -WhatIf を削除して実行して.
  配列 $before には「02月03日」などで始まるフォルダだけを, 入れる.
  配列 $after には「02月03日」の部分だけを「0203」に変換した, フォルダ名を入れる.
  Rename-Item で, 該当する全フォルダ名を変換する.

  245: 名無しさん@そうだ選挙に行こう! Go to vote!:2017/10/22(日) 14:53:59.01 ID:1YRZU7Jo
  問題は, 月を01〜12まで, 日を01〜31までのチェックを入れることだけどね.

  246: 名無しさん@そうだ選挙に行こう! Go to vote!:2017/10/22(日) 16:29:48.93 ID:rLFHcAK9
  >>244
  ls <directory-name> -directory | ren -newname {$_.name -replace
  '^(\d+)月(\d+)日','$1$2' }
  lsの-filterやwhere-object使ってもいいけど.
  この例の場合は不要だと思うよ.

  247: デフォルトの名無しさん:2017/10/23(月) 07:20:31.59 ID:A3jhOkfm
  ls -directory | ren -WhatIf -newname {$_.name -replace '^(\d+)月(\d+)日','$1$2'
}
  上記で, where-object が無いと,
  変更されないフォルダまで, 表示されるのが気持ち悪い.

  248: デフォルトの名無しさん:2017/10/23(月) 22:30:10.89 ID:TV21zs/8
  Windows7SP1では, Get-ChildItemに-directoryオプションは無いんでエラーが表示された.
  調べたら, 3.0以降でこのオプションが付いた模様.
  この際なので, 5.0, 5.1をインストールした.
  Windows7の人の参考まで.

  249: デフォルトの名無しさん:2017/10/24(火) 18:41:12.61 ID:QQrV41zo
  PowerShellのスクリプトファイルの拡張子は普通.ps1を使うが.
  デフォルトではファイルの実行を許可してないし,
  また許可後もダイレクトにファイル名を指定しても実行できない.
  って保険かけすぎで入門者には敷居が高いだろと思わないでもないなあ.
  >>247
  where-objectを入れてみた.
  (まだ2時間ぐらいしかやってないんでもっといい書き方があるかも)
  $re='^(\d+)月(\d+)日';ls -directory|? name -match $re|ren -whatif
  -newname{$_.name -replace $re, '$1$2'}
  このスレ的にはアリアス使うなら, lsよりもdirが合ってる気もするけど.

  250: デフォルトの名無しさん:2017/11/03(金) 20:22:18.43 ID:+gpl8JNW
  ここで聞くべきか迷ったのですが・・・.
  自分のマシンからリモートデスクトップで接続できるサーバー(確かWin2008R2)があって.
  そのサーバーと同じネットワーク内にクライアント端末(Win7)があります.
  そのクライアント端末のプロセスをリモートデスクトップで接続したサーバーから確認することは可能でしょうか?
  (サーバーには管理者権限で接続しています)
  要はクライアント端末でtasklistコマンドを打った結果が見たいのですが.
  ちなみにクライアント端末はDHCP設定なので起動のたびにIPアドレスが変わります・・・.
  今は1日に何度も遠くにあるクライアント端末まで行ってプロセスを確認しています.
  1回だけ行ってIPアドレスをメモるぐらいなら全然構わないので何か方法があれば教えて下さい.

  251: デフォルトの名無しさん:2017/11/03(金) 21:42:45.24 ID:91m0YuAi
  クライアントに自分のタスクリストをファイルを記録する周期ジョブを作成しておく.
  必要であれば暗号化しておく.
  そのファイルをメールで自動送付するようにしておくか,
  クライアントにwebエリアがあればそこに置きこちらから見にいく.

  252: デフォルトの名無しさん:2017/11/03(金) 21:52:08.46 ID:z1gogpom
  >>250
  サーバから tasklist /s クライアント端末名 (/u user /p pass) を実行では見れないんですか?
  ファイアウォールの設定が必要かもしれませんけど.

  253: デフォルトの名無しさん:2017/11/03(金) 22:47:57.34 ID:+QQUmgGP
  >>250
  1) 他のPCのプロセス状態を知りたい.
  2) DHCPで設定されているPCのIPアドレスを知りたい.
  ってことでいいかな.
  1) はtasklist の /s オプションで知りたいPCのIPアドレスを指定すれば行けるはず.
  ただし事前にPC側に設定が必要.
  かつPCにログインできる情報が必要.
  2) は.
  2-1) 直接見に行ってipconfigで確認する.
  2-2) MACアドレスわかってるならサーバーからそのネットワークアドレス全体にpingを打ちつつarpコマンドで相手のMACアドレス確認していけばいい.
  2-3) DHCPサーバーを管理してるならPCのIPアドレスを確認する方法があるかも, まあそれならPCのIPアドレスを固定した方がいいかも.
  2-4) >>251みたいな方法で定期的にIPアドレスを通知してもらう.

  254: 250:2017/11/04(土) 18:18:26.62 ID:HSP2f8JH
  みなさん情報ありがとうございます.
  来週になったらとりあえず>>252さんの方法を試してみます. (一番手軽なので・・・汗)
  それでダメな場合は一日一回直接IPアドレスを確認しにいく方式にします.
  というのもpingのブロードキャストは現場のルールで禁止されてるっぽいので.
  クライアント端末も特別な用途のためのものなのでタスク作ったり何かを仕掛けるのは厳しそうです.
  仕掛けられれば業務はすごく楽になるんですけど「セキュリティ上問題が・・・」とか言われて突っぱねられる可能性大です. ><
  尚, pingブロードキャスト以外の方法でIPを知る方法については自分でも調べてみます.
  どうもありがとうございます. 助かりました!

  255: デフォルトの名無しさん:2017/11/04(土) 18:30:41.27 ID:sTeHaJ1X
  >>254
  >>252-253に書いてあるけど事前にクライアント側の設定しないとtasklist /sでプロセス情報見れないけど, そこは大丈夫なの?

  256: デフォルトの名無しさん:2017/11/05(日) 10:20:45.02 ID:rFS24mxQ
  set infilenm=001.txt
  set outfilenm=002.txt
  set beforestr=""""
  set afterstr=""
  type nul >%outfilenm%
  setlocal enabledelayedexpansion
  for /f "delims=" %%A in (%infilenm%) do (
  set line=%%A
  echo !line:%beforestr%=%afterstr%!>>%outfilenm%
  )
  endlocal
  001.txtからダブルクォーテーションを削除して002.txtに保存したいだけなんですが,
  3行目と4行目の表記がわからず, 考えられる限り書き直して, うまくいきません.
  あるいは別のBATでもいいのですが教えてください.

  257: デフォルトの名無しさん:2017/11/05(日) 11:42:01.62 ID:vm51NJQ8
  >>256
  set beforestr=^^"
  set afterstr=^^
  でどうかな?

  258: デフォルトの名無しさん:2017/11/05(日) 11:56:26.30 ID:vm51NJQ8
  ただ001.txtのデータ次第でうまくいかない場合があるんで.
  別のスクリプト言語(PowerShellやWSH等)で書いたほうがいい.

  259: 256:2017/11/05(日) 12:18:29.39 ID:rFS24mxQ
  >>257
  >>258
  素早いお答えありがとうございます.
  >>257
  >set beforestr=^^"
  >set afterstr=^^
  ダブルクォーテーション消えました!
  ありがとうございました.

  260: デフォルトの名無しさん:2017/11/05(日) 13:20:27.79 ID:vm51NJQ8
  >>259
  どういうことに使うのか知らないけど, 大切なデータなら止めとくべき.
  改行だけの行が消えるのは知ってると思うけど以下のような行があると(回避は可能だが)
  ab!cd!ef
  a! "b ^

  261: デフォルトの名無しさん:2017/11/05(日) 13:40:33.57 ID:rFS24mxQ
  >>260
  ご心配ありがとうございます.
  大丈夫です. ものは, <a href とかのhtmlタグで作成したリンクリストで,
  正規表現とかエスケープっぽい記号等はなく,
  そもそもプライベートファイルなので, これで素早くリストができて万々歳です.

  262: デフォルトの名無しさん:2017/11/06(月) 15:18:34.73 ID:K1roLwuw
  >>260 これじゃダメか?
  ていうかダメな例を教えてほしい.
  for /f "delims=" %%i in (1.txt) do (
  set a=%%i
  setlocal enabledelayedexpansion
  echo !a:^"=!>>2.txt
  endlocal
  )

  263: デフォルトの名無しさん:2017/11/06(月) 15:59:22.60 ID:K1roLwuw
  半角スペースだけの行は化けるな.

  264: デフォルトの名無しさん:2017/11/06(月) 19:12:27.47 ID:Mdq5cGE3
  echo, とか, echo;とかで.

  265: デフォルトの名無しさん:2017/11/06(月) 23:15:25.56 ID:RrRem/45
  バッチファイルに渡された引数が1つなのか2つなのかを判定したいのですが.
  どのように記述すれば良いのでしょうか?
  以下ではダメでした.
  if defined %2 echo 引数は2つです else echo 引数は1つです.

  266: デフォルトの名無しさん:2017/11/07(火) 01:14:40.14 ID:xsgE2wk0
  if not '%2=='

  267: デフォルトの名無しさん:2017/11/07(火) 07:09:27.79 ID:4pg/kk0r
  >>264 ありがとう.
  for /f "delims=" %%i in (001.txt) do (
  set "a=%%i"
  setlocal enabledelayedexpansion
  set "a=!a:"=!"
  echo.!a!>>002.txt
  endlocal
  )
  これで空行以外は完璧かな?

  268: デフォルトの名無しさん:2017/11/07(火) 10:05:04.55 ID:1287flJj
  >>262の奴で.
  "echo "を"echo."にするとダメなのに"echo, "にするとOKなのは何故なんだぜ?
  今まで, ピリオドとカンマ, セミコロンに違いがあるとは思ってなかったから.
  ずっとピリオド使ってたのに.

  269: デフォルトの名無しさん:2017/11/07(火) 22:51:26.28 ID:4pg/kk0r
  >>267
  "eol=" を指定しないと行頭文字が ; だと読み飛ばす.
  "delims=" を指定しないと行頭の空白が無くなる.
  両方同時に指定する方法はあるのか?

  270: デフォルトの名無しさん:2017/11/08(水) 00:22:28.07 ID:X1Aytah6
  for /f delims^=^ eol^=

  271: 265:2017/11/08(水) 00:40:11.94 ID:pQrS+Zxc
  >>266
  バッチリでした!THANKS!

  272: デフォルトの名無しさん:2017/11/08(水) 19:40:30.74 ID:VTzaN0jn
  >>268
  「, 」「;」「=」は特別区切り文字だから.
  例えば, C:\直下に「a」ってフォルダ作って.
  「b.cmd」
  for /f %%a in ('echo, b') do echo, %%a
  「b b.cmd」
  echo;c %1
  pause
  のバッチ作成して, コマンドプロンプトで「C:\a」に移動してから.
  「b.cmd」を実行すると, ()の中の「, 」が消えた状態で表示される.
  「b b.cmd」を実行すると, 「b.cmd」が実行される.
  「"b b.cmd"」を実行すると, 「b b.cmd」が実行される.
  今度はファイル名を指定して実行で.
  cmd /c "C:\a\b b.cmd"
  cmd /c "C:\a\b b.cmd" dを実行すると, pauseで止まるけど.
  cmd /c "C:\a\b b.cmd" "d"を実行すると, 一瞬で終わる.
  cmd /c, "C:\a\b b.cmd" "d"なら動く.
  結構知られていないんだよね.

  273: デフォルトの名無しさん:2017/11/08(水) 22:40:59.50 ID:ZHWfUJ7q
  >>270 ありがとう. 完全に動作しました.
  そもそも eol の既定値が ; だとかヘルプに書いてないぞ.
  ちなみに "eol=" とすると eol が空になるのかと思ったら.
  今度は行頭に " があると読み飛ばすようです.
  何なんだ, これは. for 文のバグですかね.

  274: デフォルトの名無しさん:2017/11/09(木) 12:26:56.09 ID:NEfZ8eBs
  @echo off
  prompt $g
  set a=/?
  set b=exe
  set c= off
  echo on
  echo, %a%
  echo;%a%
  echo.%a%
  echo.%b%
  echo.%c%
  echo
  pause

  275: デフォルトの名無しさん:2017/11/10(金) 12:50:53.03 ID:5BeFn7Xg
  一時的なwindows資格情報の付与.
  付与->(再起動)->ポップアップを閉じるまで作業->(再起動)
  の流れをバッチ実行一発で済ませたいと思ってる.
  (*.bat)
  cmdkey  書き込み.
  copy  **.batを配置.
  schtasks  再起動後のタスク登録(**.bat実行)
  shutdown  再起動.
  [下矢印]  (ログイン)
  (**.bat)
  echoでmsgbox表示(閉じるまで待つ)
  cmdkey /delete  <-ここで資格情報が消えない.
  schtasks /Delete  タスク消去.
  del /f "%~dp0  自己消去.
  タスクは一応highest
  タスク実行だとcmdkey通らないとかある?
  bat素人で何が原因で消えないのかわからない・・・.
  ポップアップ表示中にcmd開いてcmdkey打つとちゃんと消える.

  276: 275:2017/11/10(金) 18:22:22.05 ID:5BeFn7Xg
  回りくどい方法ですが自己解決できました.
  .vbsにcmdkey /deleteを入れ.
  cmdの管理者権限起動用ショートカットを作成.
  schtasks からhighestをぬいて, 管理者権限でcmdを再起動.
  vbsを実行で資格情報を消すことができました.

  277: デフォルトの名無しさん:2017/11/11(土) 23:58:13.74 ID:Smy5DbHD
  copy /b 1.mp4+2.mp4 3.mp4
  上記で結合した3.mp4の動画に2.mp4の内容が追加されないのですがなぜかわかりますか?
  3.mp4のファイルサイズだけは1.mp4+2.mp4の容量になっています.
  すぐ出来ると思ったのにつまづいた泣.

  278: デフォルトの名無しさん:2017/11/12(日) 01:15:27.00 ID:1rXZudmc
  >>277
  ちゃんと結合されている.
  バイナリで結合してフォーマットが1.mp4の分しかないだけ.
  コマンドプロンプトでなく動画フォーマットの勉強しろ.

  279: デフォルトの名無しさん:2017/11/12(日) 01:38:03.29 ID:/fk063EO
  >>278
  ありがとうございます.
  出直します.

  280: デフォルトの名無しさん:2017/11/12(日) 14:54:34.48 ID:GpB3XqQ3
  動画形式の勉強など, 自分でやるものじゃない.
  動画編集アプリを使うべき.

  281: デフォルトの名無しさん:2017/11/12(日) 14:57:17.00 ID:43gC7oaU
  今の編集アプリだとmp4再エンコしなくてもそのまま繋げられるのかな?

  282: デフォルトの名無しさん:2017/11/12(日) 15:08:29.51 ID:MOg5phwx
  >>280
  バッチから結合を指示できる動画編集アプリよろしくね.

  283: デフォルトの名無しさん:2017/11/12(日) 15:14:20.67 ID:Xj6DjuPw
  ffmpegでええやん.

  284: デフォルトの名無しさん:2017/11/20(月) 14:42:11.56 ID:rhJshzCP
  64bitOS環境.
  バッチ1つでWOW64内のcmdで実行する方法ってありますか?

  285: デフォルトの名無しさん:2017/11/20(月) 15:06:54.45 ID:rhJshzCP
  すみません普通にSTARTで呼んでできました・・・.

  286: デフォルトの名無しさん:2017/11/22(水) 13:08:53.67 ID:i4qRIFe0
  呼び出し元バッチに戻る終了方法を追加してほしい.
  exit /B だとcmdを終わるだけ戻らない.
  call で呼び出さなくても戻る機能をつけてほしい.
  exit /r や return文で.

  287: デフォルトの名無しさん:2017/11/23(木) 17:36:40.78 ID:cAVsYuht
  startに待つオプションあるだろ.

  288: デフォルトの名無しさん:2017/12/06(水) 10:57:13.74 ID:RImq1PQL
  >>281
  昔から無劣化で繋げられるけど??

  289: ファイルアクセス監視:2017/12/23(土) 19:00:05.09 ID:Jw1Bivzx
  ダウンロードしたローカルアプリ(Jane  Styleなど)が.
  重要な場所のローカルファイルから情報を盗もうとしてないかどうか念のため監視したいのですが,
  https://technet.microsoft.com/ja-jp/sysinternals/handle.aspx
  このdosで使える  handle  は出力ファイル名の日本語が文字化けするんですが, 何かいい方法ないですか?
  文字化け以外に関しては非常に便利です.
  出力をdosで加工してエクスプローラーのログを除外して, ユーザー+プロセス+ファイル名が初登場の時だけ出力してます.
  これでもし見慣れないファイルアクセスがあったら目立ちます(GUI系はリアルタイムで消えるので)

  290: デフォルトの名無しさん:2017/12/23(土) 22:54:57.75 ID:FPRjmoIB
  ファイル名のようなシステム要件には, 半角英数字だけを使う.
  半角空白も使うな. Mac でバグる.
  すべてのアプリの開発者が, 多国語のファイル名では, テストしていないから,
  多くのアプリでバグる.
  特に, 書庫を使う, 圧縮解凍アプリでバグる.

  291: デフォルトの名無しさん:2017/12/24(日) 08:43:36.04 ID:WeE5WMFr
  echo.
  で空行を表示できると知りましたが.
  この「.」には何の意味があるのでしょうか?

  292: デフォルトの名無しさん:2017/12/24(日) 15:38:49.19 ID:9EARh1KB
  >>291
  意味を考えてはいけません. 調べてませんが, 英語のピリオドなので文字列なしで終わりという意味合いからそうしたのでしょう.

  293: デフォルトの名無しさん:2017/12/24(日) 15:51:26.20 ID:nsKMF0PM
  echoの直後の文字列は出力されないんだっけ?
  「.」の以外の文字列でも空行になるけど1番問題が起きにくいとかそんなのかな.

  294: デフォルトの名無しさん:2017/12/24(日) 18:22:33.52 ID:T/PAdelQ
  ちょっと前にその辺の話が出てた.
  >>264-274

  295: デフォルトの名無しさん:2017/12/26(火) 01:03:48.59 ID:9+DFjrUc
  特別区切り文字というものがあるなんてここで初めて知ったんだけど・・・(本当かどうかはまだ確かめていない).
  もはや紙媒体で信用できる会社からの体形的な出版物が無いのよね.
  ・・・ある??

  296: デフォルトの名無しさん:2017/12/26(火) 01:08:10.71 ID:NGPwifm5
  こんなのは仕様じゃなくて実装上の結果にすぎない.
  undocumennt specと言ってもいいが, 正式な本に仕様として載るようなもんじゃないと思う.

  297: デフォルトの名無しさん:2017/12/26(火) 01:23:11.58 ID:9+DFjrUc
  >>296
  そりゃ分かるんだけど・・・.
  UNIX の bash だっておかしいところが結構あってさ.
  でも「構文解析が未熟な時代, 全てを(記号ですら)コマンドだと置いた結果」という説明の仕方ができるそうな.
  C言語の仕様だっていい加減後付けが多い. でも説明を試みた結果がANSI. 無理が多いけど.
  Windows界隈ってそういうのが貧しいと思う.
  スレ違いだけど, PowerShell も Core とか言い出してからなんかおかしくないか?

  298: デフォルトの名無しさん:2017/12/27(水) 01:13:01.79 ID:1X8kZn43
  bashはかなーり最近のプロダクトだと思うのだが.

  299: デフォルトの名無しさん:2017/12/27(水) 19:45:46.24 ID:8XzWQMmb
  >>297
  特別区切り文字という言葉はアレだけど.
  cmd /? で表示されるヘルプの最終行に.
  =;, は特別な文字として列挙されてますよ.

  300: デフォルトの名無しさん:2017/12/28(木) 06:04:09.70 ID:HvFHYdEd
  >>297
  要はさんざん検証して挙動を確認しないと恐くて使えないってこったな. w.

  301: デフォルトの名無しさん:2017/12/28(木) 07:32:44.10 ID:psxJdr/O
  関係ない話ですまんが.
  いまだに cmd /? の表示が変だな, 一部重複してる.
  マイクロソフトは直す気が無いのか.
  たぶんNTの頃から変なんだが.

  302: デフォルトの名無しさん:2017/12/28(木) 08:43:15.72 ID:V28V958v
  バグレポートに誰も上げていないか,
  あるいは上げられていても優先順位がものすごく低いのでしょう.

  303: デフォルトの名無しさん:2017/12/28(木) 18:35:17.03 ID:QlD4+lUL
  >>302
  非成長分野, 非収益持ち出し分野とみなされて, 最低限の人数しかいないのでは.
  おまけに優秀なのは来ない.

  304: デフォルトの名無しさん:2017/12/28(木) 19:17:17.28 ID:uuf5XAZw
  優秀な奴はさらっと変更して賞賛されるけど,
  そうじゃない奴がさらっと変更すると,
  勝手なことすんなって怒られるんだよな.

  305: デフォルトの名無しさん:2017/12/28(木) 22:46:38.96 ID:8hIgR6GI
  bash が最近のプロダクトだとか・・・ヨボヨボの痴呆が入ったおじいちゃんか?
  UNIX で bash が出たのって 20世紀なんだが.
  >>299
  これのことか?明らかに違う.
  > 引用符が必要な特別な文字は次のとおりです:
  > <スペース>
  > &()[]{}^=;!'+, `~
  >>300
  自分が新規で書けるなら VBScript でいい.
  「これは例外, あれも例外, それも例外」なブツなんか触りたくない.
  そんな時間があるなら生産的な言語に費やしたい.
  触らざるを得ないからイラつく. 阿呆か.
  PowerShell は Windows の自動化から管理系を抜き出した方向に行こうとしているので何だかねぇ・・・.

  306: デフォルトの名無しさん:2017/12/29(金) 00:43:01.22 ID:oAr+Y8wr
  >>305
  GNU後の新造品じゃねーか. モダンもいいところだろ.
  歴史を知らないバカとは話が出来ないってのは本当だな.

  307: デフォルトの名無しさん:2017/12/29(金) 07:36:55.45 ID:kfbFSvw+
  今時VBScriptとか言ってる老害の相手するなよ...

  308: デフォルトの名無しさん:2017/12/29(金) 08:54:48.93 ID:oAr+Y8wr
  年寄りのくせにGNU前を知らないんだとしたら, 死んだ方がいいね.

  309: デフォルトの名無しさん:2017/12/29(金) 10:58:34.56 ID:dNvcaBYU
  VBScriptは依然として結構イケると思うけどな.

  310: デフォルトの名無しさん:2017/12/29(金) 14:50:59.06 ID:Xr0syokO
  真面目にそう思ってるならちょっとヤバイぞ.

  311: デフォルトの名無しさん:2017/12/29(金) 17:11:52.20 ID:oAr+Y8wr
  VBAと混同してる人がいるようだ.

  312: デフォルトの名無しさん:2017/12/29(金) 23:12:55.18 ID:1POkgVP3
  >>298
  はあ?

  313: デフォルトの名無しさん:2017/12/30(土) 17:45:48.22 ID:RVllgMXp
  バッチファイルなのになんでVBの話になるのん.

  314: デフォルトの名無しさん:2018/01/01(月) 14:25:38.32 ID:TmlLnuaw
  >>301-302
  コマンドのバグ                  =>  全世界のユーザーに影響出るから下手に直せない.
  コマンドのヘルプの文言誤り  =>  優先度低いのでなかなか直さない.
  ってことかなるほど.

  315: デフォルトの名無しさん:2018/01/03(水) 18:47:59.00 ID:G1jkbehM
  >>313
  cscriptで自身を実行する外見バッチ中身WSHみたいなんもあるにはあるし・・・.

  316: デフォルトの名無しさん:2018/01/03(水) 20:04:05.34 ID:NAv6VFfd
  >>313
  元を辿ってみると, >>297が話を逸らしたせいだ.
  そこからどんどん逸れてvbに行き着いた.
  >>315
  batに埋め込めるのはjscript(条件コンパイルの構文がbatとうまい具合にかみ合った)だけでvbscriptは無理.

  317: デフォルトの名無しさん:2018/01/03(水) 20:12:05.39 ID:lLEkaf6s
  >>316
  > vbscriptは無理.
  ちょっとはググれよ.
  https://blogs.yahoo.co.jp/tt77tt77tt77mm/12847863.html

  318: デフォルトの名無しさん:2018/01/03(水) 21:17:45.06 ID:NAv6VFfd
  >>317
  wsfの手があったか, あとjsでもスクリプトエンコードで書けばなんとかなるね.

  319: デフォルトの名無しさん:2018/01/13(土) 16:23:41.90 ID:t3TbTPGI
  powershellで似たような事はできませんか?
  1ファイルにしたくて.

  320: デフォルトの名無しさん:2018/01/13(土) 16:32:17.66 ID:9pJBMU57
  >>319
  [最強CUI]PowerShell -Part 2
  https://mevius.5ch.net/test/read.cgi/tech/1480109402/

  321: デフォルトの名無しさん:2018/01/18(木) 18:41:19.43 ID:lAsosfYH
  どうしても分からないので質問致します.
  @echo off
  @rem バッチファイルのディレクトリに移動.
  cd /d %~d0%~p0
  set USR_INPUT_STR1=https://www.openrec.tv/live/fKGMub0cd6j
  @rem 引数有無と引数名チェック.
  if "%USR_INPUT_STR1%"=="" goto ERROR
  echo;%USR_INPUT_STR1%|findstr /R /C:"^http" /C:"openrec">NUL||(echo "%1"
  を処理できません) && goto ERROR
  @rem URLのアドレスとHTMLを環境変数へ設定.
  set ADDR=%USR_INPUT_STR1%
  for %%I in (%USR_INPUT_STR1%) do set HTML=%%~nxI
  @rem HTMLダウンロード.
  curl -L --max-redirs 10 -R -O %ADDR%
  if not %ERRORLEVEL%==0 goto ERROR
  @rem Shift-JISに文字コード変換.
  nkf -s --overwrite %HTML%

  322: デフォルトの名無しさん:2018/01/18(木) 18:41:39.14 ID:lAsosfYH
  set TARGET=%TARGET:playlist=chunklist%
  @rem ffmpegで動画吸い出し.
  ffmpeg -c copy "%TITLE%.ts" -i "%TARGET%"
  @rem 最後にcurlで出力したソースファイルを削除.
  @rem for /R %%f in (*.) do del /Q "%%f"
  pause
  exit
  :ERROR
  echo 引数が無効のため処理できませんでした.
  pause
  exit
  このようなbatファイルを作ったのですが, どうしても最後に.
  sourcefile=https://station303.openrec.tv/live1/667d4bef5cb4af8db6b9198cab7b3148e957e477/chunklist.m3u8:
  Invalid argument
  と無効な引数と言われてしまい動画の吸い出しが出来ません.
  完全に手詰まりなため, 丸投げにはなってしまいますがご教授いただければと思います.
  よろしくお願いします.

  323: デフォルトの名無しさん:2018/01/18(木) 19:11:35.69 ID:r+5+UL4/
  >>322
  とりあえず最初の行を.
  rem @echo off
  にしてどこでエラーになってのか確認しろよ.

  324: デフォルトの名無しさん:2018/01/18(木) 19:15:53.38 ID:pm/tv2ru
  >>322
  これ途中の処理抜けてない?
  TARGETにURLが入らないんだけど.

  325: デフォルトの名無しさん:2018/01/18(木) 19:34:30.33 ID:pm/tv2ru
  170のやつを適当に書き直したら動いたよ.
  for /F tokens^=2^ delims^=^" %%I in ('type %HTML%^|find /I
  "data-sourcefile"')do set "TARGET=%%~I"

  326: デフォルトの名無しさん:2018/01/18(木) 19:58:03.19 ID:lAsosfYH
  >>322の最初が抜けてました・・・.
  @rem HTMLから文字列抽出.
  for /F "tokens=2 delims=<>| " %%I in ('type %HTML%^|findstr/R /C:"<title>"')
  do set TITLE=%%~I
  for /F "tokens=* delims=data-file= " %%I in ('type %HTML%^|find/I
  "playlist.m3u8"') do set TARGET=%%~I

  327: デフォルトの名無しさん:2018/01/18(木) 20:06:19.33 ID:lAsosfYH
  >>325
  ありがとうございます・・・.
  エラーを見たのですが, なぜかsourcefile=が付いてしまっていました.
  何度もありがとうございます.

  328: デフォルトの名無しさん:2018/01/29(月) 01:16:37.30 ID:s5lQXlw3
  echo abc 1>x1 1>x11 2>x2 3>x3
  とするとDOS窓が応答しなくなった.
  x11 x2 x3 ファイルができるが x1ファイルはできない.

  329: デフォルトの名無しさん:2018/01/29(月) 14:21:26.57 ID:e8Iu9+Yp
  compフォルダ配下にはa, b, c, ・・・ってフォルダがあって,
  そのフォルダの中にはzipとrarの圧縮ファイルがある.
  compopenってフォルダを作って, compの中のフォルダ階層は変えないで, compopenフォルダ内のaやb,
  cのフォルダにそれぞれすべて展開させたいときってどうするの?
  zipやrar毎にフォルダ作って展開させたい.
  D:/
  +comp/
  |  + a/
  |      + 111.zip
  |      + 222.zip
  |  + b/
  |      + xx1.rar
  |      + xx2.rar
  |  + c/
  |      + ttt.zip
  |      + rrr.rar
  D:/
  +compopen/
  |  + a/
  |      + 111/
  |      + 222/
  |  + b/
  |      + xx1/
  |      + xx2/
  |  + c/
  |      + ttt/
  |      + rrr/

  330: デフォルトの名無しさん:2018/01/29(月) 15:15:09.99 ID:LZ9wDs2K
  >>329
  >>12-19の方法で相対パスを取得すれば出来ると思うよ.

  331: デフォルトの名無しさん:2018/01/29(月) 16:22:04.20 ID:LZ9wDs2K
  自分用に書いたbatを流用してみた.
  多分こんな感じで動くはず.
  https://pastebin.com/zEpvpdCa

  332: デフォルトの名無しさん:2018/01/30(火) 00:28:24.66 ID:fZrZLUfh
  >>329
  set "a=D:\comp" & set "b=D:\compopen"
  setlocal enabledelayedexpansion
  for /L %%i in (4, 1, 1000) do if "!a:~%%i, 1!"==""set "c=%%i" & goto x
  :x
  endlocal & set "c=%c%"
  for /r "%a%" %%i in (*.zip *.rar) do set "d=%%~dpni"& set "e=%%~i" & call :y
  goto :eof
  :y
  setlocal enabledelayedexpansion
  7z x -o"!b!!d:~%c%!" "!e!"

  333: 330:2018/01/30(火) 04:04:55.14 ID:I+jPXl6+
  >>332
  なるほど.
  自分のは冗長に書きすぎてたね.

  334: デフォルトの名無しさん:2018/01/30(火) 16:28:50.07 ID:/nodnUUg
  >>329
  使い回しあんまり考えなければ.
  -------- ここから.
  set path=C:\Program Files\7-Zip;%path%
  cd /d D:\comp
  for /f "usebackq delims=" %%i in (`dir /ad /s /b`) do (
  echo, "%%~i"
  set "tmppath0=%%~i"
  call set "tmppath1=D:\compopen%%tmppath0:~7%%"
  pushd "%%~i"
  call 7z.exe x *.* -spe -bso0 -o"%%tmppath1%%\*" 2>>D:\compopen\errlog.txt
  popd
  )
  -------- ここまで.
  マズいフォルダ(パス)名が無いことを前提に, もろもろ 7-Zip に良きにはからってもらう.

  335: デフォルトの名無しさん:2018/01/30(火) 17:10:39.08 ID:25OUwAYA
  >>332
  >>334
  ありがとうございます!
  150GBくらいあるから, まだ展開し終えてないけど,
  動き出しました.
  実際のcompの中のa, b, c, ・・・フォルダの中のzipやrarの名前は,
  今のところ, 下記みたいにフォルダの文字列含んでて, 階層を上にしてもよかったかなと思いつつ,
  例外も出てくるかもしれないので, このまま走らせてみます.
  しっかり解凍しだしてフォルダ生成してくれてます.
  D:/
  +comp/
  |  + a/
  |      + a111.zip
  |      + a222.zip
  |  + b/
  |      + xx1b.rar
  |      + xx2b.rar
  |  + c/
  |      + cttt.zip
  |      + crrr.rar

  336: デフォルトの名無しさん:2018/01/31(水) 00:35:03.40 ID:ah9e2u9N
  そもそも, そんな複雑な手続きには, PowerShell, Ruby などを使え. w.

  337: デフォルトの名無しさん:2018/02/03(土) 09:54:54.05 ID:y+J4EMEq
  コマンドプロンプトの仕様についてだけど, 遅延展開ってデフォでONじゃダメだったのかな?
  あれ打ち込むのマンドクサ.

  338: デフォルトの名無しさん:2018/02/05(月) 04:53:11.12 ID:j3KUW6ez
  1. test.exeという実行ファイルがある.
  2. test.exeのフルパスは必要に応じて「test.exeをShift+右クリック」->「パスをコピー」して変数testExeに格納してもらう.
      このフルパスには"D:\a bc\test.exe"のように空白が含まれることがあるとする.
  3. FOR文でこのtest.exeを--helpオプションつきで実行し, 結果からfindstr&setしたい.
  ---作成バッチ---
  @echo off
  cd /d %~dp0
  set testExe="D:\a bc\test.exe"
  FOR /F "tokens=3" %%a IN ('%testExe% --help ^| findstr "TargetStr"')DO (
  set kekka=%%a
  )
  @echo %kekka%
  pause
  ---実行結果---
  'D:\a' は, 内部コマンドまたは外部コマン ド, 操作可能なプログラムまたはバッチ ファイルとして認識されていません.
  ---解1---
  testExeを設定する際, 全体をダブルクォートで囲むのではなく,
  空白を含むフォルダだけをダブルクォートで囲むようにする.
  set testExe=D:\"a bc"\test.exe
  解1はtestExeの設定が地味に面倒になってしまうので回避したいのですが, 何か良い方法はないでしょうか?

  339: デフォルトの名無しさん:2018/02/05(月) 05:04:15.80 ID:j3KUW6ez
  >>338 追記.
  パスに空白を含む場合も問題ですが,
    set testExe="D:\abc\test.exe"
  のように空白を含まない場合には.
    ファイル名, ディレクトリ名, またはボリューム ラベルの構文が間違っています.
  と言われてエラーになるので, それも含めてなんとかしたいという点を書き忘れていました.
  「FOR文でフルパスでコマンドを実行したい場合, どうすればよいのでしょう」というのが根本的な質問です.

  340: デフォルトの名無しさん:2018/02/05(月) 05:55:25.28 ID:j3KUW6ez
  すみません. >>338-339ですが, 直接フルパスで実行するのではなくフォルダに移動して実行することで一応解決しました.
  ---
  @echo off
  cd /d %~dp0
  set testExe="D:\a bc\test.exe"
  FOR /F "tokens=1 delims=" %%I IN (%testExe%) DO (
  IF "%%~nxI"=="test.exe" (
  pushd "%%~dpI"
  FOR /F "tokens=3" %%M IN ('.\%%~nxI --help ^| findstr "TargetStr"')DO (
  set kekka=%%M
  )
  popd
  )
  )
  @echo %kekka%
  pause
  ---
  問題点や, もっとスマートな方法があれば, 教えていただけると助かります.

  341: デフォルトの名無しさん:2018/02/05(月) 08:19:13.38 ID:ETXmgzVd
  >>338
  @echo off
  cd /d %~dp0
  set testExe="D:\a bc\test.exe"
  for /f "tokens=3" %%a in ('start /wait /b "" %testExe%--help ^| findstr
  "TargetStr"') DO (
  set kekka=%%a
  )
  @echo %kekka%
  pause

  342: デフォルトの名無しさん:2018/02/05(月) 08:24:05.58 ID:chwOG0ZE
  >>338
  自分もこの問題に直面して同じ解決策とったんだけどこれって何が原因でこうなるの?

  343: デフォルトの名無しさん:2018/02/05(月) 10:47:37.64 ID:ETXmgzVd
  こっちのがいいかも.
  前に似たようなネタがあったような.
  set testExe="D:\a bc\test.exe"
  for /f "tokens=3" %%a in ('cmd /s /c "%testExe% --help |findstr "TargetStr""')
  do (

  344: デフォルトの名無しさん:2018/02/05(月) 11:16:40.07 ID:j3KUW6ez
  >>341
  できました!なるほど, startを使えばよかったのですね・・・. ありがとうございます.
  >>342
  なんなんでしょうね. 仕組みがよくわからないです・・・. どなたか解説を・・・.

  345: デフォルトの名無しさん:2018/02/05(月) 11:23:08.71 ID:ETXmgzVd
  やっぱり >>343 の cmd はダメだな.
  testExe や TargetStr の中のスペースがデリミタ扱いされる.
  スペースが2個以上続くと誤動作する.
  >>341 の start がいい.

  346: デフォルトの名無しさん:2018/02/05(月) 11:37:48.40 ID:j3KUW6ez
  >>343 >>345
  重ねてありがとうございます.
  cmdの場合は以下でうまくいくようです.
  set testExe="D:\a bc\test.exe"
  FOR /F "tokens=3" %%a IN ('cmd /c %testExe% --help ^| findstr"TargetStr"') DO
(

  347: デフォルトの名無しさん:2018/02/05(月) 13:08:35.91 ID:Emu9UBTE
  括弧の中の最初と最後の引用符が削除される?

  348: デフォルトの名無しさん:2018/02/05(月) 14:11:13.29 ID:ETXmgzVd
  やっと思い出したぞ裏技. w.
  前後の端にダミーの二重引用符 ^" を付けるんだった.
  >>347 のおかげで思い出したぜ.
  set testExe="D:\a bc\test.exe"
  for /f "tokens=3" %%a in ('^"%testexe% --help ^| findstr"targetstr"^"') do (

  349: デフォルトの名無しさん:2018/02/06(火) 13:18:25.70 ID:m2OYikdE
  >>347-348
  できました. なるほど, そういう解釈がされるんですね・・・.
  バッチってほんと思わぬところでひっかかりますよね. とても勉強になりました. ありがとうございます.

  350: デフォルトの名無しさん:2018/02/07(水) 10:59:47.18 ID:fDqCQtuz
  VBでプログラムを作っているのですが, 行き詰ってしまったので質問させていただきます.
  バッチでiniファイルを読み込み, iniから取得したデータを格納した変数をVBのソース内で使いたいのですが可能ですか?
  exe形式での納品となるのでiniファイルの読み込みはどうしてもバッチ内で行いたいのです.
  ちなみに処理の流れとしては, iniファイル読み込み->exeファイル実行となっています.
  どなたかご教授ください. よろしくお願いいたします.

  351: デフォルトの名無しさん:2018/02/07(水) 11:12:08.68 ID:fDqCQtuz
  申し訳ございません.
  バッチでiniファイルを読み込み, iniから取得したデータを.
  格納した変数をVBのソース内で使いたいのですが可能ですか? x.
  VBのソース内の変数に格納したいのですが可能ですか? o.
  でした.

  352: デフォルトの名無しさん:2018/02/07(水) 11:43:25.21 ID:LQaGrglb
  バッチで, ini ファイルを読み込み, 必要な値を取り出して,
  それらを引数にして, exe を起動する.
  そして, exe 内では, 引数から読み込んだ値を使う.

  353: デフォルトの名無しさん:2018/02/07(水) 12:00:38.62 ID:fDqCQtuz
  >>352
  どう調べたらいいか分からず困っていたのですが, 引数の取得で検索すればなんとかなりそうですね.
  後は自分で調べてやってみます. ありがとうございました.

  354: デフォルトの名無しさん:2018/02/07(水) 16:46:31.34 ID:EyPJd6fI
  バッチだと for文を使います.
  複雑なことをするのであればVBで直接読み込む方法もあります.

  355: デフォルトの名無しさん:2018/02/10(土) 12:18:28.89 ID:/lSv2IRR
  バッチでiniファイルなんて読み込めるの?
  VBとかからGetPrivateProfileStringとかのAPIを使うんじゃないの?
  まあ力技で出来ないことはないんだろうけど自分が知らないだけで一般的なやり方というのがあるのかな?

  356: デフォルトの名無しさん:2018/02/10(土) 15:32:33.27 ID:K6TfvilX
  ググればふつうに出てくるようだが. (内容まではちゃんと見てない)

  357: デフォルトの名無しさん:2018/02/10(土) 16:29:19.90 ID:Sj+J5yD3
  >>355
  >>354の言うようにfor文を使う.
  わかりやすいとは言えないし特殊文字が含まれると色々面倒なのでおすすめはしない.

  358: デフォルトの名無しさん:2018/02/11(日) 19:16:43.96 ID:l1W9SMIH
  バッチファイルでファイル操作って一見ちゃんと動いてるように見えて穴だらけって場合が多いからやりたくないな.
  wshで実装したりps辺りで既存のAPI呼び出す方がいい.

  359: デフォルトの名無しさん:2018/02/11(日) 19:44:19.46 ID:+WWL4Di4
  batで設定呼び出したい時はiniじゃなくてsetting.batに変数を直接記述してcallしてるわ.
  このやり方も良いやり方なのかどうか分からんけど.

  360: デフォルトの名無しさん:2018/02/12(月) 12:02:40.25 ID:OYWjTvif
  http://ascii.jp/elem/000/001/630/1630041/
  Windows 10 RS4に追加された「curl」と「tar」コマンド.
  って curl と tar が追加されるんだ.
  PowerShell にも curl コマンド(エイリアス)があってややこしさが増すな.
  でも, 標準で使えるようになるのはバッチファイル使ってる身とすれば.
  嬉しくはある.

  361: デフォルトの名無しさん:2018/02/12(月) 15:53:42.90 ID:BbO5lIMB
  もうRS4か.
  RS3の不具合なんとかしてくれよ.

  362: デフォルトの名無しさん:2018/02/18(日) 16:07:03.48 ID:OqSvNe2j
  ファイル圧縮バッチを.
  hta の画面にドロップするだけで実行するやつ作った.
  https://medaka.5ch.net/test/read.cgi/csaloon/1518353191/843-846
  ファイルをバッチファイルにドロップして引数受け取りは普通にあるけど.
  ファイル名の一部を文字列としてドロップしても起動されないのでこういう方法を取った.

  363: デフォルトの名無しさん:2018/02/18(日) 16:25:37.39 ID:ZqWPhgUg
  >>360
  Windows10 なら, WSL で, MS Store から, Ubuntu 16.04 LTS をダウンロードすれば,
  curl, tar も入っている.
  他のLinux のコマンドも, 一杯ある.

  364: デフォルトの名無しさん:2018/02/18(日) 19:16:35.61 ID:yvQzNzLN
  >>363
  それはバッチから使えるの?

  365: デフォルトの名無しさん:2018/02/18(日) 19:20:27.56 ID:F2O3xW/S
  普通に使える.
  ubuntu run curl --help

  366: デフォルトの名無しさん:2018/02/19(月) 04:53:30.17 ID:xIEc0S27
  Linux(Ubuntu)側のbash, Windows側のPowerShell・コマンドプロンプトから,
  相互のアプリ・コマンドを実行できる.
  相互のパイプも, つなげられる.
  つまり, Linux側のbashは, Windows10 の1つのアプリになっている.

  367: デフォルトの名無しさん:2018/02/19(月) 08:14:36.88 ID:2cNNs3G6
  > Ubuntu 16.04 LTS をダウンロードすれば,
  この手の前提条件が無いことがバッチのメリットなのに...

  368: デフォルトの名無しさん:2018/02/19(月) 22:58:00.92 ID:oh22XJYs
  >>363
  Web開発テスト用の範囲を超えてない.
  当のMSが「運用には使ってくれるな」つってるのによ.
  お前馬鹿か?馬鹿だろ.

  369: デフォルトの名無しさん:2018/02/19(月) 23:41:31.81 ID:9tX9GnHd
  なんでこの人「運用」とか言い出してんの?

  370: デフォルトの名無しさん:2018/02/19(月) 23:44:41.90 ID:uhfYTKrf
  >>368
  WSLはウェブサービス開発で使って,
  実際にそのウェブサービスを動かす(=運用)するのは.
  ネイティブなLinuxの上だぞ. 例えばAzure上のLinuxとか.
  運用に使ってくれるなっていうのは, WSL上でウェブサービスを動かして.
  実際に不特定の人にサービスを提供するなっていう意味だ.

  371: デフォルトの名無しさん:2018/02/20(火) 00:06:58.45 ID:amqSspGZ
  WSL 上で, Webサーバーとかを常時接続させて運用できない.
  まあ最初から, 自分のデスクトップPC を外部につなげて,
  そんなサービスをする奴は, 居ないだろ.

  372: デフォルトの名無しさん:2018/02/20(火) 00:08:38.09 ID:ZtM0s1po
  バッチで使うのは運用ではないと?

  373: デフォルトの名無しさん:2018/02/20(火) 00:13:22.58 ID:XC4KsyV/
  >>370
  端末のスタートアップスクリプトに使うのも用途外.
  だから「使える」とか言うのは明らかに言い過ぎ.
  お前馬鹿か?馬鹿だろ.

  374: デフォルトの名無しさん:2018/02/20(火) 00:40:00.47 ID:wdwe47Ke
  >>373
  > 端末のスタートアップスクリプトに使うのも用途外.
  端末のスタートアップスクリプトの話なんかしてないんだが,
  何を言い出してるんだ? そもそも端末のスタートアップスクリプトの.
  意味わからねぇ. w.
  >>372
  運用っていうから悪いんだよ.
  「一般ユーザーに対してのウェブサービスの提供」
  MSが使うなって言ってるのはこれだけだよ.

  375: デフォルトの名無しさん:2018/02/20(火) 00:43:54.06 ID:wdwe47Ke
  うん, ちゃんとFAQに書いてあったね.
  https://docs.microsoft.com/en-us/windows/wsl/faq
  > Also, even though you will be able to run many popular server
  applications(e.g. Redis),
  > we do not recommend WSL for server scenarios ? Microsoft offers a
  > variety of solutions for running production Ubuntu workloads in
  Azure,Hyper-V, and Docker.
  サーバーアプリケーションを実行できるが, サーバーとしてのシナリオは推奨してないと.

  376: デフォルトの名無しさん:2018/02/20(火) 00:46:37.66 ID:wdwe47Ke
  もう一つ, 誰のためのものですか?という質問には.
  > Who is this for?
  > This is primarily a tool for developers --
  > especially web developers and those who work on or with open sourceprojects.
  第一に開発者, 特にウェブ開発者やオープンソースプロジェクトを行ってる人.
  > This allows those who want/need to use Bash, common Linux tools (sed,awk,
  etc.) and
  > many Linux-first tools (Ruby, Python, etc.) to use their toolchainon
Windows.
  bashや多くのLinuxツールや言語を使いたい人のためのものと.

  377: デフォルトの名無しさん:2018/02/20(火) 00:57:48.56 ID:amqSspGZ
  Windows のコマンドプロンプトから,
  wsl bash -c "echo 'hello'"
  出力結果 : hello
  これぐらいのLinux の起動・実行・終了は, 1秒!
  定時処理ぐらい楽勝.
  サーバーみたいに常時実行しなければ大丈夫.

  378: デフォルトの名無しさん:2018/02/20(火) 01:27:38.14 ID:wdwe47Ke
  >>377
  wsl.exeを使うなら bash -c はいらないぞ.
  wsl echo hello でよい.
  wsl echo --help と wsl /bin/echo --help の実行結果が違うから.
  wslの中ではbash上で動いているっぽい.
  wsl ps axfu やってもbashいないんだけどな.
  まあ詳しい人に聞けば, そこら辺の動きは知ってるだろう.
  あと, 別にLinuxは起動してるわけじゃないのでLinuxの起動と書かれると違和感がある.
  WSLはLinuxカーネルを模したサブシステム.

  379: 377:2018/02/20(火) 01:41:53.13 ID:amqSspGZ
  Windows のコマンドプロンプトで,
  >where wsl
  C:\Windows\System32\wsl.exe
  >where ubuntu
  C:\Users\ユーザー名\AppData\Local\Microsoft\WindowsApps\ubuntu.exe
  wsl, ubuntu(Linux), bash の関係がよくわからない.
  漏れのノートPC は, i3, メモリ8GB, SSD だけど,
  Windows10 の単なるアプリだから, 起動・実行・終了で, 1秒ほど.
  WSLは, もう正規版だし, 単なるアプリとして使う分には, 問題ないだろ.

  380: 377:2018/02/20(火) 01:44:26.24 ID:amqSspGZ
  書き忘れた.
  Windows のコマンドプロンプトで,
  >where bash
  C:\Windows\System32\bash.exe

  381: 377:2018/02/20(火) 01:53:46.64 ID:amqSspGZ
  Windows のコマンドプロンプトで,
  >wsl echo hello
  >ubuntu -c "echo hello"
  >bash -c "echo hello"
  これらは皆, hello が出力されるけど, 書き方が異なる.
  wsl では, echo がサブコマンドになっているのかも.

  382: デフォルトの名無しさん:2018/02/20(火) 01:58:14.32 ID:wdwe47Ke
  >>379
  俺もちゃんと調べたわけじゃないけど,
  開発の歴史からすると,
  最初はbash on ubuntu on windowsという扱いで.
  bash.exeでUbuntu上のbashが起動できる(おまけでLinuxコマンドも使えるよ!)という扱いだった.
  このbashが起動できるという仕組みを提供しているものの名前がWindows Subsystem for Linuxだったわけだが.
  開発が継続しLinuxカーネルとの互換性があがってもうbashだけが起動するもんじゃないよねってことで.
  Windows Subsystem for Linuxの略であるwslと呼ばれるようになり.
  wsl.exeができた(おそらくbash -c "コマンド" と面倒な書き方をしなくて良いラッパー)
  それと前後して, ubuntuだけじゃなくopenSUSEやFedoraも動くよ!(いやFedoraまだリリースされてないんだが)
  ということになり, bash.exeやwsl.exeで起動するのはどっちのディストリよ?
  ってことでそれを切り替えることができるwslconfig.exeができた.
  また直接wslconfig.exeの設定によらず, ubuntuやopensuseを直接起動するための.
  ubuntu.exe やopensuse-42.exe が出来た.
  こんな所だと思う.

  383: デフォルトの名無しさん:2018/02/20(火) 02:00:13.61 ID:ZtM0s1po
  なんでバッチスレでパソコン博士がWSLでイキってるの?

  384: デフォルトの名無しさん:2018/02/20(火) 02:01:02.04 ID:wdwe47Ke
  >>381
  ubuntu /?をするとわかるが,
  ubuntu run echo helloが正しい.
  ubuntu.exeもwsl.exeもbash.exeもパラメータの扱いが違うだけで.
  ディストリ上のbashを実行していることは確かなようだ.

  385: デフォルトの名無しさん:2018/02/20(火) 02:01:43.71 ID:wdwe47Ke
  >>383
  Windows 10において, バッチファイルでWSLと連携するのは.
  当たり前の話になってきているから.

  386: デフォルトの名無しさん:2018/02/20(火) 02:04:18.90 ID:wdwe47Ke
  ubuntuは.
  Usage:
  <no args>
  - Launches the distro's default behavior. By default, this launches
  yourdefault shell.
  と書いてあるから, bashじゃなくてデフォルトシェルが呼び出されるのかも.
  うーん, どれを使うのが良い(汎用的)なのだろう?

  387: 377:2018/02/20(火) 02:51:43.01 ID:amqSspGZ
  wsl(Linux のbash)・PowerShell・コマンドプロンプトの3つが,
  パイプでもつなげられるし, シームレスになってきて, CUI が統合されてきているから,
  個別の話よりも, 3つのCUI をパイプでどうつなげるかの方に,
  話の焦点が移ってきている.

  388: 377:2018/02/20(火) 03:10:41.01 ID:amqSspGZ
  bash は, C:\Windows\System32\bash.exe を起動する.
  ubuntu は, bash, zsh など, 自分がデフォルトに設定した, シェルを起動する.
  環境変数, $SHELL
  >wsl echo $SHELL
  /bin/bash
  wsl コマンドが, ubuntu, open suse など,
  自分がデフォルトに設定した, Linux を起動.
  >wslconfig /list
  Windows Subsystem for Linux ディストリビューション:
  Ubuntu (既定)
  推測で書いたけど, 普段は, wsl を使うと良いかも.

  389: デフォルトの名無しさん:2018/02/20(火) 06:46:25.63 ID:+0IlbXev
  >>383
  オモチャ買ってもらった子供が「見て見てこれすごいんだよー」って言ってるような感じ.
  暖かく見守ってやれ.

  390: デフォルトの名無しさん:2018/02/20(火) 12:42:35.46 ID:ZtM0s1po
  >>389
  WSL出た頃なら仕方が無いが...
  やっぱパソコン博士レベルだと今頃になってやっとおもちゃを見つける感じなのか.

  391: デフォルトの名無しさん:2018/02/20(火) 19:54:28.42 ID:+0IlbXev
  へへーん, ぼくなんてまえからもってるもんねー.
  それはすごいねー. w.

  392: デフォルトの名無しさん:2018/02/20(火) 21:48:42.53 ID:BI5N21qv
  さすがにスレチだからもうやめとけと思うけど, WSLについて少し調べてみようと思うきっかけにはなったわ.

  393: デフォルトの名無しさん:2018/02/20(火) 22:56:06.68 ID:wdwe47Ke
  パソコン先生に恨みでもあるのかな?
  そんな話をしてもバッチファイルを書く上で.
  何の意味もないと思うんだが, 話をしたいのだろうね.

  394: デフォルトの名無しさん:2018/02/20(火) 23:00:35.05 ID:wdwe47Ke
  >>390
  Bash on Ubuntu on Windowsは, 早く使いたかったんで.
  Inside Previewに変えてまで使ったよ.
  GUIアプリには対応していないって書いてあったが仕組み上.
  GUIアプリ動くんじゃね?ってそこの頃はまだ情報が少なかったけど.
  実際に自分で試してxeyes は動いたーって2ちゃんねるに書いた記憶がある.

  395: デフォルトの名無しさん:2018/02/20(火) 23:11:12.21 ID:BI5N21qv
  自分語りとか余計なことをダラダラ書き連ねるから嫌われるんだよ.

  396: デフォルトの名無しさん:2018/02/20(火) 23:20:45.61 ID:wdwe47Ke
  嫌うのは相手の問題だからどうしようもない.
  俺に対する勘違いは, 俺の問題だから解決する必要がある.

  397: デフォルトの名無しさん:2018/02/21(水) 02:19:50.48 ID:PXpce9sQ
  パソコン先生, 怒りの連投きたー.

  398: デフォルトの名無しさん:2018/02/21(水) 02:50:21.44 ID:1KGQWp4x
  連続してね〜じゃん. w.

  399: デフォルトの名無しさん:2018/02/25(日) 16:07:21.04 ID:97AlcoLv
  例えば「aaa」という名前のODBCの設定は以下のコマンド.
    reg query HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\aaa
  を実行すると.
    HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\aaa
    Driver REG_SZ C:\WINDOWS\system32\SQLSRV32.dll
    Server REG_SZ aaa
    Database REG_SZ aaaDB
    LastUser REG_SZ *****
    Trusted_Connection REG_SZ Yes
  のように表示できますが.
  この設定の接続先データベース(上記ではaaaDB)をコマンドで変更することは出来るのでしょうか?

  400: デフォルトの名無しさん:2018/02/25(日) 17:44:24.52 ID:f0GbsyKa
  reg add HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\aaa /v Server /t REG_SZ/d
  bbbDB
  とかでだめなん.

  401: 399:2018/02/25(日) 19:41:52.11 ID:97AlcoLv
  >>400
  「/v Server」は「/v Database」の間違いですよね?
  これでバッチリいけました. ありがとうございます!

  402: デフォルトの名無しさん:2018/02/28(水) 10:04:11.85 ID:xTKxXp1v
  windows10 のコマンドプロンプトの, 文字色を変えるエスケープシーケンスで,
      prompt ^[[1;36m[$d$s$t$h$h$h] ^[[1;33m%USERNAME%^[[37m$p$_$g$s
      prompt $e[1;36m[$d$s$t$h$h$h] $e[1;33m%COMPUTERNAME%$e[37m$p$_$g$s
      echo ^[[1;36mバッチファイル^[[37m
  は動作しますが.
      echo $e[1;36mスクリプト$e[37m
  だと駄目でず.
  ( ^[ は, CTRL+[ で入力する制御文字(\x1B))
  echo で有効な「$e」の様な入力方法は有りますか?

  403: 402:2018/02/28(水) 10:18:01.40 ID:xTKxXp1v
  >>402
  自己解決しました.

  404: デフォルトの名無しさん:2018/03/16(金) 22:05:15.90 ID:HEHaQcsS
  バッチファイルで.
  空行を除く最終行にhogeって文字がなかったら追加して改行.
  -- hogeとかになってたら削除してhoge追記して改行.
  って事をやりたいんですけどどうやったらできるかおせーてください.

  405: デフォルトの名無しさん:2018/03/17(土) 05:37:29.93 ID:nxO/ldT7
  Ruby で作った.
  require 'stringio'
  ary = []
  File.open(ARGV[0]) do |io|
  text = io.read
  text.rstrip! # 末尾の連続した空白を, すべて削除する.
  sio = StringIO.new text
  ary = sio.readlines # 全行を配列に読み込む.
  if ary[-1] == '-- hoge'
  ary[-1] = "hoge\n"
  elsif /hoge/ !~ ary[-1] # hoge を含まない.
  ary[-1] += "hoge\n"
  else
  return
  end
  end
  # 一旦ファイルを削除してから, 書き込む.
  File.open(ARGV[0], 'w') { |io| io.write ary.join }

  406: デフォルトの名無しさん:2018/03/17(土) 12:51:31.78 ID:HNxDhnRb
  >>405
  あのーバッチって聞いてるのにrubyのスクリプト出されても困るんですけど.

  407: デフォルトの名無しさん:2018/03/17(土) 13:17:48.14 ID:FI/uI0vX
  やらなくても言い余計なことをして場を混乱させる人って必ずいるよね.

  408: デフォルトの名無しさん:2018/03/17(土) 13:29:47.44 ID:Y0/A+N6A
  ルビ厨の相手するなよ...

  409: デフォルトの名無しさん:2018/03/17(土) 13:33:32.46 ID:T/uji2Bj
  ロジック真似すればいいだけじゃん.
  作ってくれじゃなくて教えてくれなんだから.
  Lispで回答されて読めないのは理解できるが.
  上のRubyくらいなら何の問題もないだろ.

  410: デフォルトの名無しさん:2018/03/17(土) 15:03:38.07 ID:RY7g5/8I
  聞かれてるのはバッチでの実現手段なのにロジックとか言い出してどうすんだよ.

  411: デフォルトの名無しさん:2018/03/17(土) 15:06:43.59 ID:9hc/1qQU
  文字列の比較も削除も面倒だから.
  バッチではやらないほうがいい.

  412: デフォルトの名無しさん:2018/03/17(土) 17:30:52.69 ID:4x6FsbbS
  vbscript版作ったけどバッチ限定なら貼らなくいい?

  413: デフォルトの名無しさん:2018/03/17(土) 18:08:03.98 ID:RY7g5/8I
  >>404
  一応無理矢理ここまで作ってみたけど, ファイルの中身や指定文字列に特殊文字が入ってると.
  容赦なくコケるという地獄仕様のままなんで, 限定的にしか使えないと思う.
    有意な最終行の内容にあわせて結果ファイルを出力するバッチ.
    https://pastebin.com/mh9BZDCv
  コケないようにやるにはどうすればいいのかな・・・. 誰かうまいやり方があれば教えてくれ.

  414: デフォルトの名無しさん:2018/03/17(土) 18:14:53.08 ID:4x6FsbbS
  読んでてなんか泣けてきた.

  415: デフォルトの名無しさん:2018/03/17(土) 18:22:19.25 ID:RY7g5/8I
  >>414
  俺の選んだ手法がアホなだけかもしれんけど, バッチって基本的に制約多くて泣けてくるもんだから・・・.
  せっかくだしvscript版もどこかに貼ってもらえるとありがたいな.

  416: デフォルトの名無しさん:2018/03/17(土) 18:29:59.15 ID:71uTBaAx
  >>412
  >>1にそれらしいことは書いてあるから, ダメってことはないだろう.
  ただ, 「Jscript・Perl等の埋め込み」って何だろう.
  バッチファイルに他言語のコードを埋め込めるのか?

  417: デフォルトの名無しさん:2018/03/17(土) 18:38:49.28 ID:RY7g5/8I
  「バッチ JScript」とかでググればいいんじゃないか.

  418: デフォルトの名無しさん:2018/03/17(土) 19:54:28.64 ID:HNxDhnRb
  >>413
  ありがとうございますとても参考になりました.

  419: デフォルトの名無しさん:2018/03/17(土) 21:16:57.69 ID:Eknm4yJC
  @echo off
  set n0=0
  set n1=0
  set n2=0
  set file="xxx.txt"
  set newfile="new.txt"
  set word=xxx
  type nul>new.txt
  for /f "tokens=1* delims=:" %%i in ('findstr /n "."%file%') do set n0=%%i
  for /f "tokens=1* delims=:" %%i in ('findstr /n /c:"%word%"%file%') do set
  n1=%%i
  for /f "tokens=1* delims=:" %%i in ('findstr /n /c:"-- %word%"%file%') do set
  n2=%%i
  if %n0% equ %n1% if %n1% neq %n2% goto :eof
  if %n0% equ %n2% (call :del-line %n2%) else (copy /y %file% %newfile%>nul)
  call :add-line
  move /y %newfile% %file%>nul
  goto :eof
  :del-line
  for /f "tokens=1* delims=:" %%i in ('findstr /n ".*"%file%') do if %%i neq %1
  echo;%%j>>%newfile%
  goto :eof
  :add-line
  echo;%word%>>%newfile%
  goto :eof

  420: デフォルトの名無しさん:2018/03/18(日) 00:33:29.96 ID:Sr1iY1Ai
  ループ回しすぎじゃね?
  小さいファイルならいいだろうけど.
  でかいログファイルとかだと辛いかも.

  421: デフォルトの名無しさん:2018/03/18(日) 01:44:49.36 ID:WKBkcipr
  バッチのfor /f 〜 in (ファイル)って1行ずつシーケンシャルにメモリに読んでるって考えていいのかな?

  422: デフォルトの名無しさん:2018/03/18(日) 04:17:33.81 ID:Cc3+LG/u
  >>420
  wordってのがどれだけの頻度で出現するかで違ってくる.
  もし殆ど書かれてないのなら, 最後が.
  --hogeならforループはほぼ2回分(wordが各行当たり前にあるのなら4回分)
  hogeやなしならforループはほぼ1回分(wordが各行当たり前にあるのなら3回分)
  wordと--wordの検索は一緒のループでできそうだけど.
  あと, データ中に, &|^%"'\や%date%を入れてみたけど問題ないみたいだ(win7)

  423: デフォルトの名無しさん:2018/03/18(日) 04:26:44.33 ID:Cc3+LG/u
  いや各行にwordと--wordのどっちかしか無いとするなら--wordの場合で最大でも3回分か.

  424: デフォルトの名無しさん:2018/03/18(日) 05:31:06.94 ID:5/8yH4g6
  set /a a0=0, b=0, c=1, e=1
  for /f "delims=: tokens=1*" %%i in ('findstr /n .* in.txt') do(
  set "a%%i=%%j"
  if defined a%%i set /a b=%%i
  set /a c=%%i+1
  )
  setlocal enabledelayedexpansion
  if not "!a%b%!"=="!a%b%:hoge=!" set /a c=b
  set "a%c%=hoge"
  del out.txt
  :y
  echo.!a%e%!>>out.txt
  set /a e+=1 & if !e! leq !c! goto y

  425: デフォルトの名無しさん:2018/03/18(日) 07:42:25.76 ID:Cc3+LG/u
  1万行ある適当なテキストファイルでテストしてみた.
  >>419の方, 3.1秒 (最後に-- hoge行を加えた場合  7.5秒)
  >>424の方, 2分14秒(最後に-- hoge行を加えた場合  2分14秒)
  ってな結果になった.
  >>419の方はforのループ回数は多いが, 比較すると速いという結果になった.

  426: デフォルトの名無しさん:2018/03/18(日) 16:56:47.62 ID:93ta1lhd
  Oh...ワタシ findstr /n ノキョドウカンチガイシテタネ...

  427: デフォルトの名無しさん:2018/03/18(日) 20:22:40.18 ID:93ta1lhd
  >>419, >>424は対象ファイルの行頭にコロンがあると消されちゃうね.

  428: デフォルトの名無しさん:2018/03/18(日) 22:13:27.07 ID:WKBkcipr
  そういう後から判明するバグが紛れ込むからバッチで文字列処理は嫌なんだよな.

  429: デフォルトの名無しさん:2018/03/18(日) 22:14:36.65 ID:5/8yH4g6
  先頭から連続するデリミタは全て消される.
  >>419, >>424 どっちもダメ.
  >>424 は /? もダメ.
  abc
  :::def
  /?
  -- hoge

  430: デフォルトの名無しさん:2018/03/18(日) 22:17:56.90 ID:5/8yH4g6
  /? は >>419 の方がダメだった.

  431: デフォルトの名無しさん:2018/03/18(日) 22:45:10.52 ID:WKBkcipr
  俺が仮組みしてみたやつもforの変な仕様で空行削除されてた.
  バッチだけで手軽には無理だな.
  素直に適当なスクリプト使った方がいい.

  432: デフォルトの名無しさん:2018/03/18(日) 22:59:27.55 ID:Cc3+LG/u
  >>430
  セミコロンをピリオドとかコロンとにするといいみたい.
  echo; -> echo:

  433: デフォルトの名無しさん:2018/03/18(日) 23:05:58.69 ID:Sr1iY1Ai
  >>425
  424のほうのgoto labelをfor(/L)にすると多少速くなるけど.
  findstrを繰り返し使ったほうが速いね.
  メモリにも優しい.

  434: デフォルトの名無しさん:2018/03/18(日) 23:09:22.00 ID:WKBkcipr
  >>432
  どの文字に変えてもその文字が来ればデミリタ判断されておかしなぶった切りが起こるから.
  デミリタ文字のエスケープ処理が必要になるんでは.

  435: デフォルトの名無しさん:2018/03/19(月) 02:29:30.41 ID:VE4HgUIn
  x デミリタ.
  o デリミタ.

  436: デフォルトの名無しさん:2018/03/19(月) 06:32:04.04 ID:UCUeI8NE
  UTF8扱えない時点で限界を感じる.

  437: デフォルトの名無しさん:2018/03/19(月) 09:11:01.79 ID:cAxnz/N1
  set /a a=0, b=0, c=0, d=1 & del out.txt 2> nul
  for /f "delims=:" %%i in ('findstr /n . in.txt') do set /a a=%%i
  for /f "delims=:" %%i in ('findstr /n hoge in.txt') do set /ab=%%i
  if %a%==%b% set /a c=b
  for /f "delims=0123456789 tokens=*" %%i in ('findstr /n .* in.txt')do (
  set "e=%%i"
  setlocal enabledelayedexpansion
  if !d!==!c! goto x
  echo.!e:~1!>>out.txt
  endlocal
  set /a d+=1
  )
  :x
  echo hoge>>out.txt

  438: デフォルトの名無しさん:2018/03/20(火) 06:19:09.67 ID:5rDh/omp
  >>437
  元ファイルにechoで追加ですむ場合もあるが.
  ファイル終端が改行になってるか確認する方法が思いつかない.

  439: デフォルトの名無しさん:2018/03/20(火) 08:03:38.21 ID:BuzmWDFp
  >>438
  終端に改行があろうがなかろうが, echoで出力すれば改行は付加されるよ.
  あとは参考になるかわからんが.
  set LF=^
  setlocal EnableDelayedExpansion
  findstr /n .* in.txt
  findstr /n $ in.txt
  findstr /n !LF! in.txt
  の出力の差で終端改行のありなしの見分けがつくかも.
  (setとsetlocal行の間の空行は省略しないこと)
  改行コードが, CR/LF, LF, CRで違った結果が出るところが面白いよ.

  440: デフォルトの名無しさん:2018/03/20(火) 19:42:04.51 ID:5rDh/omp
  >>439
  ファイル終端が改行になっていないと最後の行の後ろにhogeがくっつくだけだよ.
  >>419で試してみなよ.
  echoで空行を追加してからhogeを付ければいいんだけど.
  それだとファイル終端が改行になっていたら余計な空行ができる.

  441: デフォルトの名無しさん:2018/03/20(火) 20:10:53.11 ID:to9q6Sr+
  コマンドプロンプトの画面で以下の<コマンド(1.)>を入力すると現在の年月日時分秒が表示されるのですが.
  これを変数に入れるにはどうすれば良いのでしょうか?
  以下の<コマンド(2.)>ではうまく入りませんでした・・・.
  <コマンド(1.)>
  powershell -command "date -f yyyyMMddHHmmss"
  <コマンド(2.)>
  set NICHIJI=powershell -command "date -f yyyyMMddHHmmss"

  442: デフォルトの名無しさん:2018/03/20(火) 23:06:27.49 ID:BuzmWDFp
  >>440
  >>437のことじゃなかったのか.

  443: デフォルトの名無しさん:2018/03/20(火) 23:18:51.64 ID:aHaiWzOW
  >>441
  for /f "delims=" %%G in ('powershell -command "date ・・・"')do set "NICHIJI=%%G"

  444: デフォルトの名無しさん:2018/03/20(火) 23:52:48.01 ID:BuzmWDFp
  >>441
  外部プログラムの標準出力を取り込むのが目的ではなくて, 単に現在日時をセットするだけならバッチのみで済むけど.
  set NICHIJI=%date:/=%%time::=%
  set NICHIJI=%NICHIJI:~0, -3%

  445: デフォルトの名無しさん:2018/03/21(水) 01:09:02.52 ID:UBrEBSgZ
  >>442
  すみません, 分かりにくい文でした.
  >>437を改造しようとしたが改行がネックだと言う話.
  以下の通り改造してみた.
  >>437の4行目と5行目の間に一行挿入.
  if %c%==0 goto y
  ラベル:x以降は変更.
  :x
  echo hoge>>out.txt
  goto :eof
  :y
  copy in.txt out.txt & call :x
  for /f %%i in ('findstr .* out.txt') do set "e=%%i"
  if "%e%"=="hoge" goto :eof
  copy in.txt out.txt
  echo.>>out.txt
  goto x

  446: デフォルトの名無しさん:2018/03/21(水) 01:15:45.86 ID:UBrEBSgZ
  あ, for /f "delims=" かな.

  447: デフォルトの名無しさん:2018/03/22(木) 16:25:40.46 ID:pbBa6R9F
  echo と同じ行で何か実行すると空白が入る.
  echo.>a
  echo.>b & rem
  dir a b

  448: デフォルトの名無しさん:2018/03/22(木) 17:04:47.92 ID:pbBa6R9F
  豆知識その2
  echo と同じ行でパイプ実行すると表示が変わることがある.
  set a=%%b%%
  set b=xxx
  echo %a%
  echo %a% | more

  449: デフォルトの名無しさん:2018/03/22(木) 17:12:47.60 ID:pbBa6R9F
  豆知識その3
  文字化け嫌なら遅延展開で.
  @echo off
  set "a=a > nul"
  set "b=b & rem"
  echo %a%
  echo %b%
  echo ------
  setlocal enabledelayedexpansion
  echo !a!
  echo !b!
  pause

  450: デフォルトの名無しさん:2018/03/22(木) 21:50:43.44 ID:TJWufbYh
  プログラムからファイルの追加・削除・変更などを行っている最中のフォルダに対して「dir /s」のコマンドを実行した場合.
  そのせいでプログラムからの処理を邪魔してしまうことってあるのでしょうか?

  451: デフォルトの名無しさん:2018/03/24(土) 19:48:05.05 ID:pj5y8nH5
  絶対に邪魔をしないと言い切るのは難しいな. 悪魔の証明.

  452: デフォルトの名無しさん:2018/03/25(日) 01:41:58.87 ID:cTYVl2v9
  普通は影響しないと思ってていいだろう.
  そのプログラムがシビアな待ち時間を気にするような造りにさえなってなければね.

  453: デフォルトの名無しさん:2018/03/25(日) 14:43:32.24 ID:8LXGoh28
  dirはファイル自体を見に往くわけじゃないから.

  454: デフォルトの名無しさん:2018/04/03(火) 02:29:58.94 ID:yDWDpnwx
  ちょっとハマってしまったのでアドバイスをいただきたく.
  @echo off
  cd /d %~dp0
  setlocal ENABLEDELAYEDEXPANSION
  FOR /f "delims=" %%i IN ('cmd /u /c ECHO;名') DO (
  SET CR=%%i
  SET CR=!CR:~0, 1!
  )
  SET LF=^
  set CRLF=!CR!!LF!
  set DATA=alpha beta gamma
  set DATA2=%DATA: =!CRLF!%
  @echo ----------------------------------------------
  @echo !DATA2!
  @echo ----------------------------------------------
  (@echo !DATA2!) > testdata2.txt
  @echo -------------FOR開始---------------
  FOR /F "tokens=*" %%a in ('echo !DATA2! ^| findstr /C:"be"')DO (
  @echo FORに入った.
  @echo %%a
  )
  @echo -------------FOR終了---------------
  :last
  pause

  455: 454:2018/04/03(火) 02:42:57.22 ID:yDWDpnwx
  >>454でやりたいこと.
  ・空白区切りの文字列群が入っている環境変数DATAがある.
  ・ここから, 特定の文字列(ここでは"be")を含む文字列だけを取り出したい.
  ・空白を改行(CRLF)に置換してfindstrすればいいかと思ったが,
    @echo !DATA2! > testdata2.txt では確かに改行されたファイルができるものの,
    @echo !DATA2! | findstr /C:"be" だと, そもそも @echo !DATA2!が.
    "alphaCRLFbetaCRLFgamma"のような単一行扱いでfindstrに渡されるらしく(?),うまくいかない.
    出力結果は.
      -------------FOR開始---------------
      FORに入った.
      alpha
      -------------FOR終了---------------
    となってしまう.
    (echo alphaCRLFbetaCRLFgamma をやろうとして, CRLFのとこまでしか出力してないということ?)
  ・type testdata2.txt | findstr /C:"be" にすればいいのだが, できれば一時ファイルへの出力は行いたくない.
  何か良い方法はないでしょうか.

  456: デフォルトの名無しさん:2018/04/03(火) 18:08:30.38 ID:dFuhrusg
  日立だな.

  457: デフォルトの名無しさん:2018/04/03(火) 21:08:04.29 ID:NTm1Ga+l
  空白区切りならcallとshiftで回せばいいのでは.
  @echo off
  set DATA=alpha beta gamma
  call :SEARCH %DATA%
  goto :eof
  :SEARCH
  if "%1" == "" goto :eof
  echo %1 | findstr be
  shift
  goto SEARCH

  458: デフォルトの名無しさん:2018/04/05(木) 19:45:55.97 ID:9RkYEovX
  とあるプロンプトを表示して確認画面でyes/no入れてyesが表示されたら処理を続けるnoが入れられたらgoto
  ENDって事がワンライナー(一行)でやりたいんですけど良い方法ありませんか?

  459: デフォルトの名無しさん:2018/04/05(木) 19:54:59.74 ID:9RkYEovX
  >>458は例えば[下矢印]なのを一行でやりたいんです.
  setlocal
  set /p answer="実行しますか(y/n)? : %answer%"
  if "%answer%"=="y" (
  echo "start"
  ) else if "%answer%"=="n" (
  echo "cancel"
  exit /b 1
  )else (
  echo "other key"
  exit /b 1
  )
  endlocal

  460: デフォルトの名無しさん:2018/04/05(木) 21:02:59.97 ID:KYHgmfzR
  ワンライナー云々抜きに choice.exe は使ったらダメ?

  461: デフォルトの名無しさん:2018/04/05(木) 21:10:59.87 ID:vXFo65tf
  >>460
  環境的にツールの導入は認められません.

  462: デフォルトの名無しさん:2018/04/05(木) 22:30:55.38 ID:ivnu80TE
  choiceはWindowsに標準搭載されてるが.
  https://docs.microsoft.com/ja-jp/windows-server/administration/windows-commands/choice

  463: デフォルトの名無しさん:2018/04/05(木) 22:40:55.26 ID:BdFdoEej
  database.txt にある複数の文字列を delete.txt の内容で消去したいと考えているのですが.
  「複数の文字列 削除」でぐぐっても複数ファイルから単一の文字列を削除するtipsしかヒットせず迷子の状態になってしまいました.
  調べ方を教えていただけないでしょうか, よろしくお願いします.
  [database.txt]
  りんご, ごりら, らっぱ, ぱんだ, だちょう, うし, しお, おにぎり, りす,
  [delete.txt]
  ごりら.
  ぱんだ.
  うし.
  りす.
  [output.txt]
  りんご, らっぱ, だちょう, しお, おにぎり,

  464: デフォルトの名無しさん:2018/04/05(木) 23:13:44.90 ID:KYHgmfzR
  >>461
  XP なら追加が必要だが, Microsoftさまのリソースキットにはある.
  2003 もしくは XP 64bit 以降なら >>462 のいうように標準で存在する.
  まさか XP?

  465: デフォルトの名無しさん:2018/04/06(金) 01:14:00.52 ID:fUXQxuPE
  >>464
  確かWindowsXPだけでなくWindowsNT4.0やWindows2000の場合も.
  別途リソースキットからchoice.exeを持ってくる必要があったな.

  466: デフォルトの名無しさん:2018/04/06(金) 01:53:25.80 ID:eal1pYjS
  >>463
  Ruby で作った.
  # 行区切りのキーワードファイル.
  text_kw = File.read 'keyword.txt'
  keywords = { }
  text_kw.each_line do |line| # 1行ずつ処理する.
  line.chomp! # 末尾の改行を削除する.
  # 0文字でなければ, ハッシュに追加する.
  keywords[line] = true unless line.length == 0
  end
  text = File.read 'data.txt'
  # 末尾の改行を削除して, カンマ区切りで配列に入れる.
  words = text.chomp!.split(', ')
  # その単語がハッシュにあれば, 配列から削除する.
  words.delete_if { |word| keywords.has_key? word }
  # カンマで連結して, ファイルに上書きする.
  File.write('out.txt', words.join(', '))

  467: デフォルトの名無しさん:2018/04/06(金) 03:19:39.27 ID:Jw59w3Z9
  このrubyガイジはバッチスレにも住みついてんのか.

  468: デフォルトの名無しさん:2018/04/06(金) 07:06:54.89 ID:1XYxdGEK
  [下矢印]ガイジのおともだち.
  667 :ピラフ@9Jro6YFwm650 [sage]:2018/04/05(木) 22:04:35.89 ID:SYfKFmGc
  >>666

  469: デフォルトの名無しさん:2018/04/06(金) 07:12:37.58 ID:n8Wm7bZP
  rubyマンワロタ.
  本スレでやれよ. w.

  470: デフォルトの名無しさん:2018/04/06(金) 10:00:35.29 ID:fQXPpScw
  >>456
  いただきたく.
  ください.
  なんでわざわざ長ったらしい書き方するんだろうね.
  しかも質問してるくせに偉そうという.

  471: デフォルトの名無しさん:2018/04/06(金) 23:57:01.63 ID:LzrMMW4f
  >>462
  何故かWindowsPEに入っていない不思議.

  472: デフォルトの名無しさん:2018/04/07(土) 09:33:59.62 ID:QDDx5b92
  日立マンワロタ.
  日立スレでやれよ. w.

  473: デフォルトの名無しさん:2018/04/07(土) 13:50:49.47 ID:VdZT6mQb
  >>470
  回答者でもないお前が質問者の態度を問うな.

  474: デフォルトの名無しさん:2018/04/07(土) 15:41:13.15 ID:1zm7m+j1
  >>473
  おれは日本人としての道徳を説いてるんだが.

  475: デフォルトの名無しさん:2018/04/07(土) 21:08:07.97 ID:dWk4eLw8
  >>474
  あそこは日本人じゃなく山猿が結構いるよ.

  476: デフォルトの名無しさん:2018/04/07(土) 23:31:37.19 ID:pb/9IsOI
  for /l %%n in (1, 1, 10) do (

  477: デフォルトの名無しさん:2018/04/11(水) 23:23:30.97 ID:sp32so0L
  質問させてください.
  プログラムの標準出力を変数に代入する方法を調べ, 以下のような方法を見つけて動作を確認しました.
  FOR /f "DELIMS=" %%A IN ('ECHO ABC') DO SET ABC=%%A
  しかし, 'ECHO ABC' の部分にダブルコーテーションが含まれているとうまく動作しませんでした.
  何らかの方法でダブルコーテーションをエスケープする必要があると思うのですが,
  その方法をご存知の方がいらっしゃれば教えていただけないでしょうか.
  よろしくお願いします.

  478: デフォルトの名無しさん:2018/04/12(木) 05:05:32.49 ID:8z3G53ms
  >>338-348と同じ話かな.

  479: デフォルトの名無しさん:2018/04/12(木) 07:05:02.54 ID:UI16Z2bS
  @echo off
  FOR /f "delims=" %%A IN ('ECHO hoge^"hoge') DO SET "ABC=%%A"
  echo %ABC%
  pause

  480: デフォルトの名無しさん:2018/04/21(土) 16:41:01.08 ID:x8Crqpim
  こんなファイルがありまして.
  2018/04/21 09:30:00
  count
  10
  2018/04/21 10:00:00
  count
  20
  [下矢印]のように変換出力したいです.
  2018/04/21 09:30:00<tab>10
  2018/04/21 10:00:00<tab>20
  どのようにしたらいいでしょうか.

  481: デフォルトの名無しさん:2018/04/21(土) 18:30:43.44 ID:9o1T2SLn
  >>480
  <tab>はTABコードだと判断したが, もし単なる文字列ならその部分は修正してくれ.
  @echo off
  setlocal EnableDelayedExpansion
  type nul>out.txt
  for /f "delims=N" %%I in ('cmd /u /c echo 三') do set TAB=%%I
  set n=0
  for /f "tokens=* delims=" %%i in (in.txt) do (
  set d!n!=%%i
  set /a n+=1
  if !n! geq 3 set n=0&echo.!d0!%TAB%!d2!>>out.txt
  )
  endlocal

  482: デフォルトの名無しさん:2018/04/21(土) 20:19:07.52 ID:kVqs7sc1
  下手にバッチでやるよりエディタ等で.
  \ncount\nをtabに一発置換するだけのような.

  483: デフォルトの名無しさん:2018/04/21(土) 20:38:40.63 ID:6+H6buOa
  >'cmd /u /c echo 三'
  ナニコレ.

  484: デフォルトの名無しさん:2018/04/21(土) 21:33:42.67 ID:x8Crqpim
  >>481
  これでできました.
  でも難しくて意味が分からないけど.
  >>482
  秀丸でやったらできました.
  これは楽ですね.
  お二人ともありがとうございます.

  485: デフォルトの名無しさん:2018/04/21(土) 21:41:42.48 ID:9o1T2SLn
  >>483
  今まで何度か出てたはずだけど覚えてないかな?
  漢字の三は, SJISでは8E4Fだが, Unicodeでは, U+4E09
  英字Nは, ASCII(SJIS)で, 4E
  HT(水平タブ)文字は, ASCII(SJIS)で, 09

  486: デフォルトの名無しさん:2018/04/22(日) 03:16:01.56 ID:HWr0EbfP
  >>481は3行1セットを大前提として1行目+タブ+3行目で1行として出力するバッチやね.
  中身が何かっての全く確認しないから変な行あったら以後盛大に誤爆する.

  487: デフォルトの名無しさん:2018/04/22(日) 06:56:22.77 ID:Lev+VBnm
  @echo off
  type nul>out.txt
  setlocal enabledelayedexpansion
  set n=0
  for /f "delims=" %%i in (in.txt) do (
  set "d!n!=%%i" & set /a "n=(n+1)%%3"
  if !n! equ 2 if not "%%i"=="count" echo.!d0!>>out.txt&setn=1& set "d0=%%i"
  if !n! equ 0 echo.!d0! !d2!>>out.txt
  )
  !d0!と!d2!の間は普通にtab入力.

  488: デフォルトの名無しさん:2018/04/22(日) 07:14:11.56 ID:H/AU6k7y
  だからなに?

  489: デフォルトの名無しさん:2018/04/22(日) 19:58:53.86 ID:Ai4JHVEf
  バッチは不特定多数に提供するんでなければ, やっつけでいいんだよ.
  取り合えず用が足せればいい.
  ああいう場合にどうだとか余計なことはそういう場面に遭遇してから対処すればいい.
  まあ違う考えを持ってる人もいるだろうから俺の考えではと限定しての意見だが.

  490: デフォルトの名無しさん:2018/04/22(日) 21:50:25.52 ID:Lev+VBnm
  >>487もやっつけだよ.
  不具合だらけ.

  491: デフォルトの名無しさん:2018/04/23(月) 00:48:13.86 ID:+coOi68A
  元となったデータを見てると, 何かのプログラムで出力した結果のようだから.
  イレギュラーなデータはそもそもあり得ないのかもしれない.
  それをイレギュラーなデータがあったらと考えていろいろ対処するのどんなもんなのかな.

  492: デフォルトの名無しさん:2018/04/23(月) 01:49:13.44 ID:+coOi68A
  あと, >>486は, こういう処理をしているんだからそれを念頭においてねってことだけで,
  何もその点を修正しろとか言ってないわけよ.
  >>486も, 何をしてるのか分かっていて使う分にはそれで良いと思ってるんじゃないのかな.

  493: 486:2018/04/23(月) 16:55:05.27 ID:75V+260b
  >>484が.
  > でも難しくて意味が分からないけど.
  こんな事言ってるから何してるのか書いただけよ.
  それ以外の意味は無い.

  494: デフォルトの名無しさん:2018/04/26(木) 21:33:25.10 ID:iUADfoHj
  バッチファイルを直接ダブルクリックした時は処理の最後にpauseをかける(=コマンドプロンプトウインドウを.
  閉じずにホールドする)条件にして, コマンドプロンプトから呼び出された場合はpauseはかけずに処理を.
  終了するという実装をしたいんですが, いい方法ありますか?

  495: デフォルトの名無しさん:2018/04/26(木) 21:43:36.77 ID:g7ZPMx3V
  >>494
  引数で処理を分けるか, pause有無でバッチファイルそのものを分ける.

  496: デフォルトの名無しさん:2018/04/26(木) 21:50:58.00 ID:5PgkCptO
  適当でいいなら%CMDCMDLINE%

  497: デフォルトの名無しさん:2018/04/26(木) 21:57:48.38 ID:vlAm5Lzz
  %0 参照して分岐すれば?
  echo %0
  pause

  498: デフォルトの名無しさん:2018/04/26(木) 22:30:55.90 ID:iUADfoHj
  レスありがとうございます>各位.
  すいませんダブルクリックと書いたのでミスリードになってしまったのですが, 実際にはD&Dで引数も使用します.
  なので>>496の環境変数参照して/Cオプション実行しているかどうかで分岐しようと思います.

  499: デフォルトの名無しさん:2018/04/27(金) 01:23:21.22 ID:XIoO9rX1
  ログファイルで確認するようにすればいいのに.

  500: デフォルトの名無しさん:2018/04/27(金) 19:57:13.14 ID:CQ9eqs6l
  え?

  501: デフォルトの名無しさん:2018/05/01(火) 06:45:44.95 ID:aXoGd7xG
  64桁の10進数を16進数に変換する方法, 探したけど見つからなくて.
  バッチファイルだけでやるのは無理があるでしょうか.
  javascriptでなら巨大な桁数いけるサイトはあったのですが.
  バッチファイル内で大量に処理したいのです.

  502: デフォルトの名無しさん:2018/05/01(火) 08:40:01.76 ID:04a9c6T+
  ネットワークカードに複数IPアドレスをバッチファイルで当てる方法教えてください.
  netsh interface ipv4 set add name="ローカル エリア接続" static
  addr1="192.168.15.35"このあと.
  192.168.1.35も割り当てたい, よろしくお願いいたします.

  503: デフォルトの名無しさん:2018/05/01(火) 08:45:13.16 ID:04a9c6T+
  自己解決  netsh interface ip add address name="ローカル エリア接続"addr=192.168.1.35
  mask=255.255.255.0

  504: デフォルトの名無しさん:2018/05/01(火) 17:14:01.70 ID:cVB2iu29
  >>501
  取り敢えず, これでやったらどう?
  https://technet.microsoft.com/ja-jp/sysinternals/hex2dec

  505: デフォルトの名無しさん:2018/05/01(火) 23:59:01.96 ID:7h2ZqymN
  >>501
  普通の手段だと無理だと思う.
  1. 整数演算はOSのbit数の上限までしかできない.
  2. 文字列として変換するにしても255=>0xFFが限界.
  ・・・.
  3. そもそも符号無し16進??有りの16進??

  506: デフォルトの名無しさん:2018/05/02(水) 00:09:36.26 ID:bQsnMWtx
  >>501
  ほぼ無理.
  自転車で崖を上がりたいというようなもの.
  あきらめて, これを機に何かの言語を覚えるといろいろな場面で一生使える.
  一番簡単なのはinstall不要なgawk.

  507: 505:2018/05/02(水) 00:34:38.73 ID:69djG7nz
  訂正. 64bit環境でも調べたけど, 最大2147483647(符号付32bitのMAX)だった.

  508: デフォルトの名無しさん:2018/05/02(水) 02:01:56.61 ID:z5LQTSUi
  >>504-507
  ありがとうございます. hex2decは試行済でした.
  1234567890000987654321000000
  を渡すと.
  7766001854005038656 = 0x6BC6618A48FECE40
  このように崩れます.
  やはり無理がありますか. . .
  gawkはlinuxのようですね. windowsで実現する方法を求めていました.
  バッチファイルでは出来そうにないのでWSH JScriptあたりを探してみたりしていました.
  他手段を探してみたいと思います. ありがとうございました.

  509: デフォルトの名無しさん:2018/05/02(水) 03:07:32.00 ID:KFhIKBMV
  batでも出来るんだけど, 実用な時間で出来るかと言われると何ともねえ.
  @echo off
  setlocal
  set hex=0123456789ABCDEF
  set in=1234567890
  set out=
  set bin=
  :loop
  call :div2 in s
  set bin=%s%%bin%
  if defined in goto :loop
  :loop2
  set h=000%bin:~-4%
  set /a h=("%h:~-4, 1%<<3")+("%h:~-3, 1%<<2")+("%h:~-2,1%<<1")+%h:~-1%
  set bin=%bin:~0, -4%
  call set out=%%hex:~%h%, 1%%%out%
  if defined bin goto :loop2
  echo.0x%out%
  endlocal
  goto :eof
  :div2
  set dst=
  set s=0
  :divloop
  set d=%in:~0, 1%
  set in=%in:~1%
  set /a s=s*10+d
  set /a h="s>>1"
  set /a s%%=2
  if defined dst (set dst=%dst%%h%) else if %h% gtr 0 set dst=%dst%%h%
  if not defined in set in=%dst%&goto :eof
  goto :divloop

  510: デフォルトの名無しさん:2018/05/02(水) 03:13:02.96 ID:q7DG1Lgj
  生きている間に終わらないってこと?

  511: デフォルトの名無しさん:2018/05/02(水) 03:17:05.83 ID:KFhIKBMV
  これはやっつけで作ったんで, もっとスマートにできるかも知れない.
  なお,
  div2ルーチンは最初変数を独立させるためにsetlocalで別環境にしてた名残が呼び出し元の引数に残ってる(無意味だから何で付けてるのって思わないように)

  512: デフォルトの名無しさん:2018/05/02(水) 03:19:47.60 ID:KFhIKBMV
  >>510
  いや実際やってみればわかる.
  64桁程度なら一応待てる??時間内で終わるよ?
  inに10進数値をセットするが, %1に書き替えて起動時の引数で与えるようにすれば色々試せるだろう.

  513: デフォルトの名無しさん:2018/05/02(水) 06:44:11.75 ID:D/jExvSh
  awkなら速くできるの?

  514: デフォルトの名無しさん:2018/05/02(水) 07:02:56.10 ID:ESv7owpX
  >>509
  元の質問者じゃないけど, これ動かすとたまに「プロセスはファイルにアクセスできません. 別のプロセスが使用中です. 」って出る.
  自分で書いたbatもループとかcallが多いとこれが出たりリダイレクトに失敗してたりする事があるんだけど何が原因?
  ごくごく稀に飛ぶはずのないラベルに飛んで動作不良起こしたりもする.

  515: デフォルトの名無しさん:2018/05/02(水) 18:25:33.72 ID:vWDYKqwa
  >>508
  これとかは?
  ツール関係の小部屋.
  http://sky.geocities.jp/hp_gabo200x/room_tool.html
  C-style arbitrary precision calculator
  http://sky.geocities.jp/hp_gabo200x/mysoft/gcalc.lzh

  516: デフォルトの名無しさん:2018/05/02(水) 21:55:01.98 ID:KFhIKBMV
  >>514
  OSは何だろう?
  こっちは, win7pro 64bit
  通常そういう変な動作はワークエリアが残ってない場合なんかに起きる.
  環境変数をいっぱい定義して領域が残ってないとか.
  そういう場合, コマンドプロンプトを一旦閉じて再度起動して初期状態にして試してみる.
  win2000で環境変数領域は2048バイト, winXPでは8192バイト, それ以外はヘルプにコマンドプロンプト関連のの説明が無い.
  でもまあ大抵はbatに問題がある.
  >>509のはこっちでは70桁を指定しても正常に動作してるが,
  setlocalで子環境を作ってて, サブルーチンから抜けるときにはendlocal無しにgoto :eofしてるので.
  その辺が問題なのかもしれない.
  この辺はよく分からないので, 一度setlocal, endlocalを削除して試してくれ.

  517: デフォルトの名無しさん:2018/05/02(水) 22:06:46.67 ID:KFhIKBMV
  >>514
  そのメッセージがbat実行直後なら(つまりあまりに瞬時で実行してるように思えない場合),
  本当にbatファイルが別プロセスで使用中なのかも知れない.
  裏で何かのプログラムがbatファイルを握って離さないとか.
  (インデックスサーチとかセキュリティチェックとかは, 俺は作動させてないのでどうなのかは知らない)

  518: 514:2018/05/03(木) 05:58:29.18 ID:KZ8lRGiM
  >>516-517
  OSはwin10 64bitです.
  セキュリティソフトはWindows Defender, インデックスサーチはWindows Search, Everythingを使ってます.
  これらは利用者多いのに同様の不具合は聞いたこと無いから関係無いかも?
  環境変数はいくつか自分で追加したけど問題になるほど登録してるとも思えないしよく分からない.
  他になにか悪さをしているソフトがあるのかなあ.

  519: デフォルトの名無しさん:2018/05/03(木) 11:45:15.41 ID:Ox4SBvDu
  >>501
  もう見てないかも知れないが,
  俺の古いPCで, 64桁で0.4秒ほどの実行時間です.
  @echo off
  setlocal enabledelayedexpansion
  set "a=1234567890123456789012345678901234567890123456789012345678901234"
  set "g=0123456789ABCDEF"
  set "h="
  set /a b=8, e=100000000
  for /L %%i in (8, 8, 56) do if not "!a:~%%i, 1!"==""set /a b=%%i+8
  set "a=0000000%a%"
  set "a=!a:~-%b%!"
  for /L %%i in (%b%, -8, 8) do set /a "a%%i=1!a:~-%%i, 8!-e"
  :x
  set /a c=0, f=0
  for /L %%i in (%b%, -8, 8) do set /a "d=a%%i+c*e, a%%i=d>>4, f|=a%%i, c=d&15"
  set "h=!g:~%c%, 1!%h%"
  if %f% neq 0 goto x
  for /f "delims=0 tokens=*" %%i in ("%h%") do set h=%%i
  echo %h%
  pause

  520: デフォルトの名無しさん:2018/05/03(木) 18:33:32.97 ID:Ox4SBvDu
  >>515 の gcalcを使用すると簡単.
  >type a
  printf("%x\n",
  1234567890123456789012345678901234567890123456789012345678901234)
  >gcalc < a > b
  >type b
  0x30046030f26f462d7ac21a27eb9d53fff233c7acd12d87e96aff2

  521: デフォルトの名無しさん:2018/05/03(木) 18:53:18.66 ID:Ox4SBvDu
  すまん, printfの次の行にexitを追加して.

  522: 501:2018/05/04(金) 16:14:55.26 ID:hkAWCjpW
  >>509
  >>519
  すごい!ありがとうございます!
  なんか微妙だなーと思って戻ってみたら凄いスマートなのリプきてた.
  gcalcとも比較してみましたがかなり早いですね. ミリ秒二桁くらい違う.
  使わせていただきます. ありがとうございました!

  523: デフォルトの名無しさん:2018/05/04(金) 23:52:47.93 ID:Ry3XO9FI
  >>501
  Ruby では,
  num = 9999_1234567890_1234567890_1234567890_1234567890_1234567890_1234567890
  num.to_s(16)
  #=> "184e78450dd8c1fca3b502d65e4f6fb73c42c47ccff196ce3f0ad2"

  524: デフォルトの名無しさん:2018/05/05(土) 00:20:09.03 ID:uOR+hZGm
  dcなら.
  値1
  値2
  :
  値n
  16of

  525: デフォルトの名無しさん:2018/05/05(土) 04:13:57.15 ID:nqyvYHZY
  >>520
  gcalc面白いね.
  こんな書き方が通っちゃうんだー.
  --bat--
  @echo off
  gcalc -d config(\"tab\", 0), base(16), <in.txt; quit;
  rem gcalc -d config(\"tab\", 0), base2(16), <in.txt; quit;
  --in.txt---
  1111111111
  2222222222
  3333333333

  526: デフォルトの名無しさん:2018/05/14(月) 16:02:14.00 ID:vCNzBA31
  %1や環境変数が数字だけか判定するのが面倒.
  ぐぐってやりかたはわかったが, もっとすっきりくっきりな方法はないですか.
  正規表現だと ^\d+$ でおわりなのに.
  set W=x%1
  set W=%W:0=%
  set W=%W:1=%
  set W=%W:2=%
  set W=%W:3=%
  set W=%W:4=%
  set W=%W:5=%
  set W=%W:6=%
  set W=%W:7=%
  set W=%W:8=%
  set W=%W:9=%
  if '%W%=='x echo 数字.

  527: デフォルトの名無しさん:2018/05/14(月) 16:37:10.19 ID:qPzKX5Gg
  set X=100
  echo %X%|findstr /X "[0-9][0-9]*"&&echo 数字.
  こうとか.

  528: デフォルトの名無しさん:2018/05/15(火) 01:55:36.53 ID:VsPlEm8N
  @rem 2147483648 以上の数は扱えないため, 大きい値が入る条件には不向き.
  set "W=%1"
  set DUMMY=a
  set /A "DUMMY=W*1"
  if not "%W%"=="%DUMMY%" (echo 数字以外) else echo 数字のみ.

  529: デフォルトの名無しさん:2018/05/15(火) 15:39:31.76 ID:Aaz/hbaw
  >>528
  -123 数字のみ.

  530: デフォルトの名無しさん:2018/05/15(火) 15:47:52.58 ID:Aaz/hbaw
  0001 数字以外.

  531: デフォルトの名無しさん:2018/05/16(水) 00:05:23.47 ID:vNnFvDtx
  ありがとうございます.
  >>527
  findstって正規表現のようなことができるのですね, 知らなかったです.
  >>528
  英字だけ, 数字だけだといいのですが, 英数字混在文字列でエラーになりました.
  *1 の代わりに +0も同じでした.

  532: デフォルトの名無しさん:2018/05/16(水) 03:54:43.21 ID:Hrg3NbAG
  @echo off
  call :check_num %1 result
  echo %result%
  pause
  goto :eof
  :check_num
  if "%~1"=="" set "b=FALSE" & goto :eof
  for /f "delims=-+0123456789 tokens=* eol=" %%i in ("%~1")do (
  set "a=%%i"
  if defined a (set "b=FALSE") else set "b=TRUE"
  )
  endlocal & set "%2=%b%"

  533: デフォルトの名無しさん:2018/05/16(水) 04:03:04.73 ID:Hrg3NbAG
  >>532
  7行目の :check_num の次の行に.
  setlocal
  を追加願います.

  534: デフォルトの名無しさん:2018/05/16(水) 04:13:36.97 ID:Hrg3NbAG
  なんか間違ってたので書き直した.
  @echo off
  call :check_num %1 result
  echo %result%
  pause
  goto :eof
  :check_num
  setlocal
  if "%~1"=="" set "b=FALSE" & goto x
  for /f "delims=-+0123456789 tokens=* eol=" %%i in ("%~1")do (
  set "a=%%i"
  if defined a (set "b=FALSE") else set "b=TRUE"
  )
  :x
  endlocal & set "%2=%b%"

  535: デフォルトの名無しさん:2018/05/16(水) 16:36:26.52 ID:VQztSlVV
  1"2
  result"=="" set "b=FALSE" & goto x の使い方が誤っています.

  536: デフォルトの名無しさん:2018/05/16(水) 16:48:32.10 ID:VQztSlVV
  "1"
  TRUE
  1"2"
  ECHO は <OFF> です.

  537: デフォルトの名無しさん:2018/05/16(水) 21:51:04.87 ID:Hrg3NbAG
  引数の中の " の対策すると大変なんで, やりたくない.
  やりたい人, どうぞ.

  538: デフォルトの名無しさん:2018/05/16(水) 22:31:00.96 ID:VQztSlVV
  1^2
  1|2
  1&2

  539: デフォルトの名無しさん:2018/05/16(水) 23:12:48.91 ID:Hrg3NbAG
  引数の中に cmd で特別な意味を持つ文字が有る場合は左に ^ を付けるか.
  全体を " で囲むしかないよ.

  540: デフォルトの名無しさん:2018/05/16(水) 23:15:29.43 ID:VQztSlVV
  >>538は>>527宛て.
  >>534的には, 1^^2

  541: デフォルトの名無しさん:2018/05/16(水) 23:50:08.13 ID:Hrg3NbAG
  FALSE になるようだが何か問題があるの?

  542: デフォルトの名無しさん:2018/05/17(木) 00:05:45.00 ID:TsNh8oQN
  ああ分かった リテラルが 1^2 の場合ね 失礼.

  543: デフォルトの名無しさん:2018/05/17(木) 00:31:20.52 ID:TsNh8oQN
  call :check_num "%~1" result
  にでもすりゃいいのかな.
  こういうのは考え出すときりが無い様な気がするが.

  544: デフォルトの名無しさん:2018/05/17(木) 01:18:19.29 ID:zVFG07SK
  分かってるのかどうか知らないが,
  1"2"が, ECHO は <OFF> です. になるのは, eol="が効いてるため.

  545: デフォルトの名無しさん:2018/05/17(木) 06:56:29.62 ID:TsNh8oQN
  eof= を消すと副作用があるし.
  どっちにしろ引数に ; があると誤動作するみたいだし.
  こりゃあもうお手上げだな.

  546: デフォルトの名無しさん:2018/05/17(木) 07:02:08.36 ID:TsNh8oQN
  あ, eol= だった.

  547: デフォルトの名無しさん:2018/05/17(木) 07:11:43.15 ID:pqvSuRzJ
  質問者が「もっとすっきりくっきりな方法」と言ってるんだから複雑でトリッキーな方法は求められてなないだろう.

  548: デフォルトの名無しさん:2018/05/17(木) 08:50:29.12 ID:zVFG07SK
  >>545
  >>269-273

  549: デフォルトの名無しさん:2018/05/17(木) 09:36:13.96 ID:cmWUEZX7
  >>547
  いつもそうなるけど, バッチじゃ諦めろ, が正解になってしまうよ. w.

  550: デフォルトの名無しさん:2018/05/17(木) 10:17:41.58 ID:TsNh8oQN
  どんな方法でも良いから.
  引数の中に " とか ; が入ってても.
  正しく動作するのを頼む.
  というのは絶対に無理なのかね.

  551: デフォルトの名無しさん:2018/05/17(木) 11:47:23.61 ID:TsNh8oQN
  >>550が不可ならそれを前提条件にするしかないだろ.
  ちょっと直してみた.
  @echo off
  call :check_num "%~1" result
  echo %result% & pause & goto :eof
  :check_num
  setlocal
  set "b=FALSE" & if "%~1"=="" goto x
  for /f "delims=-+0123456789 tokens=*" %%i in ("%~1")do (
  set "a=%%i" & if not defined a set "b=TRUE"
  )
  :x
  endlocal & set "%2=%b%"

  552: デフォルトの名無しさん:2018/05/17(木) 17:15:43.43 ID:TsNh8oQN
  とりあえず引数の " と ; の対策らしきもの.
  引数は行末まで1個のみ.
  もう嫌気がさしたのでこれ以上はやめとく.
  @echo off
  set a=%*"
  set /a b=0, c=0
  setlocal enabledelayedexpansion
  :x
  set d="!a:~%b%, 1!!a:~%b%, 1!"
  if !d!=="" goto y
  if !d!=="""" set /a c+=1
  if !d!==";;" set /a c+=1
  set /a b+=1 & goto x
  :y
  endlocal & set c=%c%
  set "e=FALSE" & if %c% gtr 1 (goto z) else set "a=%*"
  for /f "delims=-+0123456789 tokens=*" %%i in ("%a%")do (
  set "a=%%i" & if not defined a set "e=TRUE"
  )
  :z
  echo %e%

  553: デフォルトの名無しさん:2018/05/17(木) 17:16:28.81 ID:zVFG07SK
  >>550
  @echo off
  set "arg1=%1"
  call :check_num arg1 result
  echo %result% & pause & goto :eof
  :check_num
  setlocal EnableDelayedExpansion
  set "b=FALSE"
  for /f "delims=0123456789 tokens=*" %%i in ("!%1!")do (
  set "a=%%i" & if not defined a set "b=TRUE"
  )
  :x
  endlocal & set "%2=%b%"
  goto :eof
  引数に ; は指定できない(半角空白, カンマ, セミコロン, =は引数の区切りを示すため)
  なお, 遅延環境変数の展開を使わないでも以下のようなチェックで最初に弾けば可能.
  if "%arg1:"=%" equ "%arg1:"="%" (echo^"なし) else echo ^"あり.

  554: デフォルトの名無しさん:2018/05/17(木) 17:18:28.36 ID:zVFG07SK
  なお, +-は除くのが吉.
  +1+2-3

  555: デフォルトの名無しさん:2018/05/17(木) 18:05:24.87 ID:TsNh8oQN
  >554.bat 1"&ab"
  'ab""' は, 内部コマンドまたは外部コマンド,
  操作可能なプログラムまたはバッチ ファイルとして認識されていません.
  TRUE

  556: デフォルトの名無しさん:2018/05/17(木) 21:22:44.52 ID:zVFG07SK
  >>555
  これ以上はファイル渡しにすべきだろう.
  set /p
  or
  for /f delimes^=^ tokens^=*^ eol^=

  557: デフォルトの名無しさん:2018/05/17(木) 21:53:53.10 ID:TsNh8oQN
  >>555
  554.bat とあるが実際は >>553 のバッチ処理結果です.
  バッチ2行目の set コマンドの, 左側の " が悪さをしてる.
  当然, 下にあるチェック文もそのままでは使えない.
  引数 1;2 は実際には2つに分かれるが.
  これで TRUE を返すのは違和感あるので.
  >>552 では FALSE を返している.
  2つの %* を %1 にすれば TRUE を返せる筈.

  558: デフォルトの名無しさん:2018/05/18(金) 12:57:02.82 ID:CQAI+hTy
  これが分からない.
  https://social.technet.microsoft.com/Forums/ja-JP/610268b2-c3f7-4e4f-8aa2-9d32353804e4?forum=win10itprogeneralJP

  559: デフォルトの名無しさん:2018/05/18(金) 15:14:59.49 ID:nWqd9LPa
  for /f %%i in ('"cmd /k prompt $h <nul"') do set BS=%%i
  set /p AAA=".%BS%      必要ですか?(y/n):"

  560: デフォルトの名無しさん:2018/05/23(水) 19:31:22.87 ID:Au5e7VGg
  僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方.
  役に立つかもしれません.
  グーグルで検索するといいかも『ネットで稼ぐ方法  モニアレフヌノ』
  1FF18

  561: デフォルトの名無しさん:2018/05/24(木) 10:48:33.72 ID:cPlRxlDn
  1FF18

  562: デフォルトの名無しさん:2018/06/10(日) 03:50:12.86 ID:TMZk6u5D
  バッチファイルと同じ階層に複数のテキストファイルがあって,
  バッチファイルに次々とドラッグ&ドロップしたファイル名(拡張子含む)のみリスト化していくのは下記でできるのは分かったのですが・・・.
  @echo off
  for %%f in (%*) do (
  echo %%~nxf
  ) >> list.txt
  しかし, バッチファイルと同じ階層(別の階層でも良いですが)に複数フォルダがあり, 各フォルダ内にテキストファイルが複数ある場合に,
  フォルダをバッチファイルに1つ1つD&Dすることにより, そのフォルダ内のファイル名(拡張子)のみリスト化していくコマンドが分からず詰まっています.
  /rを使わずにわざわざ1つずつD&Dするのは, 単にファイル名の順番ではなく, リスト化を意図した順番にしたいからです.
  どなたかお願いします.

  563: デフォルトの名無しさん:2018/06/10(日) 16:08:13.36 ID:fV9CYqGb
  なんだって?

  564: デフォルトの名無しさん:2018/06/10(日) 19:14:45.63 ID:UcKh88So
  @echo off
  cd /d "%~1"
  for /r %%f in (*.txt) do (
  echo %%~nxf
  ) >> "%~dp0list.txt"

  565: デフォルトの名無しさん:2018/06/10(日) 20:30:30.29 ID:T1x52eBJ
  まずは,
  >リスト化を意図した順番.
  これを詳しく説明するところからだな.

  566: 562:2018/06/10(日) 20:59:39.63 ID:TMZk6u5D
  >>564
  できました.
  ありがとうございます!
  >>565
  意図した順番というのは, D&Dした順番, という意味でした.

  567: デフォルトの名無しさん:2018/07/04(水) 22:24:09.32 ID:gFgZc5FG
  GTD

  568: デフォルトの名無しさん:2018/07/05(木) 16:48:32.11 ID:AeL6VB/V
  GTD

  569: デフォルトの名無しさん:2018/07/08(日) 09:59:18.33 ID:48/+VLR1
  ファイル名に半角スペースを含んで拡張子も一つじゃない複数のファイルをドロップしてファイルごとに処理したいんだけどどうfor書いたらいい?
  今はこんな感じで書いてるんだけど半角スペースで切れちゃう.
  for %%f in (%*) do (
  echo "%%~nxf"
  )

  570: デフォルトの名無しさん:2018/07/08(日) 17:55:51.22 ID:fq5YPvHI
  >>569
  それで問題なさそうなんだけど,
  どういう問題なのか分からないから詳しく現象を説明してくれ.

  571: デフォルトの名無しさん:2018/07/08(日) 18:29:00.73 ID:48/+VLR1
  >>570
  ごめん半角じゃなくて全角スペースで切れてるみたいだ.
  "aaa  bbb.txt"
  こうなるはずがファイル一つドロップするだけで[下矢印]になる.
  "aaa"
  "bbb.txt"

  572: デフォルトの名無しさん:2018/07/08(日) 19:34:33.35 ID:ayaOLpVg
  >>569
  forじゃないけど, こんなんじゃあかんの?
  :loop
  echo %~nx1
  shift
  if not "%~1"=="" goto :loop

  573: デフォルトの名無しさん:2018/07/08(日) 20:03:03.50 ID:noo5aK3K
  aaa  bbb.txtとかa&b.txtみたいなのは%1等で受け取っても切れるね.
  cmdの独特なコマンドラインパース処理が悪いともいえるし.
  半角スペース含まれてないのをいいことにD&D時にダブルクォートで囲わないOS側が悪いともいえるし困ったもんだな.
  D&Dで処理するのはスクリプト言語使った方がいいかもしれん.

  574: デフォルトの名無しさん:2018/07/08(日) 20:56:02.67 ID:O/180cHX
  いまだにスペース問題抱えてるとは思わないよな.
  もう10数年以上前からあるのに.

  575: デフォルトの名無しさん:2018/07/08(日) 20:57:49.35 ID:3ARFRdhF
  こういうの直すと互換性の問題でも起きるの?

  576: デフォルトの名無しさん:2018/07/08(日) 21:45:56.33 ID:PKG5RTYD
  >571
  こうで良くないかなぁ?/d を使うパターン.
  for /d %%f in (%*) do (
  echo %%~nxf
  )
  >>575
  そういう仕様に依存している過去のコードの動作に影響が出るのさ.
  そういうコードは今までずっと企業内で使われている.
  作者不詳のまま・・・.

  577: デフォルトの名無しさん:2018/07/08(日) 21:49:43.77 ID:PKG5RTYD
  ごめん, /d でも全角はアウトですた.
  わけわからーん.

  578: デフォルトの名無しさん:2018/07/08(日) 22:24:06.32 ID:vrRjc8/F
  昔, どこかのサイトで似たようなの見たけど.
  %* を加工して解決しようとしてたが.
  数十行もあったような. w.
  でも, 俺が動作確認したら全然ダメだったし.

  579: デフォルトの名無しさん:2018/07/08(日) 22:50:01.23 ID:E+arm29j
  >>571
  Windows 10 Home 1803 だけど全角空白も & も>>569で問題なく処理できるよ.

  580: デフォルトの名無しさん:2018/07/08(日) 22:57:56.95 ID:vrRjc8/F
  >>579
  引数はフルパスだからな.
  フォルダ名に半角スペースあるだろ.

  581: デフォルトの名無しさん:2018/07/08(日) 23:16:12.53 ID:dDjh6KF7
  >>569
  for の代わりに forfiles を使うと ""付きファイル名なのでうまくいく(たぶん)

  582: デフォルトの名無しさん:2018/07/08(日) 23:36:45.60 ID:U6QPmMsx
  >>569
  全角スペースを文字として扱うか, 半角スペースと同じように扱うかについて,
  cmdは中途半端な扱いをしているようだしな.
  フルパスに半角スペースがあると, 全角スペースは文字として扱われるが,
  フルパスに半角スペースがないと, 全角スペースは半角スペースと同じ扱いになる.
  しかもクォートしただけでは対処できないという困ったことに.
  対処方法としては, フルパスの何処かに半角スペースを入れてクォートするだけ.

  583: デフォルトの名無しさん:2018/07/08(日) 23:38:41.06 ID:PKG5RTYD
  >>579
  Win10 Pro 1803 64bit.
  全角がアウト.

  584: デフォルトの名無しさん:2018/07/08(日) 23:39:37.04 ID:O/180cHX
  昔からある不具合なんだから互換性も糞もない.

  585: デフォルトの名無しさん:2018/07/08(日) 23:53:08.78 ID:E+arm29j
  >>580, >>583
  ああなるほど.
  すまん, ボケてたわ.

  586: デフォルトの名無しさん:2018/07/09(月) 00:39:27.28 ID:CF6LQR6B
  全角空白の場合, ダブルクォーテーションで括られないのに, 引数の区切り記号として取り扱われるってことか.
  間に, ダブルクォーテーションで括る操作をかませばいいか.
  @if (0)==(0) echo off
  set arg=%*
  for /f "delims=" %%f in ('cscript //nologo /e:jscript "%~f0"%%arg%%') do echo
  %%f
  pause
  goto :eof
  @end
  for(var i=0, arg=WScript.arguments;i<arg.length;i++)
  WScript.Echo('"'+arg(i)+'"');

  587: デフォルトの名無しさん:2018/07/09(月) 00:46:29.65 ID:CF6LQR6B
  いや引数を各行に分解したから, 括る必要もないな.
  最終行訂正.
  for(var i=0, arg=WScript.arguments;i<arg.length;i++) WScript.Echo(arg(i));

  588: デフォルトの名無しさん:2018/07/09(月) 01:05:14.62 ID:CF6LQR6B
  やっぱり括ってたほうがトラブルが少ないかも.
  あと, 半角空白が無いと括られないから,
  a^b.txt
  とかはBATに入ってくる時点でもうダメだな.
  %CMDCMDLINE%
  とか見てやれば可能だけど.

  589: デフォルトの名無しさん:2018/07/09(月) 01:10:51.13 ID:CF6LQR6B
  結論としては, 色々苦労して対応するより,
  必ず半角空白をいれたフォルダにファイルを置くようにしたほうがいいね.

  590: デフォルトの名無しさん:2018/07/09(月) 01:30:40.02 ID:M0pRa/sz
  これらは""で括れば問題ない.
  a=b.txt
  a;b.txt
  a^b.txt

  591: デフォルトの名無しさん:2018/07/09(月) 01:50:11.67 ID:M0pRa/sz
  これは""で括ってもechoで化ける.
  %cd%.txt

  592: デフォルトの名無しさん:2018/07/09(月) 21:52:59.96 ID:JZ4qv3b5
  俺はバッチスクリプトを生成するスクリプトをPerlだのPhysonで書くときは.
  ダブルクォートで囲わずに全部キャレットでエスケープしてる.
  今回の件は %* が勝手に全角空白で区切る仕様が駄目なんだけど・・・.
  スクリプトから呼ぶ場合には何とかなっても, D&Dの時点で引数を加工できないってとこに問題がある.
  shift しても無駄, っていうところ・・・.
  解決策・・・, ある??俺は思いつかない・・・.

  593: デフォルトの名無しさん:2018/07/09(月) 22:17:13.68 ID:FlHlLFRn
  nbspでもなるな.

  594: デフォルトの名無しさん:2018/07/09(月) 22:21:09.09 ID:CF6LQR6B
  a&b.txtとかはcmd. exeに入る前に対処しないとね.
  BAT以外の別スクリプトにD&Dして, そっちで引数を加工後にBATを呼んでもらうようにするぐらい.

  595: デフォルトの名無しさん:2018/07/09(月) 22:25:10.86 ID:CF6LQR6B
  ところでcmdスレなのに, なんでcmd. exeがNGワードなんだよ.

  596: デフォルトの名無しさん:2018/07/09(月) 22:54:28.83 ID:XFrzb5uR
  確認してないけどcloudflareがコマンドインジェクション対策で弾いてんるんじゃないの.
  ls -lとかもできなかったはずだし.

  597: デフォルトの名無しさん:2018/07/10(火) 07:31:20.48 ID:LbQkaO6y
  Ruby, PowerShell を使った方が良い.
  バグるのは低品質だし, 時間の無駄.

  598: デフォルトの名無しさん:2018/07/11(水) 20:28:10.61 ID:mCCOIiej
  >>597
  Ruby は実行環境のインスコがいる.
  PoerShell はD&Dできない.
  それ以前に, 特殊な世界ではいまだに XP が現役だったりする.
  Win7SP1以降のアップデートパッチを1個でも当てたら動作保証しませんなどというフザけた業務システムも実在する.
  レジストリを汚すインスコは駄目だけど, ネイティブコンパイルしたコマンドをコピーして使う分にはおk, てな環境もある.
  とりあえず, スクリプトを使用した D&D のファイルパス問題回避の最大公約数的解決は VBScript しかないんじゃないかな.
  (さすがに Win9X な環境はもうないだろう・・・と思うけど)
  使える環境なら検討した方がいいけど, 安易な「**使えばいい」という回答は頭が悪すぎる.

  599: デフォルトの名無しさん:2018/07/11(水) 21:11:59.69 ID:/R7esjNT
  なら環境毎に勝手に使えばいいんだから最大公約数なんて決める必要ないのでは.

  600: デフォルトの名無しさん:2018/07/12(木) 01:03:34.20 ID:MfQE+JgU
  NTも現役だよボケ.

  601: デフォルトの名無しさん:2018/07/12(木) 11:56:39.69 ID:72SuVZq5
  それ以前に, DOS自体が, 現e(ry

  602: デフォルトの名無しさん:2018/07/12(木) 14:54:19.05 ID:+klw6xr1
  >>569 無理矢理にバッチで書いてみた.
  @echo off
  set "a=%cmdcmdline:"=""%"
  setlocal enabledelayedexpansion
  set /a b=0, n=0
  set "s=" & set "d=""
  :x1
  if not "!a:~%b%, 1!"=="/" set /a b+=1 & goto x1
  :x2
  if "!a:~%b%, 1!"=="!d!" set /a n+=1
  if !n! equ 6 set /a b+=2 & goto x3
  set /a b+=1 & goto x2
  :x3
  set "a=!a:~%b%, -2! " & set /a b=0
  :x4
  if not defined a goto x8
  if "!a:~%b%, 1!"=="!d!" set /a n=0 & goto x6
  下に続く.

  603: デフォルトの名無しさん:2018/07/12(木) 14:54:43.36 ID:+klw6xr1
  :x5
  if not "!a:~%b%, 1!"==" " set /a b+=1 & goto x5
  set "s=!s!!d!!d!!a:~0, %b%!!d!!d! " & set /a b+=1
  set "a=!a:~%b%!" & set /a b=0 & goto x4
  :x6
  if "!a:~%b%, 1!"=="!d!" set /a n+=1
  if !n! equ 4 set /a b+=1 & goto x7
  set /a b+=1 & goto x6
  :x7
  set "s=!s!!a:~0, %b%! " & set /a b+=1
  set "a=!a:~%b%!" & set /a b=0 & goto x4
  :x8
  set "s=!s:""="!"
  endlocal & set s=%s%
  for %%f in (%s%) do echo "%%~nxf"
  pause

  604: デフォルトの名無しさん:2018/07/12(木) 20:30:02.59 ID:Gmf0IrMF
  >>602
  ファイル名に全角スペースが含まれていない場合に""が一つ余計に出力されます.

  605: デフォルトの名無しさん:2018/07/12(木) 20:30:48.00 ID:Gmf0IrMF
  訂正.
  全角スペースが含まれず半角スペースが含まれている場合.

  606: デフォルトの名無しさん:2018/07/12(木) 20:48:15.33 ID:+klw6xr1
  レスありがとう.
  でもこちらでは再現できない.
  出来たら具体例を.

  607: デフォルトの名無しさん:2018/07/12(木) 21:08:43.02 ID:+klw6xr1
  もしかしたらset文の行末にスペースがありませんかね?
  行末のスペースが有ったら全て削除してみて下さい.

  608: デフォルトの名無しさん:2018/07/12(木) 21:25:30.03 ID:Gmf0IrMF
  >>606
  もうちょい検証してこんなファイル名で発生するのを確認しました.
  "aーa b.txt"
  ""
  専ブラからコピーしたんでスペースとかはありませんでした.
  長めのスクリプト貼るときはpastebinとか使ったほうがいいかもしれません.

  609: デフォルトの名無しさん:2018/07/12(木) 21:31:57.91 ID:+klw6xr1
  バッチファイル名にスペースがあると不味いようです.

  610: デフォルトの名無しさん:2018/07/12(木) 21:37:35.42 ID:+klw6xr1
  違うな. . .
  ファイル名なんですか?

  611: デフォルトの名無しさん:2018/07/12(木) 21:39:01.64 ID:Gmf0IrMF
  バッチファイル自体はtest6.batなのでスペースはありません.
  このファイル名だと処理自体が終わらなくなりました.
  ーa ーb ーc.txt

  612: デフォルトの名無しさん:2018/07/12(木) 21:39:34.44 ID:Gmf0IrMF
  最初に検証したファイル名は.
  aーa b.txt
  です.

  613: デフォルトの名無しさん:2018/07/12(木) 21:52:50.96 ID:+klw6xr1
  バッチファイル名.
  "test.bat" がOK, "test - コピー.bat" が NG
  "ー" がダメ文字っぽい.
  なんだこりゃ.

  614: デフォルトの名無しさん:2018/07/12(木) 22:45:26.82 ID:+klw6xr1
  >>612
  とりあえず最初の3行を.
  @echo off
  setlocal enabledelayedexpansion
  set "a=!cmdcmdline:"=""!"
  set "a=!a:ー=/1!"
  最後の5行を.
  :x8
  set "s=!s:/1=ー!"
  set "s=!s:""="!"
  endlocal & set s=%s%
  for %%f in (%s%) do echo "%%~nxf"
  pause
  ダメ文字の詳細は不明.
  まだ有ったら, /2 /3 ... 置換.

  615: デフォルトの名無しさん:2018/07/12(木) 23:31:47.70 ID:+klw6xr1
  これも追加.
  5行目.
  set "a=!a:--=/2!"
  :x8の次の行に.
  set "s=!s:/2=--!"

  616: デフォルトの名無しさん:2018/07/13(金) 00:39:35.42 ID:7GlypEZW
  漢字コードが関係しているのかも.
  shift-jis
  chcp 932
  utf-8
  chcp 65001
  で試してみたら.

  617: デフォルトの名無しさん:2018/07/13(金) 06:59:58.30 ID:laaSwUH8
  if文のバグ?
  @echo off
  setlocal enabledelayedexpansion
  set a=----.
  set b=----
  set c=xx
  set d=""
  if "!a!"=="!d!" echo NG1
  if "!b!"=="!d!" echo NG2
  if "!c!"=="!d!" echo NG3
  pause
  結果は.
  NG1
  NG2

  618: デフォルトの名無しさん:2018/07/13(金) 19:59:02.76 ID:laaSwUH8
  >>617
  if "!a!"=="!b!" echo NG4
  結果は.
  NG4
  まあ, 見た目は似ているが. . .

  619: デフォルトの名無しさん:2018/07/13(金) 20:29:29.46 ID:laaSwUH8
  ちなみに >>617 をメモ帳にコピペして.
  変数 a の文字列で検索したら, なぜか変数 b にも一致したりする.
  逆もまた然り.

  620: デフォルトの名無しさん:2018/07/14(土) 06:43:27.53 ID:8rUsawXH
  >>612
  if文の不具合は引用符絡みのようなので.
  それを削除して書き直しました.
  @echo off
  call :set_arg arg
  if not defined arg goto :eof
  for %%f in (%arg%) do echo "%%~nxf"
  pause & goto :eof
  :set_arg
  setlocal enabledelayedexpansion
  set a=!cmdcmdline!
  set /a b=0, n=0
  set "s=" & set "c=/" & set "e= "& set "d=""
  :x1
  if not !a:~%b%^, 1!==!c! set /a b+=1 & goto x1
  :x2
  if !a:~%b%^, 1!==!d! set /a n+=1
  if !n! equ 3 set /a b+=2 & goto x3
  set /a b+=1 & goto x2
  下に続く.

  621: デフォルトの名無しさん:2018/07/14(土) 06:43:59.73 ID:8rUsawXH
  :x3
  set a=!a:~%b%, -1!& set /a b=0
  :x4
  if not defined a goto x8
  if !a:~%b%^, 1!==!d! set /a n=0 & goto x6
  :x5
  if not !a:~%b%^, 1!==!e! set /a b+=1 & goto x5
  set s=!s!!d!!a:~0, %b%!!d!!e!& set /a b+=1
  set a=!a:~%b%!& set /a b=0 & goto x4
  :x6
  if !a:~%b%^, 1!==!d! set /a n+=1
  if !n! equ 2 set /a b+=1 & goto x7
  set /a b+=1 & goto x6
  :x7
  set s=!s!!a:~0, %b%!!e!& set /a b+=1
  set a=!a:~%b%!& set /a b=0 & goto x4
  :x8
  if defined s set s=!s:~0, -1!
  endlocal & set %1=%s%

  622: デフォルトの名無しさん:2018/07/14(土) 09:47:55.50 ID:17hM4zE5
  >>620
  パスに全角半角含むかどうかに関わらず.
  a.pngがNG
  a - コピー.pngがOK.
  あ.pngがNG

  623: デフォルトの名無しさん:2018/07/14(土) 18:45:20.78 ID:8rUsawXH
  >>622
  すみません. :x3 の下の行を下記に訂正します.
  :x3
  set a=!a:~%b%, -1!!e!& set /a b=0

  624: デフォルトの名無しさん:2018/07/14(土) 22:32:02.01 ID:utl6Xayz
  >>598
  IT土方してるけどいまだにVB6のメンテ案件がたくさん来る (・_・;)
  古いシステムを使い続ける企業って多いんだなあ.

  625: デフォルトの名無しさん:2018/07/14(土) 23:07:08.10 ID:LxoRiW+E
  日本は異常なほどソフト弱すぎだわな.

  626: デフォルトの名無しさん:2018/07/15(日) 00:45:51.50 ID:LqRrN2Y+
  リダイレクト使ってバッチ内に記述したテキストをファイルに出力すると, 行数が増えるにつれて.
  どんどん処理が遅くなるんですが(多分ファイルのオープンとクローズの処理が重たい.
  んだとは思うけど), 何十行もあるテキストでも一括で書き込んで早くする方法とかないですか?
  ただ不思議なのは, ソースとなるテキストを別のテキストファイルからforで読み込みして.
  各行を逐次出力ファイルにリダイレクトで書き出した場合はそんなに遅くないんですよねぇ.

  627: デフォルトの名無しさん:2018/07/15(日) 07:47:51.60 ID:3kOM020K
  >>626
  俺はそう思ったことはないなぁ・・・具体的なコードを見せて.
  一括での書き込みは, 処理をカッコで括るとできる.
  (
  echo start
  :
  :
  echo end
  ) > test.txt

  628: 626:2018/07/15(日) 10:00:49.84 ID:LqRrN2Y+
  >>627
  コードといっても何も特別なことはしてないんだけど, 何十行というのは嘘で.
  当該箇所確認してみたら実際には何百行もありました.
  ----- sample1.bat
  echo [%time%] 開始.
  type nul > "D:\tmp\out-file.txt"
  echo hoge>> "D:\tmp\out-file.txt"
  echo hoge>> "D:\tmp\out-file.txt"
        〜延々と600行近い繰り返し〜.
  echo hoge>> "D:\tmp\out-file.txt"
  echo hoge>> "D:\tmp\out-file.txt"
  echo [%time%] 終了.
  exit /b
  -----
  これで大体3〜4秒くらい. 実際のコードは文字列も長いし,
  途中条件式が入ってたりするのでもうあと1〜2秒ほど長い.
  前の投稿で「forで回してリダイレクトした方が何故か早い」と書き込んだけど, 勘違い.
  改めて確認したらほとんど変わらなかった.

  629: 626:2018/07/15(日) 10:01:23.98 ID:LqRrN2Y+
  >>627
  ----- sample2.bat
  echo [%time%] 開始.
  type nul > "D:\tmp\out-file.txt"
  for /f "usebackq delims=" %%L in (`findstr /n .* "D:\tmp\hoge-source.txt"`)do
(
  set str_temp=%%L
  call :redirect-loop
  )
  echo [%time%] 終了.
  exit /b
  :redirect-loop
  echo %str_temp%>> "D:\tmp\out-file.txt"
  exit /b
  -----
  教えてもらった全体を()で囲ってまとめてリダイレクトしたら一瞬で処理完了しました. ありがとうございます.
  実際のコードは条件式の他に変数展開した文字列の中に()が含まれていたりするので, 要所要所で使い分けが必要そうですが.

  630: デフォルトの名無しさん:2018/07/15(日) 11:22:20.37 ID:SEkGxxwq
  へー.

  631: 627:2018/07/15(日) 12:40:32.94 ID:3kOM020K
  >>628-629
  あー, 600行もあったらファイルのオープン・クローズ処理の影響が大きくなるねぇ.
  カッコで括ると「括った内容, 1行で延々書かれたものとして処理」してくれる. 多分こういう用途のためにあるんだと思う.
  なのでカッコ内の特殊文字エスケープは通常と変わらなかったはず・・・. (確証はないけど)
  俺はヒアドキュメントっぽいことがしたい時, いちいちリダイレクトを入れるのが面倒&読みづらいこともあってこう書いてるわ.

  632: デフォルトの名無しさん:2018/07/18(水) 10:40:36.37 ID:w8OpeSfX
  >>629
  別のバッチファイルにするのは駄目なん?
  call b.bat >file
  なら()の処理とか不要では.

  633: デフォルトの名無しさん:2018/07/18(水) 21:57:41.23 ID:6GF3Pq4/
  別のバッチファイルにする必要も無いんじゃね?
  @echo off
  call :abc > d.txt
  goto :eof
  :abc
  echo xxx
  echo yyy
  echo zzz

  634: デフォルトの名無しさん:2018/07/18(水) 22:23:21.60 ID:pnNaFbbR
  それもいいんじゃない?

  635: デフォルトの名無しさん:2018/07/18(水) 22:31:48.09 ID:pnNaFbbR
  ちょっと聞きたいんだが・・・.
  for /f "tokens=1* delims=:" %%A in ('findstr /n "^"filename.txt') do echo.%%B
  これ, バッチが標準入力から受け取ったものを処理する雛形らしいんだけど・・・.
  findstr /n "^"
  これアリか?正規表現として成立してない!?何だこれ??
  findstr /n ".*"
  ならアリだしこう書くべし. 正規表現として何でもマッチする.
  なんだけど何で findstr /n "^" が通るのか分からんわ.

  636: デフォルトの名無しさん:2018/07/18(水) 22:46:17.26 ID:6GF3Pq4/
  それ, 確か : で始まる行が不味いんじゃね?

  637: デフォルトの名無しさん:2018/07/18(水) 23:08:39.37 ID:apOKL4Dj
  >>635
  findstrはあくまで検索パターンにマッチする行全体を返す.
  行頭文字があればマッチと判断するんだな, たぶん"$"でも通るんじゃね? w.

  638: デフォルトの名無しさん:2018/07/18(水) 23:17:52.69 ID:pnNaFbbR
  >>636
  https://blogs.yahoo.co.jp/kerupani/15344574.html
  が上手いことやってる. 感心した. 万能ではないらしいが検証中.
  tee が作れるかもしれん.
  >>637
  マジだった. findstrはアホの子だった.

  639: デフォルトの名無しさん:2018/07/18(水) 23:20:00.00 ID:pnNaFbbR
  あー, もっとも, find /v "" が空文字列にマッチする時点で駄目ではある.

  640: デフォルトの名無しさん:2018/07/18(水) 23:47:59.03 ID:Ppp31GO+
  このスレは勉強になる.

  641: デフォルトの名無しさん:2018/07/19(木) 00:47:19.86 ID:oVpGn6oR
  >>635
  正規表現としてじゃなくて cmd のエスケープかと.
  echo;abc | findstr /n ""
  FINDSTR: 検索文字列がありません.
  echo;abc | findstr /n "^"
  1:abc

  642: デフォルトの名無しさん:2018/07/19(木) 06:16:34.58 ID:hT+uAClu
  >>641
  ^ の左側に " があるので ^ はただの文字.

  643: デフォルトの名無しさん:2018/07/19(木) 08:15:18.80 ID:31+wDFSY
  プロセスが特定の文字列を出力したら処理を終了させたくて下記のようなの書いてみたけど思うように動かないです.
  process.exe | find "hoge"&&TASKkill /F /im process.exe
  &&で指定したコマンドは元のプロセスが終了しないと実行されないのでしょうか?

  644: デフォルトの名無しさん:2018/07/19(木) 08:26:36.29 ID:HqFtoS+0
  >>643
  多分, process.exeが終了しなくても, 標準入出力をクローズすればパイプは渡ってくるんじゃないかな?

  645: デフォルトの名無しさん:2018/07/19(木) 22:23:54.31 ID:I1yUatr2
  >>643
  リファレンス読めよ.
  &&を何かに変えれば多分動くぜ.

  646: デフォルトの名無しさん:2018/07/20(金) 01:23:20.22 ID:FDkJiEQ5
  コマンドプロンプトって, 論理和使えないんだっけな.

  647: デフォルトの名無しさん:2018/07/20(金) 02:06:59.97 ID:2iB3qPvx
  & コマンドの連結.
  && 前のコマンドの実行結果が正常(ERRORCODE=0の場合)に後ろのコマンドを実行する.
  || 前のコマンドの実行結果が失敗(ERRORCODE>0の場合)に後ろのコマンドを実行する.

  648: デフォルトの名無しさん:2018/07/20(金) 02:28:52.11 ID:2iB3qPvx
  ERRORLEVELだったよ.
  あと, 環境変数は実行前に展開されるため, 前のコマンドで設定した値を後ろのコマンドで参照すると思わぬ結果になる.
  for文での注意と同様で, 遅延環境変数を使うとかすれば大丈夫だが.
  また行を分ける場合に%errorlevel%を使うなら参照だけにすること.
  (設定すると単なる環境変数として扱われる)
  あと, そもそも前のコマンドが終了してないのにパイプにデータが渡ってくるのかも要確認.

  649: 643:2018/07/20(金) 04:26:00.68 ID:ukKUYn/2
  レスありがとうございます.
  標準入出力をクローズというのがちょっと分からないんですがどのようにすればいいのでしょうか?

  650: デフォルトの名無しさん:2018/07/20(金) 06:55:00.15 ID:gIwkChrm
  process.exe に標準入出力をクローズさせるんだよ.

  651: デフォルトの名無しさん:2018/07/22(日) 19:18:33.01 ID:WPYgWuMH
  そんなことするぐらいならvbsのExec使えばいいと思うの.

  652: デフォルトの名無しさん:2018/07/22(日) 19:49:03.97 ID:Gp0M410Q
  >>649
  >>644 >>650 の言ってることは戯言だから気にするな.
  process.exe が終了したら勝手にクローズする.

  653: デフォルトの名無しさん:2018/07/22(日) 20:27:20.33 ID:jf6K150S
  終了してから TASKkill しても見つからんエラーが出るだけで無意味.

  654: 643:2018/07/22(日) 20:27:43.37 ID:oUJ4s6M9
  リダイレクトしてテキストファイルに出力しながらstartで立ち上げた別のbatにfindして貰う事で解決しました.

  655: デフォルトの名無しさん:2018/07/22(日) 23:35:54.49 ID:FoHjHQaV
  >>652
  process.exeってのが自作の場合, そうしろってことだろ.

  656: デフォルトの名無しさん:2018/07/23(月) 17:41:55.79 ID:1W7qAEKf
  Linuxでコマンド実行した結果とWindowsでコマンド実行した結果を.
  一つのファイルに書き出したいんだけど, 改行コードが違っている.
  バッチファイルでCR LFではなくLFで出力したいなと思って.
  このコードを見つけたんだが何やってるのかさっぱりわからない.
  <NUL set /p=message が set /p=message <NUL と同じ意味で.
  「メッセージを表示してユーザーの入力内容を変数に入れるコマンド」の.
  代入先変数の省略 + 入力内容省略 = 改行なしecho
  ということはわかったんだけど, ^%LF%%LF% がなんなのか.
  なんでこれでうまく動くのかわからん.
  https://stackoverflow.com/questions/9876370/echo-line-to-a-file-on-windows-with-a-unix-linebreak
  SET LF=^
  REM important to have two blank lines after the SET command
  <NUL set /p=test line^%LF%%LF%> t.txt

  657: 656:2018/07/24(火) 01:43:43.96 ID:tpeQiESg
  違うこと調べていて, たまたま答えにぶつかったぜ. w.
  http://ken  sou1900.blog96.f  c2.com/blog-en  try-7.html

  658: デフォルトの名無しさん:2018/07/24(火) 01:44:16.69 ID:tpeQiESg
  違うこと調べていて, たまたま答えにぶつかったぜ. w.
  http://kensou1900.blog96.f  c2.com/blog-en  try-7.html
  > キャレット(^)直後の文字がLFの場合は特殊な動作になる.
  > キャレ  ット(^)の後ろにLFがある場合, そのLFは削除され,
  > 次の文字がエスケープされる. 不思議なことにキャレ    ット(^)の後ろにLFが2つ続く場合は,
  > 前のLFは消えるが, 後ろのLFは通常の文字のように扱われる.
  > この動作を使ってLFをコマンドに渡したり, 変数名や変数の値に使用することができる.
  >
  > LFがエスケープされた場合, バッチファイルの続  きを取り込まないといけなく  なる場合がある.その場合, 1.から3.が再度行われるようだ.
  set /p=test line^[LF][LF]
  これはこの部分だな.
  > 不思議なことにキャレット(^)の後ろにLFが2つ続く場合は,
  > 前のLFは消えるが, 後ろのLFは通常の文字のように扱われる.
  単なる不思議な動作か. なるほどな!
  SET LF=^
  REM important to have two blank lines after the SET command
  こっちも未だよくわからいが,
  まあこれも単なる不思議な動作だろう.
  なっとくした.

  659: デフォルトの名無しさん:2018/07/24(火) 01:45:28.43 ID:tpeQiESg
  なんでこれが書き込めないんだよ.
  fc2.com

  660: デフォルトの名無しさん:2018/07/24(火) 01:46:02.21 ID:tpeQiESg
  [上矢印]これは書き込めるのか.
  [下矢印]これはどうだ?
  a.fc2.com

  661: デフォルトの名無しさん:2018/07/24(火) 01:46:25.75 ID:tpeQiESg
  kensou1900.blg96.fc2.com

  662: デフォルトの名無しさん:2018/07/24(火) 01:46:48.81 ID:tpeQiESg
  blog96.fc2.com

  663: デフォルトの名無しさん:2018/07/24(火) 01:47:44.81 ID:tpeQiESg
  aaaablog96.fc2.com とかいう文字が書き込めないみたいだな.

  664: デフォルトの名無しさん:2018/07/24(火) 01:48:34.51 ID:tpeQiESg
  aaaablog96.fc2.com/aaa.html

  665: デフォルトの名無しさん:2018/07/24(火) 01:48:55.71 ID:tpeQiESg
  よくわからん.
  aaaablog96.fc2.com/blog.html

  666: デフォルトの名無しさん:2018/07/24(火) 01:49:23.86 ID:tpeQiESg
  よくわからん.
  aaaa.blog.fc2.com/blog.html

  667: デフォルトの名無しさん:2018/07/24(火) 01:50:02.74 ID:tpeQiESg
  面倒くさいから今度からURLは全部短縮URLを使おう.

  668: デフォルトの名無しさん:2018/07/24(火) 02:13:31.40 ID:JJ11wMVF
  改行は[LF]じゃなくて[CR][LF]だと思うんだが, どうなんだろう?

  669: デフォルトの名無しさん:2018/07/24(火) 04:54:02.60 ID:tpeQiESg
  Windowsの改行コードは[CR][LF]だよ.
  だけど, 処理の一部として, Linux側にコマンドを投げ.
  その出力をログファイルに書き込むんだよ.
  Linuxの改行コードは[LF]
  その同じログファイルにWindowsからも書き込むんだよ.
  こっちは当然[CR][LF]
  まざるとうざくなるので, どちらかに統一したかったんだよ.

  670: デフォルトの名無しさん:2018/07/24(火) 06:25:50.86 ID:c84rNbv+
  どうでもいいが投稿練習は他でやれ.

  671: デフォルトの名無しさん:2018/07/24(火) 12:14:08.82 ID:HxFyIf/c
  Winでもコンソールは何故かLFだよ.
  混同すんなよ.

  672: デフォルトの名無しさん:2018/07/24(火) 14:01:42.76 ID:tpeQiESg
  >>671
  コンソールがLFって意味わからん.
  改行コードをどう出力するかはコマンド次第だろ.
  Windowsはデフォルトの改行コードがCR LFだってだけ.
  それに従わないプログラムもあるよ.
  (例 nkf は出力改行コードを変更できる)

  673: デフォルトの名無しさん:2018/07/24(火) 18:49:48.84 ID:bSDo/9Xp
  PSでもcmdでもいいんだけど一行で文字列+連番を出力できない?
  echo aaa + (1..10)
  とかやると別々に出ちゃう.

  674: デフォルトの名無しさん:2018/07/24(火) 18:57:15.74 ID:g/ZYUHlh
  >>673
  for /L %%i in (1, 1, 10) do echo aaa %%i

  675: デフォルトの名無しさん:2018/07/24(火) 19:19:46.86 ID:g/ZYUHlh
  連番の意味を履き違えていたかもしれない.

  676: デフォルトの名無しさん:2018/07/24(火) 23:16:42.86 ID:MWPxR8WZ
  >>673
  いまいちよくわからんけど abc1 abc2 abc3 abc4 ・・・ って言うのが欲しいの?PS なら.
  [String]::Join(' ', (1..10 | %{ "abc$_" } ))
  でいける.

  677: デフォルトの名無しさん:2018/07/24(火) 23:54:21.38 ID:bSDo/9Xp
  >>674
  ありがとう, でもエラーでうまく動かなかった.
  >>676
  完璧です.
  助かりました.

  678: デフォルトの名無しさん:2018/07/26(木) 13:37:52.34 ID:wiek7dkQ
  >>671
  CRTがテキストモードの時にはCRを足してくれてるんだよ?

  679: デフォルトの名無しさん:2018/07/26(木) 18:09:38.18 ID:B1r9j6T7
  改行コードはコマンドに依存する.
  dir /? > d.txt
  sort /? > s.txt

  680: デフォルトの名無しさん:2018/07/29(日) 20:28:04.05 ID:AzlFD5Cm
  質問です.
  ファイルをbatファイルにドラッグアンドドロップしてファイル名等を得たいのですが.
  2番目のドライブ名+パス名(ファイル名以外)が表示されません  (%~dpと表示される)
  どう記述すればいいのでしょうか.
  もう2時間悩んでおります.
  echo off
  for %%f in (%*) do (
  echo %%f
  echo %%~dp
  echo %%~nf
  pause
  )

  681: デフォルトの名無しさん:2018/07/29(日) 20:35:34.14 ID:u49zNrL5
  >>680
  %%~dpf
  だろ.

  682: デフォルトの名無しさん:2018/07/29(日) 20:36:23.74 ID:2kcGqgTd
  doの後のカッコ使うな.

  683: デフォルトの名無しさん:2018/07/29(日) 23:23:01.82 ID:AzlFD5Cm
  >>681
  ありがとうございます.
  それも試したと思っていたけどそうでなかったようですね.
  >>682
  多くのサンプルではサブルーチンをつかっているようですが.
  カッコを使うとバグの原因になりやすいとかそんな理由なのでしょうか.

  684: デフォルトの名無しさん:2018/07/31(火) 00:35:30.31 ID:eJ/lX+1f
  >>683
  %%~dp -> %%~df%%~pf
  callを使い %1などを使えるようにするため.
  昔は%~n1 など数字でないと動作無保証だった.

  685: デフォルトの名無しさん:2018/07/31(火) 04:53:16.45 ID:vnodIDx/
  Win10のコマンドプロンプト画面では改行と折り返しを区別してコピーできるようになったね. これすごく便利.
  他に改善点とかあるのかな?

  686: デフォルトの名無しさん:2018/07/31(火) 05:31:48.07 ID:R/dSWHzC
  コピペでCtrl+C, Ctrl+Vも使える.
  Alt+Enterで最大化.
  ウィンドウスナップ.
  など. 詳しくは.
  https://japan.zdnet.com/article/35069776/

  687: デフォルトの名無しさん:2018/08/03(金) 10:35:50.90 ID:w2m/pEoW
  windows板のスレに書いてしまったので詳細はそちらを参照して頂きたいのですが.
  https://mevius.5ch.net/test/read.cgi/win/1381119881/327
  この件について詳細をご存知の方あるいは解説されているサイトをご存知の方は.
  ご教示頂けないでしょうか?

  688: デフォルトの名無しさん:2018/08/03(金) 12:24:06.93 ID:r+5aCgkd
  再現しない. よくソース見直してみて.
  おそらく単に遅延変数展開だけの問題に見える.

  689: 687:2018/08/04(土) 01:49:02.03 ID:z4XK4aXP
  プログラムを問題の箇所だけ抜き出して実行しても同じ結果になります.
  xxxを未定義状態にしてから%xxx%を引数にして実行するとやはり.
  「echo %aaa%|more」の結果がyyyと表示されます.
  当方の環境はWindows7 SP1です.
  これはこう動作するように作られた仕様なのかそれともあてにならない不思議動作なのか.
  cmdのバグなのか判断したいです.

  690: デフォルトの名無しさん:2018/08/04(土) 03:29:11.21 ID:XmDLxyoB
  ん?せやで?Windows 7はデフォルトの設定が違うんやで.
  しらんかったんか?cmd /?とかしてみな.

  691: 687:2018/08/04(土) 05:41:55.21 ID:z4XK4aXP
  cmd /? にも setlocal /? にも echo /? にも.
  echoとパイプ併用時の環境変数の二重展開について記述は無いようです.

  692: デフォルトの名無しさん:2018/08/04(土) 07:14:19.75 ID:ZE1/UEds
  ありまぁ〜す.

  693: 687:2018/08/04(土) 07:43:36.85 ID:z4XK4aXP
  別のものを見ているのかもしれません.
  そちらには何と書いてありますか?

  694: デフォルトの名無しさん:2018/08/04(土) 07:51:40.55 ID:HzKYXCJW
  パイプってCall文でサブルーチン処理してるような物だし, call文と同じ展開をすると思っとけばいいんじゃね?

  695: 687:2018/08/04(土) 09:07:28.54 ID:z4XK4aXP
  なるほど.
  では逆にあえて二重展開したい場合はcallを使ったほうが無難でしょうか?

  696: デフォルトの名無しさん:2018/08/04(土) 11:22:09.92 ID:HzKYXCJW
  call文で変数内変数が1ネスト展開されるのはパイプよりは有名だと思う.

  697: デフォルトの名無しさん:2018/08/04(土) 11:35:44.15 ID:1BI89n66
  一番知られて無いのが, for /f文の('コマンド')が同じく二重展開されるってのかな.

  698: デフォルトの名無しさん:2018/08/04(土) 11:40:02.48 ID:1BI89n66
  いや本当は, コマンドの中で^を付けてエスケープしないといけない場合があることは.
  結構知られているんだけど, それが二重展開のせいだってことが認識されてないわけで.

  699: デフォルトの名無しさん:2018/08/04(土) 12:17:58.67 ID:hhRJxbHb
  >>687
  >>448

  700: 687:2018/08/05(日) 05:37:23.17 ID:DoWKU022
  理解できました.
  みなさんありがとうございました.

  701: デフォルトの名無しさん:2018/08/06(月) 20:49:35.73 ID:9+kXWEFM
  echo は結構罠.
  if "%errlorleverl%" ... も罠.
  はやくバッチから救われたい・・・.

  702: デフォルトの名無しさん:2018/08/11(土) 19:21:13.27 ID:vbsvSkjm
  何が罠なのかわからん.

  703: デフォルトの名無しさん:2018/08/11(土) 20:56:08.62 ID:WNr/dTgn
  つづりを覚えられない奴には罠なんだろ. w.

  704: デフォルトの名無しさん:2018/08/11(土) 21:47:36.56 ID:HlmNsX8I
  こういうことじゃないかな?
  set ERRORLEVEL=0
  hogecommand
  if %ERRORLEVEL% gtr 0 goto :ERROR
  これが絶対真にならず, ジャンプしないとか.

  705: デフォルトの名無しさん:2018/08/12(日) 03:12:06.01 ID:lJZ67VC6
  エラーは1以上とはかぎらないんだよな, コマンドによっては.

  706: デフォルトの名無しさん:2018/08/12(日) 09:09:39.33 ID:pT5cyKVs
  >>703
  echo hoge > test.txt
  て書くと「hoge」の後の半角空白までがtest.txtに出力されるんだよ.
  >>704
  代入しなくても, errorlevel を環境変数として判定に使うと正常に動かない場合がある.
  具体的には.
  echo n | comp A.exe B.exe >NUL 2>&1
  if not "%ERRORLEVEL%"="0" (
  :
  このとき, 何故か%ERRORLEVEL% は常に「0」. バイナリ不一致でも「0」.
  echo n | comp A.exe B.exe >NUL 2>&1
  if not errorlevel 1 (
  :
  だと正常に動く. 何故だか分からない.

  707: デフォルトの名無しさん:2018/08/12(日) 09:13:22.78 ID:pT5cyKVs
  >>706 にちょっと間違い.
  o if "%ERRORLEVEL%"="0" (
  x if not "%ERRORLEVEL%"="0" (

  708: デフォルトの名無しさん:2018/08/12(日) 09:20:16.40 ID:yoDY/qSn
  if の比較は = じゃなくて == だろ.

  709: デフォルトの名無しさん:2018/08/12(日) 09:40:11.52 ID:pT5cyKVs
  >>708
  悪い. typo.
  o if "%ERRORLEVEL%"=="0" (

  710: デフォルトの名無しさん:2018/08/12(日) 11:52:31.87 ID:eNrGPpfD
  何故か以前にいろいろ間違いすぎなんだよ.
  ゼロから書き直せ.

  711: デフォルトの名無しさん:2018/08/12(日) 14:40:43.26 ID:IZr1Emsm
  >>710
  > ゼロから書き直せ.
  こんな感じっすかー?
  0" ([HOME]if "%ERRORLEVEL%"=="

  712: デフォルトの名無しさん:2018/08/12(日) 16:49:52.15 ID:dh6WaJfS
  >>704>>706
  ERRORLEVELは代入すると返却値として使えなくなるんじゃ.
  なかったっけ?
  だからやるならば.
    set ERRORLEVEL=
  だけにしないとだめなのでは.
  ただ, これをやってバッチ内でERRORLEVEL環境変数の.
  初期化みたいなことしてもうまく動かないこともあったような.
  気がするけど何か勘違いしてるんだろうな.

  713: デフォルトの名無しさん:2018/08/12(日) 18:02:08.07 ID:aLWFoJnR
  >>706
  パイプの動作が原因だろう.
  パイプの右側は子タスクでの実行となる(おそらくは)
  メインタスクに環境を引き継がないんだと思う.
  echo "a"|for /f %%i in ('find "a"') do set x=OK
  echo.%x%
  これで%x%には値が入らない.
  echo "a"|find "a"&set x=OK
  なら%x%にはOKが入るが.
  echo "a"|(find "a"&set x=OK)
  では%x%にはOKが入らない.

  714: デフォルトの名無しさん:2018/08/12(日) 18:09:31.24 ID:aLWFoJnR
  >>713
  下2つ&は&&の間違いだが, 別に&だろうが&&だろうが(この場合の)結果は変わらない.

  715: デフォルトの名無しさん:2018/08/12(日) 18:16:28.72 ID:lJZ67VC6
  パイプはcallと一緒だなやはり.

  716: デフォルトの名無しさん:2018/08/12(日) 18:36:12.51 ID:lJZ67VC6
  setコマンドの長いヘルプの下の方に.
  「ユーザーがこれらの名前の変数を明示的に定義する場合,
  その定義は下記の動的な定義を無効にします. 」
  と書かれてる. errorlevelをsetするのは回避した方がいいだろう.

  717: デフォルトの名無しさん:2018/08/12(日) 18:40:34.53 ID:aLWFoJnR
  ついでに言っとくと.
  パイプはデータの受け手が子タスクになったけど.
  for /fの'コマンド'は送り手が子タスクになる.
  従って, 'コマンド'の中で環境変数に値を入れても, メインタスクには引き継がれない.

  718: デフォルトの名無しさん:2018/08/12(日) 21:23:34.47 ID:pT5cyKVs
  >>710
  難癖付けてばかりで話題提供もできない人はゼロから人生をやり直した方が(ry

  719: デフォルトの名無しさん:2018/08/12(日) 21:38:30.71 ID:pT5cyKVs
  >>713
  んー, 俺はもうそこまで調べる気もなくてね・・・ほぼ諦めてる.
  子タスクとかどこの文献見ればあるんだろう?
  あってもなくても, んなテクニック, 引継ぎできる代物でもあるまい・・・.
  例えば,
  type data.txt | cscript //nologo hoge.vbs
  if not errorlevel 1 (
  :
  これも実は・・・駄目なのだ!!
  VBScript側で Call WScript.Quit(1)
  で抜けられれば引っかかるが・・・.
  想定外の変なデータを食わされてランタイムエラーで落ちた場合には引っかからない.
  cscript はスクリプトエンジンだから別物扱いしとこ・・・てなところで.
  hoge.vbs が正常終了する直前に success.txt を空で作るようにしといて.
  del success.txt
  type data.txt | cscript //nologo hoge.vbs
  if exist success.txt (
  :
  )
  del success.txt
  こんな感じにするしかなかったし, これならせめて引継ぎができると思う.

  720: デフォルトの名無しさん:2018/08/12(日) 21:45:20.77 ID:pT5cyKVs
  あ, ごめん.
  if not errorlevel 1 (
  正常終了処理.
  ) else (
  異常終了処理.
  )
  て書くべきだった.

  721: デフォルトの名無しさん:2018/08/13(月) 00:05:28.17 ID:MtAcIApx
  勉強になる話題だけど, バッチファイルは言語仕様の規模に比して闇が深すぎると思う.

  722: デフォルトの名無しさん:2018/08/13(月) 00:46:15.48 ID:bTGAGeMt
  >>721
  そだね.
  だんだんとwslの利用者が増えていくのだろうな.

  723: デフォルトの名無しさん:2018/08/13(月) 03:10:07.37 ID:EnLsbSTB
  >>719
  子タスクと言ったのは俺の推測(想像)でしかないから.
  データの受け渡しを行うのには, 送り手と受け手の両者が存在しないと変だろうってことからね.
  あと, タスクというのも, 適当な概念だから.
  親の環境を引き継いで生成された子環境のことね.
  実体はスレッドだろうと想像するけど.

  724: デフォルトの名無しさん:2018/08/13(月) 10:15:08.27 ID:aFOAPcea
  >>703
  綴りといえばenabledelayedexpantionも罠レベルだよ・・・誰だこれ考えたの.

  725: デフォルトの名無しさん:2018/08/13(月) 10:38:49.38 ID:WsZfoIsu
  なるほど引っかかってる.

  726: デフォルトの名無しさん:2018/08/15(水) 02:41:45.12 ID:xax+OHuY
  元の英語がわかれば.
  enable delayed expansion
  を繋げただけなんだよ.

  727: デフォルトの名無しさん:2018/08/15(水) 13:28:33.22 ID:j7d0pce0
  質問させてください.
  Linuxでいうところの, /dev/nullで標準入力待ちを終了させるのはどうすればいいのでしょうか.
  具体的には, Windows向けのopensslコマンドを実行しています.
  openssl s_client -connect 〜とやると標準出力が一通り出たところで入力待ちになる仕様で,
  コマンドプロンプト上だとCtrl+Cで止めてあげる必要があります.
  Linuxだと, 末尾に< /dev/nullで終わらせられるのですが, Windowsバッチで同じように終了させる方法は無いでしょうか.

  728: デフォルトの名無しさん:2018/08/15(水) 13:50:50.34 ID:o8lgioa7
  < nul
  じゃダメなの?

  729: デフォルトの名無しさん:2018/08/15(水) 13:54:24.10 ID:j7d0pce0
  >>728
  書いてなくてすみません. それだとダメでした.

  730: デフォルトの名無しさん:2018/08/15(水) 14:06:33.66 ID:o8lgioa7
  できるはずなんだけど・・・.
  https://qiita.com/nightyknite/items/c4765697602eab1fb205

  731: デフォルトの名無しさん:2018/08/15(水) 14:36:26.98 ID:j7d0pce0
  >>730
  参考サイトありがとうございます.
  先ほど教えていただいたのと同じ< nulですよね.
  サンプルコマンドの通り打ってみても入力待ちで止まります・・・.
  念のためOpenSSLを入れ直しても変わりませんでした.
  サンプルでパイプで渡してる直前まで( < nul 2> nul)で試すと,
  実行結果がダーっと出て, 入力待ちで止まるんですよね・・・.

  732: デフォルトの名無しさん:2018/08/15(水) 15:17:17.37 ID:j7d0pce0
  下のサイトのやり方も参考にしつつやってみましたが, どれも結果は変わらずでした.
  後出しですみませんが, 当方の環境はWin10 Pro 1803, opensslは1.0.2m.1.0.2oでやってました.
  https://stackoverflow.com/questions/25760596/how-to-terminate-openssl-s-client-after-connection
  回答くださった方, ありがとうございました.
  もしやってみて, 何言ってんだ, できたぞ?という方いらっしゃいましたら教えていただければ幸いです.

  733: デフォルトの名無しさん:2018/08/15(水) 15:19:22.69 ID:xax+OHuY
  制御文字を入力できるエディタ(サクラエディタ等)で.
  バッチを開いて.
  nulの代りに[0x03]か0x04の制御コード入れてみては?

  734: デフォルトの名無しさん:2018/08/15(水) 15:25:45.29 ID:jNJ7KLOy
  >>732
  普段OpenSSLは使わないけどたまたまインストールしてあったOpenSSL 1.1.0hで出来たよ.
  コマンドはこう.
  openssl s_client -connect example.com:443 < nul 2> nul | opensslx509 -text |
  findstr Not

  735: デフォルトの名無しさん:2018/08/15(水) 15:59:22.79 ID:j7d0pce0
  >>734
  試していただいてありがとうございます.
  そのコマンドを実行したときなのですが, コンソールが返ってくるまで1分ほどかかりませんか? すぐ返りますか?
  < nulの有無に関わらず1分ほど待つので, 単にタイムアウトか何かで終了しているのかなと思っております.
  nulを入力として受け取っているなら, すぐに1個目のパイプより前のコマンドは終わるはずだと思いまして・・・.

  736: デフォルトの名無しさん:2018/08/15(水) 16:01:57.88 ID:jNJ7KLOy
  >>735
  すぐ返ってくるよ.

  737: デフォルトの名無しさん:2018/08/15(水) 16:09:56.08 ID:j7d0pce0
  >>736
  ありがとうございます.
  ということは>>728さんと同じ書き方でちゃんとできて,
  私の環境起因で何かがおかしいってことですね・・・.
  他のパソコン出してきて試してみようと思います.
  >>733さんもありがとうございます.
  まずはバッチ化する前にプロンプト上で試している段階で躓いてました.

  738: 733:2018/08/15(水) 16:14:15.33 ID:xax+OHuY
  >>733
  1)コマンドプロンプトで下記のように入力し, hoge.txtを作る.
  copy con hoge.txt[Enter]
  [Ctrl+d]
  [Ctrl+z]
  2)バッチの方で.
  <hoge.txt
  とすればコンソールでCtrl+Dを入力したのと同じ効果となるはず.

  739: デフォルトの名無しさん:2018/08/15(水) 16:47:26.04 ID:j7d0pce0
  >>737です.
  あの後うまくいきました!アドバイスありがとうございました!
  Windows向けに提供されている最新のインストーラを色々試したのですが,
  openssl 1.0.2pだとダメ, 1.1.0iだと< nulが効きました.
  32bit向け, 64bit向けのインストーラのどれでも同じ結果でした.
  私の試してたのが1.0.2系だけで, >>734さんは1.1.0hで成功してるので,
  1.0.2系だとダメなのかもしれません・・・.
  < nulはきっと汎用的なものなので, そんなわけはないと思いたいのですが・・・.
  長々とありがとうございました, 大変助かりました.

  740: デフォルトの名無しさん:2018/08/15(水) 21:05:55.42 ID:cg3gjcxB
  悪いけど, Windowsバッチに鉄板を求めるのも, 追いかけるのも無駄.
  歴史的経緯でそうなってしまっている. マトモな資料なんかありゃない.
  NULの解釈がコマンドによって違ったって全く不思議じゃあない.
  犬のクソをクソだと知りつつカリントウだと思いながら食わなければならないような, そんな代物.
  好きで書いてる奴なんかほとんどいないと思う.
  バッチで書いた方が良いと判断できる材料がなければVBscriptやPowerShellで書いた方が遥かにいい.
  環境が許せば他の言語の導入を検討するのも大いにいい.
  よく知られたコマンドをよく知られたイディオム下で使うのでもなければ, バッチでなんか書かない方がいい.
  それでもクソみたいにハマることがあるんだから.

  741: デフォルトの名無しさん:2018/08/15(水) 21:14:01.94 ID:OWPSpuGG
  UNCパスを一向に解釈しないのがとにかく糞だと思う.

  742: デフォルトの名無しさん:2018/08/15(水) 21:52:07.27 ID:X+03HcfZ
  移動はできないけど解釈はできるでしょ・・・.

  743: 740:2018/08/15(水) 21:52:48.84 ID:X+03HcfZ
  xcopy のヘルプは酷い.
  Vistaでは「推奨されない. 使わないで. robocopyを使って」みたいな文言が出てきた. 理由は記述なし.
  この文言, 7以降では消えた.
  ネットワーク越しにxcopy中に通信が切れたらどうなるか, MSは知ってたはずなんだが.
  xcopyを使いまくってるクソベンダーどもから「直しきれない. フザけんな!」とでも突き上げを食らったんだろうか?
  こういうところも本当に信用できない.

  744: 740:2018/08/15(水) 21:58:51.70 ID:X+03HcfZ
  >>741
  cmd「あ, pushdとかでヨロ」
  ネットワーク系で言えばpingが酷い.
  if errorlevel そのものが効かない. エラーしたらズルズルっと抜ける.
  あ, 某SIer(富*通)のバッチを思い出した.
  pingでTCPの疎通確認?エラー処理なし?
  バッチとか以前の問題だった.
  富*通は日本から消え去ればいいと思った.

  745: 740:2018/08/15(水) 22:00:15.25 ID:X+03HcfZ
  おいおい, さっきからレスに「ドット・エグゼ」を半角英数で書くと弾かれるようになってるぜ・・・.
  なんだいこりゃ.

  746: デフォルトの名無しさん:2018/08/16(木) 00:37:28.93 ID:fpSDK1Rz
  標準入力から読むんじゃなければ <nul なんか無意味だろうに...

  747: デフォルトの名無しさん:2018/08/16(木) 00:47:34.46 ID:nXvfu44n
  pingは標準エラー出力の文言で処理するのが慣例だろ...

  748: デフォルトの名無しさん:2018/08/16(木) 04:14:43.69 ID:W93QKVeg
  エロ動画.avi                                .exe

  749: デフォルトの名無しさん:2018/08/16(木) 06:00:01.74 ID:3IMawj9A
  すみません, CMDを最近やり始めたのですが.
  ネットで検索すると%Aと%%Aのように「%」が1つ付く場合と2つ付く場合があったのですが.
  どういう違いがあるのでしょうか?

  750: デフォルトの名無しさん:2018/08/16(木) 06:18:11.25 ID:nXvfu44n
  >>749
  %Aはfor文内でのみつかう変数. for文をコマンドラインから直接実行する場合は%A
  バッチスクリプト内で記述する場合は%%Aとする.
  for /? (またはhelp for)
  で表示されるヘルプの上の方に書かれている.

  751: デフォルトの名無しさん:2018/08/16(木) 11:22:52.16 ID:hWBtBIZ+
  batファイルで任意のプログラムを実行し, 一定時間後に強制終了させる(画面を閉じる)という処理は実現可能ですか?
  任意のプログラムも同じDOS画面上で走ります.
  タイマーでtaskkillを実行してcmdを終了させるというのを考えたんですが, cmdが複数あると使えないので他に方法があれば知りたいです.

  752: デフォルトの名無しさん:2018/08/16(木) 15:41:05.25 ID:KoNkkRtT
  >>751
  START "test001" cmd /c test.bat
  TASKKILL /FI "WINDOWTITLE eq test001"

  753: デフォルトの名無しさん:2018/08/16(木) 19:34:15.23 ID:hWBtBIZ+
  >>752
  ありがとうございます!

  754: デフォルトの名無しさん:2018/08/16(木) 20:50:06.40 ID:qKowi4/2
  >>747
  否.
  pingはICMP. pingが通ってもTCPが通るという保証は無い.
  逆に, pingは返さないがTCPが通る環境だってある.
  ただでさえpingコマンドの動きはおかしいのに, pingでTCP疎通確認しました!というのが大手SIer(富*通とか)が首を釣るべきポイント.
  ダミーの共有フォルダを用意して.
  dir \\hoge.local\hoge
  とかでSMBを経由したTCPの疎通が確認できるんだぜ??
  頭が悪いとしか言いようがない.
  もう一度言う.
  pingではTCPの疎通は「絶対に確認できない」

  755: デフォルトの名無しさん:2018/08/16(木) 20:52:58.55 ID:qKowi4/2
  言っとくけど, LinuxのpingでもTCPの疎通は確認できないからな. 分かってると思うけど.

  756: デフォルトの名無しさん:2018/08/16(木) 21:07:41.39 ID:t6OwQxX1
  >>754
  そんなこと言い出したら特定のホストや特定のポートだけは通さないとかあるからモノホンの通信でないと確認なんて取れんわ.
  富*通から何されたのか知らんけど富*通に同情するレベルのバカ.

  757: デフォルトの名無しさん:2018/08/16(木) 21:10:18.18 ID:nXvfu44n
  プロトコルが別物というのはその通りだな,
  コマンドプロンプトでのエラーハンドリングの話かと思ったわ(分かっちゃいるとは思うが)

  758: デフォルトの名無しさん:2018/08/16(木) 22:17:08.25 ID:fpSDK1Rz
  >>754
  わなくらい以降, SMBを通すようなネットワーク組むような業者はやばいだろ.

  759: デフォルトの名無しさん:2018/08/16(木) 22:22:12.09 ID:3IMawj9A
  >>750
  ありがとうございます!理解しました.

  760: デフォルトの名無しさん:2018/08/16(木) 22:30:01.84 ID:3IMawj9A
  このスレは1年半前に立ってまだ760レスぐらいですが.
  ここ1ヶ月半で見ると200レスぐらい書き込みがあるので.
  CMDの人気が出てきたということでよいのでしょうか?

  761: デフォルトの名無しさん:2018/08/16(木) 22:36:21.06 ID:qKowi4/2
  >>756
  富*通のシステムのサーバーがシステムの動作に必要なファイルを共有フォルダで端末に公開してたからだよ.
  「何でこうしないの?」だよ. アホか.
  >>758
  そこまで知らねーな.
  SMBoverTCPを止めてWindowsの共有フォルダが機能しなくなるかどうかのテストまでしたことはない.
  止まるらしいけどバッチの範囲内じゃなくなるからこの話はもうしない.

  762: デフォルトの名無しさん:2018/08/16(木) 22:51:43.40 ID:t6OwQxX1
  >>761
  > 富*通のシステムのサーバーがシステムの動作に必要なファイルを共有フォルダで端末に公開してたからだよ.
  > 「何でこうしないの?」だよ. アホか.
  全然違う話ししだして笑う.

  763: デフォルトの名無しさん:2018/08/16(木) 23:03:11.26 ID:qKowi4/2
  >>762
  1. 富*通のシステムは, 端末の起動時にサーバーにTCPの疎通確認をする. それがただpingを打つ「だけ」. 通ろうが通るまいが処理を続行.意味がない.
  2. 俺はこう思った. 「端末が見に行く共有フォルダをdirしてエラー検出した方が確実でしょ?何でこうしないの?」
  て言わなきゃ分からないアレですか?

  764: デフォルトの名無しさん:2018/08/16(木) 23:07:16.23 ID:m8VsM5un
  つまりイントラネットなわけね.
  ならpingが通れば回線チェックできるとしても問題なかろう.
  鯖がpingを許可してるシステムだろうし.

  765: デフォルトの名無しさん:2018/08/16(木) 23:19:02.45 ID:qKowi4/2
  >>764
  おい.
  十歩くらいは譲ってやる.
  だがお前は馬鹿.
  問題.
  Windowsサーバーはネットワークの場所の検出に失敗することがあります.
  パブリックと勘違いしたらpingを返さないことがあります.
  さて, 検出に失敗する場合はどのような場合でしょうか?
  答えではないが発生例.
  富*通に渡された手順通りにサーバーを再起動したらそうなった.
  > ならpingが通れば回線チェックできるとしても問題なかろう.
  pingの結果だけを信用したら駄目なんだよクソが!!
  どんだけレベル低いんだお前??
  ・・・ああもう呆れる・・・.

  766: デフォルトの名無しさん:2018/08/16(木) 23:23:10.64 ID:qKowi4/2
  んー, バッチだけじゃなくてWinの挙動も関係すんなぁ・・・ネットワーク系は.
  まあいい, また今度な.

  767: デフォルトの名無しさん:2018/08/16(木) 23:27:50.00 ID:qKowi4/2
  あ, 答えはTechNetとかに載ってるから興味ある人はてきとーに調べといて.
  英語だけど.

  768: デフォルトの名無しさん:2018/08/16(木) 23:59:08.11 ID:fpSDK1Rz
  >>765
  パブリックと勘違いしてるなら, それはpingでも検出できるじゃん.

  769: デフォルトの名無しさん:2018/08/17(金) 01:30:25.51 ID:a2i7eL0Z
  絶対に正しい自分の主張を認めてもらいたいだけの人なんだから相手しても意味ないでしょ.

  770: デフォルトの名無しさん:2018/08/17(金) 02:44:03.57 ID:jfy/CF71
  昔はpingを使っていたが, 今は.
  set errorlevel=
  arp -a|findstr 192.168.0. >nul
  if not %ERRORLEVEL% == 0 goto オフライン処理.

  771: デフォルトの名無しさん:2018/08/17(金) 05:25:51.61 ID:KaaDwp63
  >>763
  本当に頭悪いんだな. w.
  いきなりdir \\hoge.local\hogeが失敗しただけだと何が起きてるのかわからん.
  pingが通ってるかどうかで障害の範囲がある程度絞れる.
  ちょっとしたシステムだとネットワークとサーバーで違うベンダーが構築してるとかあるからどっちを呼び出すかの切り分けに使ったりする.

  772: デフォルトの名無しさん:2018/08/17(金) 06:18:35.06 ID:+gK4oX51
  ping ホスト名.
  で打ってるならその端末がWINS名前解決出来てるかは分かる.
  でも「TCP疎通」ってタームはたしかに違和感ある. 某省庁案件で富士通のインフラ部隊と仕事したが, そんなターム使って無かったけどな...

  773: デフォルトの名無しさん:2018/08/17(金) 07:30:14.12 ID:J26jcjpU
  ネットワーク=TCPみたいに言ってる奴は見たことあるな.
  たいてい文脈でわかるからいちいち指摘なんてしないけどね.

  774: デフォルトの名無しさん:2018/08/18(土) 21:40:50.22 ID:/0AtM/3Y
  ただの記号ですら言い方は人それぞれだからなあ.
  ピリオド            :  ドット,ポチ, ポツ.
  アスタリスク      :  アスター, コメ, ピカ.
  アンダースコア  :  アンダーバー, アンスコ.

  775: デフォルトの名無しさん:2018/08/18(土) 22:00:05.69 ID:/4eOy7p1
  アンスコは言いにくい.

  776: デフォルトの名無しさん:2018/08/19(日) 08:47:38.57 ID:DFKp/EIO
  一番言いやすいだろ.

  777: デフォルトの名無しさん:2018/08/19(日) 10:20:25.64 ID:vvrGLkFs
  777

  778: デフォルトの名無しさん:2018/08/19(日) 20:48:42.50 ID:10g4+5oK
  >>768
  パブリックと誤検出した場合, 当たり前だけどpingは返さない.
  ドメインコントローラーが勘違いした場合, 端末も勘違いすることがある.
  クソな再起動手順がもたらす問題を回避するために・・・「全プロファイルでファイァーウォール停止」を要求されたらそりゃたまらんわ.
  正しい再起動手順でやれば, そんな事態は一切おこらないってのにさ.
  >>771
  おまい, スレ違い.
  ここはバッチスクリプトスレ.
  過不足ない通信が可能かどうかを調べるバッチなりなんなりを使うのが主題.
  実際にエラーが出て連絡を受けた人間が調査の手始めにpingを打つことは普通にある.
  >>772
  ???WINS名前解決???
  何世紀の人????
  「少なくとも, 相手がTCPを使ったサービスを実行できる状態にある」の言いに使ってるけどね. 間違いじゃないだろ.
  本当に相手のサービスそのものがダウンしているかどうかにはtelnetを使ったりするし. MS純正じゃないのも含めて.
  でもまぁここはバッチスクリプトのスレなので, pingが通った=TCPもイケる, は間違いなのは別で調べて頂戴.
  >>770
  arp -a って・・・ギャグのつもりなのか?笑えない.

  779: デフォルトの名無しさん:2018/08/19(日) 21:11:07.45 ID:t1KS71KR
  頓珍漢な粘着男乙.

  780: デフォルトの名無しさん:2018/08/19(日) 23:03:31.03 ID:LYxx7csc
  pingが通る=回線が正常に繋がっている(途中で断線してない)
  だろ.

  781: デフォルトの名無しさん:2018/08/19(日) 23:06:16.33 ID:LYxx7csc
  ところでSMBはWINS使ったっけ?
  NBT(NetBIOS over TCP)じゃなかったっけ.

  782: デフォルトの名無しさん:2018/08/19(日) 23:30:42.84 ID:P2diSE/Q
  はなし逸れるが, 今の現場は大手の保険会社なのに10BASE-Tとかで驚くわ.
  20年間変わってないのかコレ?
  まあ俺はしがない派遣IT土方だが.

  783: デフォルトの名無しさん:2018/08/20(月) 01:33:20.51 ID:6ECfAniW
  スレタイ読めるか?

  784: デフォルトの名無しさん:2018/08/20(月) 01:43:26.60 ID:r/LoJW6u
  読めないから派遣なんだろ.

  785: デフォルトの名無しさん:2018/08/20(月) 01:52:55.69 ID:tHLrzyTk
  >>782
  そんなもんだよ.
  不都合が生じないと変えないのと普通.

  786: デフォルトの名無しさん:2018/08/20(月) 06:28:09.44 ID:iMQAgpc+
  >>781
  WINS と NBT はレイヤー違うぞ.

  787: デフォルトの名無しさん:2018/08/21(火) 09:38:25.46 ID:OVCCyiik
  if スクリーンセーバーが起動されていなかったら.
  if 各種省電力モードになっていなかったら.
  if モニタの電源が消されていなかったら.
  if モニタの前に人が座っていたら.
  できる範囲でいいのでこれらの判定方法を教えてください.

  788: デフォルトの名無しさん:2018/08/21(火) 12:42:43.53 ID:tF5C/oBj
  pauseすれば人が見てるかどうかは判定できるが,
  立っててもいいから駄目だなあ.

  789: デフォルトの名無しさん:2018/08/21(火) 12:45:10.41 ID:QEEd6INS
  モニター叩き割ると多分全部常にfalseになるから解決できると思う.

  790: デフォルトの名無しさん:2018/08/21(火) 20:46:58.06 ID:voBQjli5
  ぐぐると全部答え出てくるな.

  791: デフォルトの名無しさん:2018/08/24(金) 19:24:58.18 ID:PvZ4HV2M
  findstr はアホの子と言ってすみませんでした.
  「^」や「$」は位置にマッチするメタ文字でした.
  お詫びと訂正を申し上げます.
  別件で, find /v "" が空文字列にマッチする件は納得いかないため調査中です.

  792: デフォルトの名無しさん:2018/08/24(金) 20:28:21.96 ID:HeVrgcXD
  findstrは対象文字コードの異なる場合のテキスト検索が難しい.
  chcpして, バッチ自体の文字コードも合わせても, リテラルの検索パターン指定だとダメ.
  そんな場合はpowershell Select-String
  でやると良い.

  793: デフォルトの名無しさん:2018/08/25(土) 11:04:29.30 ID:55pEzwdh
  バッチファイルで上の階層に移動し.
  そのカレントディレクトリを変数に格納したいんです.
  現在の記述.
  cd ../
  set PARENT_DIR=%CD%\
  これを一行にまとめる方法ってありませんかね?
  for文やパイプラインを使っても駄目でした...

  794: デフォルトの名無しさん:2018/08/25(土) 11:36:40.35 ID:RyVjXt1l
  難しく考えすぎ, 単純に&&か&で繋げばいんじゃね?

  795: デフォルトの名無しさん:2018/08/25(土) 20:37:51.27 ID:RyVjXt1l
  >>793
  cd .. &for /f %a in ('cd') do set parent=%a
  でできた.

  796: デフォルトの名無しさん:2018/08/26(日) 11:25:48.74 ID:PFw0pViP
  遅延展開でfor文ループをやってるバッチファイル(*.bat)があるんですが.
  このバッチファイルをメモ帳で開いて内容をクリップボードにコピーして.
  それをコマンドプロンプト画面に貼り付けたら同じように動作しますか?

  797: デフォルトの名無しさん:2018/08/26(日) 12:04:17.20 ID:Kp4FoNKX
  なんか初歩的やなあ.
  遅延展開だから最初にsetlocal enabledelayedexpansion
  を書かいて&で繋げて次のコマンドを書ける. ただし%%は%に置き換える必要がある.

  798: デフォルトの名無しさん:2018/08/26(日) 13:07:23.92 ID:ZzrAYlbi
  やってみればわかるけどコマンドプロンプトで.
  setlocal enabledelayedexpansionやっても効果ないよ.
  cmd /v:onで遅延展開有効にしたコマンドプロンプト起動しないとだめ.

  799: デフォルトの名無しさん:2018/08/26(日) 14:01:30.30 ID:Kp4FoNKX
  ああほんとだ. こんな感じにすればいいのね.
  cmd /v:on
  set str=hoge &for /l %a in (0, 2, 10) do ( set str=!str!%a ) &echo !str!

  800: デフォルトの名無しさん:2018/08/26(日) 15:49:42.37 ID:/S+ZLweZ
  800!
  このシリーズも, 12まで言っても, 新発見があるのね.
  前(バッチファイルプログラミング質問スレ )のも含むと, すでに15スレ目か.

  801: デフォルトの名無しさん:2018/08/26(日) 18:22:30.74 ID:Kp4FoNKX
  自分はこのスレになってから来たからまだ新参, 過去スレ読まなきゃ.

  802: デフォルトの名無しさん:2018/08/26(日) 19:11:50.77 ID:qpELtL6e
  >>798
  > バッチ ファイルでは, SETLOCAL ENABLEEXTENSIONS または DISABLEEXTENSIONS
  > 引数は /V:ON または /V:OFF スイッチよりも優先されます.
  > 詳細については SETLOCAL /? を参照してください.
  じゃない??
  cmd /v:on なんて使ったことがない・・・.

  803: デフォルトの名無しさん:2018/08/26(日) 19:12:48.89 ID:qpELtL6e
  あ, もしかしてバッチとコマンドプロンプトでは動きが違うってこと??

  804: 796:2018/08/26(日) 19:26:46.75 ID:PFw0pViP
  >>797-799
  ええと, よくわからなくなってきたので自分でもググってみますね. (^_^;)
  どうもありがとうございました.

  805: デフォルトの名無しさん:2018/08/26(日) 19:58:30.97 ID:Kp4FoNKX
  ググらずにコマンドプロンプト開いて試せばいいんだよ.
  ・遅延展開を使うために事前に cmd /v:on[Enter]する.
  ・バッチのfor文は%%を%1つに置き換えてから貼る.
  ・do ループの処理は複数行で書けないので, ( 処理 & 処理 & 処理 )と書く. (の後と)の前の半角スペースが大事.
  とりあえずそんなとこ.

  806: デフォルトの名無しさん:2018/08/26(日) 21:34:45.08 ID:ZzrAYlbi
  コマンドプロンプトでもdo の後に括弧つけて改行すれば.
  More?ってプロンプト出て普通に複数行書ける.
  > for %x in (hoge) do (
  More?

  807: デフォルトの名無しさん:2018/08/27(月) 01:51:11.66 ID:Sgkp88za
  SETLOCALに ENABLEEXTENSIONSなどがあったのか, 知らなかったなあ.
  setlocalcのようなものが必要なこと自体cmdの設計ミスなんだけど, ますます複雑化, 恥の上塗り路線.

  808: デフォルトの名無しさん:2018/08/27(月) 06:43:21.31 ID:EbTlBfxg
  >>795
  有難うございます!

  809: デフォルトの名無しさん:2018/08/27(月) 07:33:20.85 ID:4tgtf9in
  >>808
  for %%i in (.) do set PARENT_DIR=%%~dpi

  810: デフォルトの名無しさん:2018/08/30(木) 08:39:19.94 ID:cyhHU1Jz
  forとか使わなくても・・・.
  %cd:\=&set parent=%
  って知られてないんかな?

  811: デフォルトの名無しさん:2018/08/30(木) 08:40:17.66 ID:cyhHU1Jz
  すまん勘違いした.

  812: デフォルトの名無しさん:2018/08/30(木) 08:54:21.79 ID:eE05Kd4s
  for %%i in (..) do set PARENT_DIR=%%~fi

  813: デフォルトの名無しさん:2018/09/11(火) 15:07:38.99 ID:7Sv68F+V
  テキストを type でユニコードに変換できるけど.
  cmd /u /c type sjis.txt > uni.txt
  これを逆にシフトjisに戻す方法はありますか?

  814: デフォルトの名無しさん:2018/09/11(火) 15:30:06.35 ID:7Sv68F+V
  cmd /a /c more < uni.txt > sjis2.txt

  815: デフォルトの名無しさん:2018/09/11(火) 15:30:11.03 ID:zUlaXCLj
  nkf -s uni, txt > sj.txt

  816: デフォルトの名無しさん:2018/09/11(火) 15:32:51.33 ID:7Sv68F+V
  >>815
  すみませんでした.
  自己解決しました.

  817: デフォルトの名無しさん:2018/09/11(火) 16:55:41.49 ID:7Sv68F+V
  cmd /u /c type s.txt > u.txt
  set /p x="" < nul > bom.txt
  copy /b bom.txt + u.txt u2.txt
  type u2.txt > s2.txt
  comp s.txt s2.txt

  818: デフォルトの名無しさん:2018/09/11(火) 21:05:10.34 ID:hTiklz9U
  nkf 推しは死ね.
  それはなんでもアリじゃねぇか.
  とりあえず, ここは「(デフォでは)全Windows環境で動く」が前提にしろや.
  >>817
  それが何故上手く動くのかの解説をする義務が君にはあると思う.
  「ここのコマンドでSJIS変換が入ってます」くらいの.

  819: デフォルトの名無しさん:2018/09/11(火) 21:54:57.13 ID:7Sv68F+V
  上記の2バイトのBOMはユニコードのテキストである印です.
  例えばメモ帳で空のユニコードのファイルを作成したらbom.txtと同じになる.
  typeコマンドはBOMを参照して入力コードを決定し,
  コードページを参照して出力コードを決定する.

  820: デフォルトの名無しさん:2018/09/11(火) 23:18:52.19 ID:hTiklz9U
  >>819
  ありがとう. .
  > typeコマンドはBOMを参照して入力コードを決定し,
  type にそんな機能があったのか!という感じ.

  821: デフォルトの名無しさん:2018/09/12(水) 08:46:42.71 ID:wnqO0p2C
  もの凄く泥臭いな.

  822: デフォルトの名無しさん:2018/09/12(水) 12:32:37.36 ID:iSRyeJ5N
  応用すれば色々と変換できる.
  ソースが EUC-JP の例.
  set /p BOM="" < nul > UTF-16LE.txt
  chcp 20932
  cmd /u /c type EUC-JP.txt >> UTF-16LE.txt
  chcp 65000
  type UTF-16LE.txt > UTF-7.txt
  chcp 65001
  type UTF-16LE.txt > UTF-8.txt
  chcp 50222
  type UTF-16LE.txt > JIS.txt
  chcp 932
  type UTF-16LE.txt > SJIS.txt
  泥臭いのが好きな人はどうぞ.
  改行コードは知らん. w.

  823: デフォルトの名無しさん:2018/09/12(水) 21:20:08.66 ID:EE8mLPPB
  本筋とは関係ないんだが, 『2バイトのBOM』のあるレス >>817, 822 読み込むと.
  しばらくしてと JaneStyle(3.75) が落ちる.
  dat から該当部分『2バイトのBOM』を削除すると問題なくなる.
  今どき JaneStyle 3.75 使ってる人はほぼ居ないと思うけど参考まで.
  オマ環だったらゴメンナサイ.

  824: デフォルトの名無しさん:2018/09/12(水) 22:07:08.64 ID:iSRyeJ5N
  俺の環境は Win10 で.
  Jane Style Version 4.00
  不具合無い.

  825: デフォルトの名無しさん:2018/09/12(水) 22:49:28.45 ID:gLwHpn+Y
  >>823
  専ブラをバージョンアップしない理由は何?

  826: デフォルトの名無しさん:2018/09/12(水) 23:08:31.59 ID:alzyNvAF
  >>823
  3.75でこのスレを串(API)で読み込んで10分ほど放置, その後新着チェックや別スレを見ても別に落ちたりしないんだが.
  (なお, HTMLで読み込むとBOM部分が削除されちゃったんで意味なし)

  827: デフォルトの名無しさん:2018/09/12(水) 23:09:04.85 ID:iSRyeJ5N
  どうやら >>822 のBOM="" の引用符の中は.
  Internet Explorer 11 ではコピペ出来ないようだ.
  該当の行の Base64 は.
  c2V0IC9wIEJPTT0i//4iIDwgbnVsID4gVVRGLTE2TEUudHh0DQo=

  828: デフォルトの名無しさん:2018/09/12(水) 23:48:42.33 ID:/kdY+KWC
  >>825
  プロキシ入れる必要はあって問題なくはないけど読み書きに使えてるから.
  広告非表示するだけならバイナリ弄る方が手っ取り早いとは思いますが, そんな感じです.
  >>826
  ありゃ, そんな気はしてましたがオマ環でしたか.
  もうちょっと確認してみると, MacType を切ると再現しなくなったので,
  その辺の合わせ技+こちらのその他の環境, かなと.
  読み込んであのレスのあたりをスクロールして上下させてると,
  フォントの描画が MacType が効いてないようになってから100%落ちちゃってたもんで.

  829: 826:2018/09/13(木) 00:03:58.75 ID:t/mtX2p/
  >>828
  俺もmactypeは入ってるんだけどなあ.

  830: デフォルトの名無しさん:2018/09/13(木) 00:07:45.35 ID:t/mtX2p/
  なお10回程スクロール(キー, マウスホィール, スクロールバー)してみたんだけど.

  831: デフォルトの名無しさん:2018/09/13(木) 00:47:39.75 ID:vvLnBjaZ
  MacTypeは関係ないのでは?
  4.0でなんともないし.

  832: デフォルトの名無しさん:2018/09/13(木) 00:49:13.24 ID:1CXXM/l/
  確認ありがとうございます.
  限定的な環境依存のいわゆる, オマ環, と分かっただけでも収穫です.
  流石にスレチと思うのでこの辺で.

  833: デフォルトの名無しさん:2018/09/14(金) 07:13:36.14 ID:FIpeWt57
  >>822 のBOMの引用符の中を正しくコピペ出来ない人は,
  1行目をこれで代用.
  chcp 65000
  cmd /u /c set /p BOM=+/v8<nul> UTF-16LE.txt

  834: デフォルトの名無しさん:2018/09/14(金) 13:56:39.97 ID:Ah8o0gi1
  >>833 がうまくいかない.
  バイナリエディタでできたUTF-16LE.txtを覗くと.
  2B 00 2F 00 76 00 38 00
  となる.

  835: デフォルトの名無しさん:2018/09/14(金) 16:33:12.67 ID:UfVRD/gP
  よくわかんないんだけど.
  BOMはUTF-16LEでは "FF FE" じゃないの?

  836: デフォルトの名無しさん:2018/09/14(金) 17:33:39.58 ID:Ah8o0gi1
  >>822ならそうなるよ.

  837: デフォルトの名無しさん:2018/09/14(金) 18:51:45.62 ID:fIt3xJ+t
  >>834
  chcp 65000が利かないのかな?環境は2000? XP?
  こっちではどうかな?
  for /f "tokens=1, 2 delims=[" %%i in ('cmd /u /c echo 寿対') doset xFF=%%i&set
  xFE=%%j
  set /p BOM=%xFF%%xFE%<nul>utf16le.txt

  838: デフォルトの名無しさん:2018/09/14(金) 20:35:18.83 ID:Ah8o0gi1
  >>837
  バッチに >>830を書いて実行したら FF FEになった.
  コマンドプロンプトで1行づつやってたからダメだったらしい.
  >>837
  もバッチで大丈夫でした.
  Win10です.

  839: デフォルトの名無しさん:2018/09/19(水) 17:45:23.36 ID:zK7o51II
  setlocal enabledelayedexpansion
  set a=a
  set b=A
  if /i %a% == %b:~0, 1% echo eq1
  if /i !a! == !b:~0, 1! echo eq2
  set c=!b:~0, 1!
  if /i !a! == !c! echo eq3
  if /i %a% == %b% echo eq4
  if /i !a! == !b! echo eq5
  結果は.
  eq1
  eq3
  eq4
  eq5
  何故か eq2 が出ない.

  840: デフォルトの名無しさん:2018/09/19(水) 18:33:47.81 ID:zK7o51II
  setlocal enabledelayedexpansion
  set a=abc
  if /i !a:~0, 1! == !a:~0, 1! echo eq
  1! の使い方が誤っています.
  俺の PC だけなのか?

  841: デフォルトの名無しさん:2018/09/19(水) 18:44:41.74 ID:zK7o51II
  分かった.
  ^, にしたら良かった.
  if /i !a:~0^, 1! == !a:~0^, 1! echo eq

  842: デフォルトの名無しさん:2018/09/20(木) 06:54:59.39 ID:SZObeV+C
  謎仕様だなあ...

  843: デフォルトの名無しさん:2018/09/21(金) 03:25:46.77 ID:q2E2aQh+
  また謎です.
  shiftすると%1は変わるが, %*は変わらない.

  844: デフォルトの名無しさん:2018/10/03(水) 12:55:17.46 ID:kms9X1pz
  表示は出来るが, 代入が一部だけ出来ない整数値があったよ.
  @echo off
  setlocal enabledelayedexpansion
  set /a "a=1<<31"
  set /a b=a
  set /a c=%a%
  set /a d=!a!
  echo a=%a%
  echo b=%b%
  echo c=%c%
  echo d=%d%
  pause
  結果は.
  a=-2147483648
  b=-2147483648
  c=
  d=

  845: デフォルトの名無しさん:2018/10/05(金) 06:58:30.40 ID:Iu01kfl1
  setlocal enabledelayedexpansion
  set /a "a=1, b_!a!=2"
  set b_
  で,
  b_0=2
  何か変だが, こういう仕様なのか?

  846: デフォルトの名無しさん:2018/10/05(金) 08:53:46.57 ID:vSWfZutq
  , で分けてあってもsetコマンドは1つだけなので複数コマンドとは思われてないってことなんだろうね.
  setlocal enabledelayedexpansion
  set /a a=1 & set b_!a!=2
  set b_!a!
  なら大丈夫.

  847: デフォルトの名無しさん:2018/10/05(金) 17:03:33.33 ID:Iu01kfl1
  >>846 ありがとうございます.
  !a! は set /a 実行直前の値でした.
  setlocal enabledelayedexpansion
  set /a a=0
  for /L %%i in (1, 1, 3) do set /a "a=%%i, b=a, c=!a!, d=%a%"& echo !a! !b! !c!
  !d!
  1 1 0 0
  2 2 1 0
  3 3 2 0

  848: デフォルトの名無しさん:2018/10/05(金) 17:27:41.95 ID:vSWfZutq
  setlocal enabledelayedexpansion
  set /a a=0
  for /L %%i in (1, 1, 3) do ( set /a a=%%i &set /a b=a &set /a c=!a!&set /a
  d=%a% &echo !a! !b! !c! !d! )
  なら.
  1 1 1 0
  2 2 2 0
  3 3 3 0
  となる.
  bへの値代入が!抜きのaでできるって知らなかったわ・・・.
  謎挙動.

  849: デフォルトの名無しさん:2018/10/05(金) 18:09:57.00 ID:Iu01kfl1
  set /a で %a% や !a! はあまり使用しない方が良さそうだ.
  % や ! は演算子に含まれる文字で紛らわしいし.
  展開のタイミングで予想外の挙動するし.
  展開時に >>844 のように特異値でエラーになったりするし.
  値参照は変数名だけでいい.

  850: デフォルトの名無しさん:2018/10/05(金) 18:17:00.44 ID:vSWfZutq
  ご自由に. それより某グラマー御用達QAサイトのトップ回答者様が書くバッチがgoto :EOF 多用で頭痛い.

  851: デフォルトの名無しさん:2018/10/05(金) 18:26:50.86 ID:Iu01kfl1
  俺もよく使うよ, goto :eof

  852: デフォルトの名無しさん:2018/10/05(金) 18:28:05.47 ID:hOPHqLcn
  >>850
  何か問題が?
  goto :endとかより遥かにいいと思うが.

  853: デフォルトの名無しさん:2018/10/05(金) 18:33:02.62 ID:Iu01kfl1
  goto その物が多いとか言われた事も.

  854: デフォルトの名無しさん:2018/10/05(金) 18:46:17.97 ID:vSWfZutq
  自分だと大抵.
  {メインルーチン}
  goto :EOF
  :sub1
  {サブルーチン12}
  exit /b
  :sub2
  {サブルーチン}
  exit /b
  と書くことが多い.
  トップ回答者様は.
  {メインルーチン}
  goto :EOF
  :sub1
  {サブルーチン}
  goto :EOF
  sub2
  {サブルーチン}
  goto :EOF
  と回答されている. サブルーチンの下のはgoto は不要だし慣れない.

  855: デフォルトの名無しさん:2018/10/05(金) 19:02:53.79 ID:Iu01kfl1
  戻り値なけりゃどっちでもいい様な気がするが.
  逆に exit を避けてる人もいるよ.

  856: デフォルトの名無しさん:2018/10/05(金) 19:53:21.88 ID:LaGwhHU8
  俺もgoto派だな.

  857: デフォルトの名無しさん:2018/10/05(金) 21:35:58.50 ID:RB/KKRkK
  gotoは見通しが悪くなるから, 極力使わないようにしてる.
  他の主流の言語だと使えないものが多いから, 必然的にそういう書き方に慣れてしまった.

  858: デフォルトの名無しさん:2018/10/05(金) 23:49:53.55 ID:8nMQUHh9
  goto は使わないに越したことはない.
  が, 制御構文が貧弱な言語では, 熟慮の上で使わざるを得ない場面で使う.
  が正解.
  詳しくはWikipediaで.

  859: デフォルトの名無しさん:2018/10/05(金) 23:56:24.52 ID:qkvvR9Zs
  Cでもgotoは使うよね.

  860: デフォルトの名無しさん:2018/10/05(金) 23:58:44.47 ID:8nMQUHh9
  C言語にはMISRAとかいう規約があるが無視していい.
  あれは組み込み分野だけの特殊なものだと思っていい.
  大抵の人間は, 「これは思考からはぶいていい」という書き方の方が読みやすい.
  だから, 「これは戻すか終わらせる」と書いていっていい.
  そうすれば, 残ったものに集中できるだろ?
  まぁ, 日ごろ「自分が辞めた後にこれを読まされる人間が困らないかどうか」って考えて書いてるかどうかってことだ.

  861: デフォルトの名無しさん:2018/10/06(土) 16:39:29.59 ID:P4YKYACU
  あちこちでreturnするのもスパゲッティなgotoと大差がない気がするんだ.
  テロ的というか.

  862: デフォルトの名無しさん:2018/10/06(土) 17:10:22.17 ID:GNiE4xH/
  字面が違うだけで同じだろ.

  863: デフォルトの名無しさん:2018/10/06(土) 20:28:48.17 ID:gea8Zy97
  gotoもイディオムに従って使えば混乱しない.
  バッチファイルだとforの方が理解不能で害悪.

  864: デフォルトの名無しさん:2018/10/06(土) 23:02:20.58 ID:tgEP6apu
  gotoがゴーゴーに見えた.

  865: デフォルトの名無しさん:2018/10/06(土) 23:12:15.45 ID:uJ87E9Rb
  >>860-861
  IPAの出してるMISRAの解説書のreturnは1か所にしろというルール,
  あれはクソofクソのルールだと思うね. early returnこそ正義.
  Cとbatの書き方は全然比較にならないけど.

  866: デフォルトの名無しさん:2018/10/07(日) 00:27:12.50 ID:pbh8RIqN
  >>861
  むしろ goto の良い使い方と言われている制限が, return をまねたもの.

  867: デフォルトの名無しさん:2018/10/07(日) 11:03:03.39 ID:Bzp9uIq0
  バッチファイルかパワーシェルでIPv4のIPアドレスのみを取得して環境変数に代入するにはどういうコマンドになりますか?
  教えてください.

  868: デフォルトの名無しさん:2018/10/07(日) 12:00:15.70 ID:6qmhFN/2
  「powershell ip address」で検索!

  869: デフォルトの名無しさん:2018/10/07(日) 12:28:26.52 ID:VwaVbKnV
  >>867
  環境変数IPAddressに192を含んだIPアドレスを代入するサンプル(PowerShell 2.0併用)
  set CMD=powershell -command "& {ipconfig |? {$_ -match 'IP.*:192\.'}|% {$_
  -replace '.*: (\d+\.\d+\.\d+\.\d+)', '$1'}}"
  for /f "usebackq delims=" %%a in (`%CMD%`) do set IPAddress=%%a
  echo %IPAddress%
  PowerShell部分はipconfigの結果から正規表現でIPと: 192という文字を含む行を抽出.
  抽出した行のIPアドレス部分のみ正規表現の置換で抽出といった感じ.
  PowerShell3.0以降だともうちょっと素直に書ける感じだけど.

  870: デフォルトの名無しさん:2018/10/07(日) 12:53:16.71 ID:Dedwpgqn
  アダプタが1つだけならこんなでいいんじゃね?
  setlocal enabledelayedexpansion
  for /f "tokens=2 delims=:" %%a in ('ipconfig ^|find "IPv4"')do set
IPADRESS=%%a
  set IPADRESS=%IPADRESS:~1%
  echo %IPADRESS%

  871: デフォルトの名無しさん:2018/10/07(日) 12:54:26.67 ID:Bzp9uIq0
  この処理作るのにバッチとパワーシェル組み合わせないとできないんですか?
  ip取得するだけでも結構大変なのですね.

  872: デフォルトの名無しさん:2018/10/07(日) 12:56:55.73 ID:Bzp9uIq0
  と思ったらバッチだけでもできそうなんですね, アダプターは一つです.
  ちょっと色々教えてもらったのでテストしてみます!

  873: 870:2018/10/07(日) 13:03:20.66 ID:Dedwpgqn
  遅延変数展開の呪文要らなかったわ, 1行目削っていいよ.

  874: デフォルトの名無しさん:2018/10/07(日) 13:07:01.74 ID:Bzp9uIq0
  遅延環境数ってforとifの()で使用するときだけ必要なんでしたっけ?

  875: デフォルトの名無しさん:2018/10/07(日) 13:23:02.79 ID:Dedwpgqn
  だいたいその理解でおk.
  forやifの()内のスクリプトブロックが複数処理で変数代入とその参照のペアがある場合に使う.
  1処理だけとか, 代入だけとかなら不要.

  876: デフォルトの名無しさん:2018/10/07(日) 17:41:47.85 ID:0jrGYEp4
  無限ループの原因は何か.
  SET A=1073741824
  FOR /L %%B IN (-%A%, %A%, %A%) DO ECHO %%B

  877: デフォルトの名無しさん:2018/10/07(日) 19:04:07.20 ID:Dedwpgqn
  set /a A=1073741824
  1073741824
  set /a B=A+A
  -2147483648
  となるからね, 32bitINTの範囲が-2147483648〜-2147483647
  2進表記の最上位bitが1が立ってしまったらマイナス値.

  878: デフォルトの名無しさん:2018/10/07(日) 19:25:23.31 ID:Dedwpgqn
  試してみるとfor /l 文ではステップ値が1073741824以上の場合必ずバグったループになるね, まあ仕方ないのかも.

  879: デフォルトの名無しさん:2018/10/07(日) 19:43:19.94 ID:0jrGYEp4
  内部的にどんな計算してるか気になるところです.
  B は -1073741824, 0, 1073741824 なので.
  普通に考えると32ビットのオーバーフローはしてない筈.

  880: デフォルトの名無しさん:2018/10/07(日) 19:55:29.49 ID:0jrGYEp4
  ああ, 分かった.
  4ループめでオーバーフローするのか.
  3ループめで最終値に等しいと抜けるんじゃ無いわけか.

  881: デフォルトの名無しさん:2018/10/07(日) 19:57:49.70 ID:2JwzOMBB
  バッチファイルのif文でパワーシェルのif -Orみたいな処理できますか?

  882: デフォルトの名無しさん:2018/10/07(日) 20:18:06.07 ID:0jrGYEp4
  IFの条件は2個の値を比較するだけ.
  複雑なOR, AND, XORとかあるんなら計算して結果を変数に入れる.
  それをIFの条件で使う.

  883: デフォルトの名無しさん:2018/10/08(月) 21:58:47.76 ID:To7x1PVP
  あると便利なミニミニバッチ.
  DOS窓に今の時間を表示しておく.
  m.bat
  @echo off
  setlocal
  set x=%date:~5% %time:~0, 5% %*
  title=%x%
  exit /B 0
  画面クリア.
  c.bat
  @echo off
  cls
  exit /B 0
  クリップボードクリア.
  cc.bat
  @echo off
  echo.|clip
  echo clip clear
  exit /B 0

  884: デフォルトの名無しさん:2018/10/09(火) 08:38:25.31 ID:IIAdkwpd
  画面クリアは普通にcls打つのと何が違うん?

  885: デフォルトの名無しさん:2018/10/09(火) 11:35:59.50 ID:9WevvN1n
  時刻表示ならプロンプト変えたら?
  clsは>>884
  クリップボード履歴管理系のアプリ使ってる人には無用?

  886: デフォルトの名無しさん:2018/10/09(火) 15:53:20.49 ID:hXgFZ2lj
  >>884
  一文字でいいので, お菓子を食べながらでもできる, 大差.

  887: デフォルトの名無しさん:2018/10/10(水) 17:37:49.95 ID:Wl83IH5q
  そういうしょぼいものならdoskeyでも使っとけ.

  888: デフォルトの名無しさん:2018/10/11(木) 22:01:20.44 ID:aIIKUaH8
  1文字とか何かで誤爆しそうで危うすぎる.

  889: デフォルトの名無しさん:2018/10/12(金) 00:17:12.22 ID:xVyRtSc0
  くだらねー.

  890: デフォルトの名無しさん:2018/10/13(土) 05:37:42.36 ID:YmkYzRio
  copyコマンドがおかしい.
  copy x+y z
  とするとzに改行追加されている.
  copy /B x+y z
  だと問題なしだが??

  891: デフォルトの名無しさん:2018/10/13(土) 07:34:07.12 ID:TS7U3WRI
  >>890これね.
  http://shigechi-64.hatenablog.com/entry/20090717/1247798200

  892: デフォルトの名無しさん:2018/10/13(土) 19:25:44.82 ID:fQqIQRVk
  改行じゃなくて 0x1A の 1byte なら付加されるが.
  echo test> a
  dir a
  copy a /b + nul /a
  dir a
  サイズが 1byte 増える.

  893: デフォルトの名無しさん:2018/10/14(日) 01:22:10.62 ID:IWBgfNe4
  >>891
  以前から知られていたのですね.
  そのサイトはウィルス注意報が出たので見ませんでしたが.

  894: デフォルトの名無しさん:2018/10/14(日) 06:32:47.46 ID:5zXkQKrC
  テキストファイルのEOF(0x1A)は前世紀の遺物.
  昔のテキストエディタはファイルの末尾にEOF(0x1A)を付加していた.
  仕様が古すぎて今じゃCOPYのヘルプを見ても, 詳細が分からん状態.
  copy でファイルを連結する時は /a がデフォルト.
  ちなみに copy /a はEOF(0x1A)を付加するだけじゃないぞ.
  ファイルの途中に0x1Aが有ったらそれ以降が無くなってしまう怖い仕様.
  あと, echo xxx >> とかでテキストを追加したら末尾の0x1Aは勝手に削除される.

  895: デフォルトの名無しさん:2018/10/14(日) 09:07:44.01 ID:YBMQaeBO
  >>30
  >>31
  ずいぶん昔の質問で悪いんだが.
  これって全ての引数を意味する「%*」に起動時のコマンドラインは含まれないってこと?

  896: デフォルトの名無しさん:2018/10/14(日) 18:08:37.67 ID:gwXaIkcp
  chcp 65001入ってるスクリプトをUTF-8で保存して動かしてみたらエスケープ処理が酷い・・・.

  897: デフォルトの名無しさん:2018/10/15(月) 01:28:48.04 ID:yVBNeV/e
  >>895
  そうです.
  バッチはいろいろ癖があるので, そんなものだと思うしかないです.
  別件.
  echo %*
  shift
  echo %*
  rem %* はshiftされない.

  898: デフォルトの名無しさん:2018/10/16(火) 00:24:50.38 ID:GeydM3gl
  >>897
  The shift command has no effect on the %* batch parameter.
  https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/shift
  SHIFT doesn't affect %*
  https://stackoverflow.com/questions/12990480/shift-doesn-t-affect

  899: デフォルトの名無しさん:2018/10/25(木) 05:27:15.65 ID:cKUaktMr
  echo %__APPDIR__%
  C:\Windows\SysWOW64\
  これが出る時32ビットのコマンドプロンプトらしいんですが.
  64ビットのコマンドプロンプトと何か違うんでしょうか.

  900: デフォルトの名無しさん:2018/10/27(土) 11:16:03.78 ID:NXHcy7gB
  reg query "HKU\.DEFAULT\Control Panel\International"
  表示された最後の行に.
  HKEY_USERS\.DEFAULT\Control Panel\International\・・・・・・.
  これは何だろうとレジストリエディタで見ると謎の文字で地球が3つ.
  しかしメモ帳で表示出来る文字が.
  コンソール画面で表示出来ないのはダメだね.

  901: デフォルトの名無しさん:2018/10/27(土) 12:02:14.11 ID:8ILfgags
  メモ帳「俺はだいぶ前からユニコード対応済みだから表示はするさ, ANSI(CP932)で保存はできなくてもなー」

  902: デフォルトの名無しさん:2018/10/27(土) 12:15:54.46 ID:NXHcy7gB
  DIRコマンドでもユニコード対応してるよね. ちゃんと表示される.
  でもこの地球文字はDIRコマンドでも表示されないようだ.
  フォントの問題かねえ.

  903: デフォルトの名無しさん:2018/10/27(土) 13:14:57.64 ID:8ILfgags
  フォント問題だね,
  メモ帳とかレジストリエディタはフォントリンクで表示用フォントが持ってないコードも他のフォントにあればそれで代用表示するから.

  904: デフォルトの名無しさん:2018/10/27(土) 15:49:46.95 ID:IkTi26EG
  なんだよ地球文字って?

  905: デフォルトの名無しさん:2018/10/27(土) 16:16:07.64 ID:NXHcy7gB
  https://www.charbase.com/1f30e-unicode-earth-globe-americas
  https://www.charbase.com/1f30f-unicode-earth-globe-asia-australia
  https://www.charbase.com/1f30d-unicode-earth-globe-europe-africa

  906: デフォルトの名無しさん:2018/10/27(土) 16:59:45.97 ID:r0d5m4I8
  そんな文字(絵文字?)があるのか.
  初めて見て, びっくり.

  907: デフォルトの名無しさん:2018/10/27(土) 17:04:05.15 ID:NXHcy7gB
  それ, 右上のリンクを押したら色々出て来て笑える.

  908: デフォルトの名無しさん:2018/10/27(土) 22:17:46.77 ID:8ILfgags
  for /f %a in ('dir /b') do echo %~za, %~ta
  なんてことできたんだねえ,
  dir /bは他の属性情報を削いでるからできないと思い込んでた.

  909: デフォルトの名無しさん:2018/10/28(日) 08:43:59.31 ID:uzLWPyey
  >>908
  dirで取得した情報使うわけじゃないから.
  カレントにxxx.txtとかのファイルがあれば.
  for /f %a in ("xxx.txt") do echo %~za
  とかできるよ.

  910: デフォルトの名無しさん:2018/10/28(日) 11:17:25.40 ID:ecNurFe9
  dpnxfだったら単にファイル名にカレントのパスを付けるだけだからチグハグでも出来ちゃうんだぜ.
  aaa.txtっていうファイルがカレントに存在してなくても構わないってことだ.
  pushd d:\xxx\yyy
  for /f %a in ("aaa.txt") do echo %~fa
  ってやれば, d:\xxx\yyy\aaa.txtっていう架空のファイルのフルパス名を表示してくれる.

  911: デフォルトの名無しさん:2018/10/28(日) 20:39:42.80 ID:5N/SSOj8
  >>905
  俺のブラウザが古いのかうまく表示されなかったけど, これか.
  http://i.stack.imgur.com/DQ2Ls.png

  912: デフォルトの名無しさん:2018/10/29(月) 00:52:54.50 ID:m4kOmKq3
  質問です.
  データが以下のように入っているcsvファイルを.
  指定された削除対象のファイル名の行を削除したいです.
  削除対象は別ファイルに一覧としてあります.
  イメージとしては以下のようにしたいです.
  bass.csv
  ================================
  ファイル名, 日付, 時間.
  AAA, 20111001, 1300
  AAB, 20171001, 1300
  AAC, 20171031, 1300
  AAD, 20171031, 1300
  ================================
  delete.txt
  ================================
  AAB
  AAD
  ================================
  output.csv
  ================================
  ファイル名, 日付, 時間.
  AAA, 20111001, 1300
  AAC, 20171031, 1300
  ================================
  OSはWindows7
  コマンド(batでもOK)でoutput.csvのような形にしたいのですが.
  上手くいかず, findstr /V で1行だけ試しにやってみたら理想と近い形になったのですが,
  削除対象が複数になると上手くいきませんでした.

  913: デフォルトの名無しさん:2018/10/29(月) 06:11:32.56 ID:VYDzXbvz
  ?
  findstr /v "AAA AAD" bass.csv>output.csv
  で行くはずだがだめだった?
  これが行ければ除外パターンを作るfor /f文を前段に作るだけで終わると思うが.

  914: デフォルトの名無しさん:2018/10/29(月) 06:59:07.30 ID:VYDzXbvz
  行けるじゃん・・・そういえばfindstrは/gオプションあるから, for文も要らんね.
  findstr /v /g:delete.txt bass.csv>output.txt
  なおfindstrの複数検索パターン指定は和文だと失敗する.
  英数字の検索なら問題なし.

  915: デフォルトの名無しさん:2018/10/29(月) 07:23:43.41 ID:g89iCylL
  よくわからんが.
  FINDSTR /B にして検索文字列のあとに , を付ければいいんじゃね.

  916: デフォルトの名無しさん:2018/10/29(月) 07:26:06.09 ID:g89iCylL
  あ, /I も付ければいいかも.

  917: デフォルトの名無しさん:2018/10/29(月) 08:03:30.04 ID:VYDzXbvz
  行頭以外にAAAやAADが記述されており, それは出力したいなら /B は合った方がいい.

  918: デフォルトの名無しさん:2018/10/29(月) 08:12:46.70 ID:VYDzXbvz
  訂正 AABやAADが だった.

  919: デフォルトの名無しさん:2018/10/29(月) 08:15:25.80 ID:g89iCylL
  無いとファイル名の部分一致するかも.
  拡張子あるなら末尾の , は要らんかも.
  和文ダメなんだ知らんかった.

  920: デフォルトの名無しさん:2018/10/29(月) 09:16:39.77 ID:g89iCylL
  >>912
  和文無ければ不要のバッチ.
  @echo off & setlocal & set /a n=0
  for /f "delims=" %%i in (delete.txt) do set "s=%%i"& call :x
  if %n%==0 (goto :eof ) else set /a n-=1
  echo ファイル名, 日付, 時間> output.csv
  for /f "skip=1 delims=" %%i in (bass.csv) do set "s=%%i"& call :y
  goto :eof
  :x
  set "d%n%=%s%" & set /a n+=1 & goto :eof
  :y
  for /f "delims=, " %%j in ("%s%") do set "s1=%%j"& call :z
  goto :eof
  :z
  setlocal enabledelayedexpansion
  for /L %%k in (0, 1, %n%) do if /i "!s1!"=="!d%%k!"goto :eof
  echo !s!>> output.csv

  921: デフォルトの名無しさん:2018/10/29(月) 09:25:17.80 ID:g89iCylL
  >>920
  3行目訂正.
  if %n%==0 (copy bass.csv output.csv & goto :eof ) else set /a n-=1

  922: デフォルトの名無しさん:2018/10/29(月) 10:42:05.23 ID:VYDzXbvz
  おいらが書くならこう.
  @echo off
  setlocal enabledelayedexpansion
  for /f %%a in (delete.txt) do set list=!list!, %%a
  set list=%list:, = %
  for /f "delims=" %%b in (bass.csv) do (
  set "line=%%b"
  set /a flg=0
  for %%b in (%list%) do (
  echo !line!|findstr /b /v "%%b">nul 2>&1
  set /a flg +=!errorlevel!
  )
  rem echo !cnt!
  if !flg! equ 0 echo !line!>>output.txt
  )
  pause

  923: デフォルトの名無しさん:2018/10/29(月) 11:13:29.52 ID:K68WvpFD
  >>899
  x64だと.
  C:\Windows\System32\
  x64だと64bitで書いたアプリもあるのでフォルダで区別.
  ここらへんwindows自体が手品のようなことをしていていわば巨大ウィルスソフト化.
  x64はintelの失敗作, 性能を優先しすぎて使い勝手が大幅に悪くなった.

  924: デフォルトの名無しさん:2018/10/29(月) 11:17:19.87 ID:P47cxv7B
  CSVのフィルタ処理をバッチでやろうとは思わないけど参考になった.

  925: デフォルトの名無しさん:2018/10/29(月) 11:21:43.07 ID:VYDzXbvz
  すまん, >>922の内側のfor分の %%変数は%%cの方がよかった.
  ローカル変数的な振る舞いで動作上は問題ないけど.

  926: デフォルトの名無しさん:2018/10/29(月) 11:39:07.63 ID:wCs1yHBV
  先輩方, お知恵ありがとうございます.
  情報の後出しとなってしまって大変申し訳ありません.
  ファイル名には枝番がふられているものがあり,
  delete.txtに記載されている「AAB」を削除指定すると枝番01, 02の記載迄消えてしまう為.
  ファイル名と完全一致の行のみを削除するにはどのようにすれば良いかお知恵をお借りしたかった次第です.
  bass.csv
  ================================
  ファイル名, 日付, 時間.
  AAA, 20111001, 1300
  AAB, 20171001, 1300
  AAC, 20171031, 1300
  AAD, 20171031, 1300
  AAB01, 20111001, 1300
  AAB02, 20111001, 1300
  ================================
  delete.txt
  ================================
  AAB
  AAD
  ================================
  output.csv
  ================================
  ファイル名, 日付, 時間.
  AAA, 20111001, 1300
  AAC, 20171031, 1300
  AAB01, 20111001, 1300
  AAB02, 20111001, 1300
  ================================

  927: デフォルトの名無しさん:2018/10/29(月) 11:41:47.37 ID:VYDzXbvz
  delete.txtにカンマ加えて書けばいいんでないの?
  AAB,
  AAD,

  928: デフォルトの名無しさん:2018/10/29(月) 11:55:18.87 ID:g89iCylL
  >>926
  >>920でOK.
  >>922
  delete.txtの中の.
  テキストに半角スペースや ! 文字があると誤動作.

  929: デフォルトの名無しさん:2018/10/29(月) 12:31:59.63 ID:g89iCylL
  >>926
  もし>>920を使うなら>>921で訂正してください.

  930: デフォルトの名無しさん:2018/10/29(月) 13:38:05.43 ID:SulfyTCP
  >>923
  質問は64bitならどういう値になるって質問ではなくて,
  32bitの場合と64bitの場合とで機能・動作的に何が違うの?
  って意味だと思うけど.

  931: デフォルトの名無しさん:2018/10/29(月) 13:42:01.94 ID:t/dvzEws
  >>930
  違うよ.

  932: デフォルトの名無しさん:2018/10/29(月) 13:43:07.31 ID:VYDzXbvz
  >>928
  半角スペースはケアレス, !は全く気にしていなかった. 勉強になった. 有難う.

  933: デフォルトの名無しさん:2018/10/29(月) 22:11:24.00 ID:BnWHDqaq
  Ruby で作った.
  require 'csv'
  delete_files = { } # 削除するファイル名を入れる, ハッシュ.
  text = <<TEXT
  AAB
  AAD
  TEXT
  # 改行区切りで, 改行を除去してから, ハッシュに入れる.
  text.each_line do | line | # 各行.
  line.chomp! # 末尾の改行を削除する.
  next if line.empty? # 空行は処理しない.
  delete_files[ line ] = true
  end
  # コロン区切りのCSV 入力ファイルを, 1行ずつ処理する.
  CSV.foreach( "bass.csv" ) do |row|
  # 削除対象ファイルの行は, 出力しない.
  puts row.join( ", " ) unless delete_files.has_key? row[ 0 ]
  end

  934: デフォルトの名無しさん:2018/10/29(月) 22:24:44.16 ID:XpqRFBWF
  地球はチタマと読むのです.

  935: 899:2018/10/30(火) 17:29:47.50 ID:GfHx62hK
  >>923
  レスありがとうございます.
  OSはwin10x64で実行されたcmdの呼び出し元は.
  C:\Program Files (x86)にあるアプリケーションです.
  %__APPDIR__%はC:\Windows\SysWOW64\
  %ComSpec%はC:\WINDOWS\system32\cmd. exe
  左上にある窓のtitleは%ComSpec%と同じで, 何か変です.
  タスクマネージャーにはコマンドプロンプト(32ビット)と出ます.
  OSから直接cmdを起動したら(32ビット)は出ません.
  OSが自分自身を騙してるのでしょうか.
  たぶん機能上は違いが無いと思いますが.

  936: デフォルトの名無しさん:2018/10/30(火) 17:53:27.44 ID:ZaLbntHv
  その呼び出してるアプリが32bitアプリなのだと予想.

  937: デフォルトの名無しさん:2018/10/30(火) 17:57:36.37 ID:GfHx62hK
  C:\Program Files (x86)なので32ビットですね.

  938: デフォルトの名無しさん:2018/10/30(火) 18:58:54.08 ID:ZaLbntHv
  64bitOSでの32bitアプリはエミュレーションみたいな物で, 32bitアプリから64bitのdllは使えないし,
  その逆も出来ないようになってる.なのでcmd.comも分けてあるという理由でメモリや動作モード以外の機能差は無いのではなかろうかと.

  939: デフォルトの名無しさん:2018/10/30(火) 19:57:27.49 ID:8A3JIwUi
  32bitアプリから見た C:\Windows\System32 の実体は C:\Windows\SysWOW64 だから,
  System32にあってもSysWOW64にないコマンド(WSL関連とか)は実行できないとか,
  環境変数の値がビット数に応じて違うとか, その程度の違い.

  940: デフォルトの名無しさん:2018/10/30(火) 22:17:05.55 ID:GfHx62hK
  試しに.
  64ビットでビルドしたコマンドは.
  普通に動作しました.
  >echo %__APPDIR__%
  C:\Windows\SysWOW64\
  >Hello_World.exe
  Hello World!

  941: デフォルトの名無しさん:2018/10/31(水) 19:08:48.10 ID:QI0rTSh9
  以前は確かsystem32のcmdとSysWOW64のcmdが同じだったんだ.
  そんでもってWinSxSのcmdが違っていた.
  今はsystem32とSysWOW64が違うんだな.
  WinSxSのはsystem32と同じになってる.
  手品の種が変った?

  942: デフォルトの名無しさん:2018/10/31(水) 21:11:08.13 ID:lh+glCNV
  >>926
  作ってみた. ファイル名に%がはいらない前提ですが, こんな手もあるということで勘弁願いたい.
  @echo off
  set t=tmp.bat
  echo type bass.csv^^>%t%
  for /f "delims=" %%a in ( delete.txt ) do (
   echo ^| find /v "%%a, "^^>>%t%
  )
  echo ^>output.csv>>%t%
  call %t%
  del %t%

  943: デフォルトの名無しさん:2018/11/01(木) 07:13:18.37 ID:5DVAbKOZ
  夜見た時は何をやってるのか分からなかった.
  finnd /vをパイプでパターン数繰り返すわけね.

  944: デフォルトの名無しさん:2018/11/01(木) 11:22:42.11 ID:06yasLFO
  %ってファイル名に使えるんだね.
  半角記号でバッチの挙動に関係するのは「!」くらいしか知らなかったわ.
  じゃあ変数名と同じ名前のフォルダ(例えば「%appdata%」)に.
  cdで移動するのは無理って事?

  945: デフォルトの名無しさん:2018/11/01(木) 11:39:55.83 ID:OrBUhe7y
  @echo off
  md %%appdata%%
  cd %%appdata%%
  cd
  pause

  946: デフォルトの名無しさん:2018/11/01(木) 11:46:36.02 ID:OrBUhe7y
  >set /p a=
  %appdata%
  >cd %a%
  >cd
  D:\%appdata%

  947: デフォルトの名無しさん:2018/11/01(木) 19:53:37.88 ID:5DVAbKOZ
  for /f 文の時の()内ってダブルコーテーションのパスつっこむとダメなのね.
  知らなかったわ・・・・・・.

  948: デフォルトの名無しさん:2018/11/01(木) 21:09:19.14 ID:OeVqRgzL
  usebackqがあるだろ.

  949: デフォルトの名無しさん:2018/11/02(金) 17:48:30.39 ID:C2p2E45I
  >>945
  %の前に%を置いてエスケープするのか.
  どうもありがとう.

  950: デフォルトの名無しさん:2018/11/05(月) 20:55:44.71 ID:LVlVWx6w
  遅延展開だと論理否定の単項演算子が全く使い物にならない.
  @echo off
  setlocal enabledelayedexpansion
  set /a a=0, b=0
  set /a "a=!22+!33"
  echo a=!a!
  set /a "b=!(5^5)"
  echo b=!b!
  pause
  なんだこの結果は.
  a=33
  b=55
  正解は.
  a=0
  b=1

  951: デフォルトの名無しさん:2018/11/06(火) 07:20:24.04 ID:4bA2Iy3p
  >>950
  XORは二重引用符で囲んでも更にエスケープの謎仕様.
  @echo off
  set n=!
  setlocal enabledelayedexpansion
  set /a a=0, b=0
  set /a "a=!n!22+!n!33"
  echo a=!a!
  set /a "b=!n!(5^^5)"
  echo b=!b!
  pause
  a=0
  b=1

  952: デフォルトの名無しさん:2018/11/06(火) 08:19:38.89 ID:NUZ4yNuE
  言語仕様に謎が多すぎて業務に使うには怖い.

  953: デフォルトの名無しさん:2018/11/06(火) 10:53:18.93 ID:XCQlzVed
  標準インストールされてるという以外に長所はないよなぁ.

  954: デフォルトの名無しさん:2018/11/06(火) 11:06:43.59 ID:OYWwvpi1
  今のWindowsなら, Powerchell?, WSH?なら, 標準インストールされているが・・・・.
  以前なら, REXX(PC-DOS)とか, QBASICあたり?
  でも, 使い物になるのは・・・・.

  955: デフォルトの名無しさん:2018/11/06(火) 11:25:34.30 ID:CgLejKNb
  QBASICは中身がないので別途買わないと動かないよ.

  956: デフォルトの名無しさん:2018/11/06(火) 14:54:37.43 ID:7wQVLanf
  >>951
  !を取って.
  set /a "b=(5^^5)"
  では.
  オペランドがありません.
  0
  って出るのは何故?

  957: デフォルトの名無しさん:2018/11/06(火) 15:53:15.52 ID:4bA2Iy3p
  >>956
  謎ですねえ.
  >cmd /v:on
  >set n=!
  >set /a "a=!n!(123^456)"
  0
  >set /a "a=!n!(123^^456)"
  0
  >set /a "a=!n!(123^^^456)"
  0
  >set /a "a=!n!(123^^^^456)"
  オペランドがありません.
  >set /a "a=(123^456)"
  435
  >set /a "a=(123^^456)"
  オペランドがありません.

  958: デフォルトの名無しさん:2018/11/06(火) 15:56:47.52 ID:4bA2Iy3p
  たぶん式に遅延変数があると2回展開してるんじゃ?

  959: デフォルトの名無しさん:2018/11/06(火) 16:35:24.41 ID:4bA2Iy3p
  遅延変数が無くても.
  NOT演算がある時に再エスケープ(^^)が必要みたいね.
  >cmd /v:on
  >set /a "a=!(123^123)"
  0
  >set /a "a=!(123^^123)"
  1
  >set /a "a=(123^123)"
  0
  >set /a "a=(123^456)"
  435
  >
  一番上の式は !(123123) で 0 になってると思う.

  960: デフォルトの名無しさん:2018/11/06(火) 16:48:03.38 ID:4bA2Iy3p
  遅延無しの環境では二重引用符だけでエスケープは要らないようだ.
  >cmd /v:off
  >set /a "a=!(123^123)"
  1
  >

  961: デフォルトの名無しさん:2018/11/07(水) 07:55:29.42 ID:BI4/Q6Ue
  遅延モードでは式の中に ! 文字があると展開の処理が違うんだろう.
  だから ^ 文字の扱いも変化する.

  962: デフォルトの名無しさん:2018/11/08(木) 07:17:29.99 ID:9iJL9tpZ
  @ECHO OFF
  REM 単項演算子 ! を使用しないNOT演算.
  SETLOCAL ENABLEDELAYEDEXPANSION
  FOR /L %%I IN (-3, 1, 3) DO (
  SET /A A=%%I
  SET /A "B=~(A|-A)>>31&1"
  ECHO A=!A! , NOT A=!B!
  )
  PAUSE
  IF使えば簡単だけど.

  963: デフォルトの名無しさん:2018/11/09(金) 09:53:58.29 ID:3Y5lMbnv
  %~nx0 が変だ.
  >dir /b
  test.bat
  >type test.bat
  @echo file="%~nx0"
  >test
  file="test.bat"
  >"test"
  file="test"
  >

  964: デフォルトの名無しさん:2018/11/09(金) 11:09:53.39 ID:3Y5lMbnv
  どうも先頭の引用符が怪しい.
  >.\"test"
  file="test.bat"
  >test"
  file="test.bat"
  >"test
  file="test"
  >

  965: デフォルトの名無しさん:2018/11/09(金) 17:30:33.44 ID:3Y5lMbnv
  >te"st
  file="test.bat"

  966: デフォルトの名無しさん:2018/11/09(金) 19:53:31.92 ID:BPg47oOK
  test.exe.bat

  967: デフォルトの名無しさん:2018/11/09(金) 21:20:20.98 ID:3Y5lMbnv
  >t"E"s"T"
  file="test.bat"
  >"t"E"s"T"
  file="t"E"s"T"
  先頭が引用符だと.
  %~nx0 は入力丸写しの.
  拡張子無視のバカ仕様らしい.

  968: デフォルトの名無しさん:2018/11/14(水) 01:02:30.37 ID:fbx51wpG
  7z の個別連続圧縮のやり方を教えてください.
  あまり詳しくなくてネットを見て見よう見まねで作ったので自分でもよく分かってません.
  @echo off
  set exe7z="C:\Program Files\7-Zip\7z.exe"
  :start
  if "%~1"=="" exit /b
  %exe7z% a -r -mmt=on -mx=9 -ssw -txz "%~dpnx1.7z" "%~1"
  shift
  goto start
  このままだと作成された 7z のファイル名に元ファイルの拡張子が付いてしまいます.
  dpn1 だとファイル名の拡張子は消えるけど, 作成された 7z の中のファイルは拡張子が消えた状態になってしまいます.
  ファイル名から元の拡張子を消し, 中のファイルは拡張子を残したままってどこを変えればよいのでしょうか?

  969: デフォルトの名無しさん:2018/11/14(水) 06:32:53.24 ID:JBsUV7Ak
  単に7zipのcliコマンドオプションの使い方で, バッチと関係ないなあ...

  970: デフォルトの名無しさん:2018/11/14(水) 06:39:30.75 ID:vPR2E9Wi
  -txz だと書庫のヘッダににファイル名の情報は無い.
  書庫名を変えて開くと中のファイル名も同じく変わるだけ.
  中身は同じ.

  971: デフォルトの名無しさん:2018/11/14(水) 06:57:09.62 ID:JBsUV7Ak
  要するにxzファイルフォーマットの限界だな. ファイル名を保持する機能が無い.

  972: デフォルトの名無しさん:2018/11/14(水) 07:10:28.19 ID:vPR2E9Wi
  だから複数ファイルの圧縮も出来ない.

  973: デフォルトの名無しさん:2018/11/15(木) 02:26:56.15 ID:/pNu0fIl
  できないのか. 残念.

  974: デフォルトの名無しさん:2018/11/15(木) 03:44:20.67 ID:sPg3U71k
  xzじゃないとダメなの?
  zipやrarや7zにしちゃダメなの?

  975: デフォルトの名無しさん:2018/11/15(木) 04:23:57.43 ID:eQKfIPvp
  反応遅っっ. w.

  976: デフォルトの名無しさん:2018/11/15(木) 04:24:41.49 ID:MW4yWYe4
  >>968 が何をしたいのか分からん.
  -txz なのに拡張子が .7z になってる.
  なぜ .xz にしないのか.

  977: デフォルトの名無しさん:2018/11/19(月) 19:31:45.62 ID:qVZWX1fW
  ところで, 結局, DOSでの圧縮はどの形式がおすすめ?

  978: デフォルトの名無しさん:2018/11/19(月) 20:03:49.96 ID:Qq88xGOU
  DOSなんてもう使ってないし.

  979: デフォルトの名無しさん:2018/11/19(月) 20:26:27.04 ID:8P0ZFwQc
  >>977
  lzh 一択.

  980: デフォルトの名無しさん:2018/11/19(月) 23:22:31.08 ID:uf9ZfFD/
  >>979
  右に同じ.

  981: デフォルトの名無しさん:2018/11/20(火) 03:39:49.15 ID:rmOcRzV5
  lzhは脆弱性があるから使うべきではない.
  zip一択.
  DOSで使えるzipアプリがあるかどうかは知らん.

  982: デフォルトの名無しさん:2018/11/20(火) 06:48:32.61 ID:TCh3BaRv
  >>981
  > lzhは脆弱性があるから使うべきではない.
  脆弱性は対策されてるよ.
  使用しない方がいいと言うのはlzhの脆弱性じゃなくてアンチウイルスソフトが対応しないから.

  983: デフォルトの名無しさん:2018/11/20(火) 09:38:17.04 ID:O/AOgigh
  そもそもアンチウィルスソフトに対応してもらえないってのが脆弱性でしょ.
  事実上公式最新版のUNLHA.DLLはソース非公開で.
  ソース公開してる古いDOS版はヘッダ構造体がサイズ固定で静的に確保されてるから,
  例えばDOSでは考慮しなくて良かった数千文字の.
  長いファイル名があるとバッファオーバーランを引き起こす.
  アンチウィルスソフトによってはDOS版のソースを使ってるので.
  バッファオーバーランを発生させるようなヘッダを不正扱いして.
  該当書庫のそれ以降の圧縮ファイルの検査をスルーするものがあるが,
  そのような検査されない圧縮ファイルであっても事実上公式のUNLHA.DLLでは解凍できてしまう.
  検査はされないが解凍できてしまうようなファイルにウィルスしこまれたら大変ってのが「脆弱性」なわけ.
  アンチウィルスソフトが対応してくれないなら脆弱性は対策されてるとは言えないっしょ.
  対処法は誰かが移植性の高いソースコードを書いて公開するぐらいしかないよーな.

  984: デフォルトの名無しさん:2018/11/20(火) 21:31:14.05 ID:9NuM4Bsa
  >>983
  どっちもねーよアホンダラ.
  LHA は日本独自の圧縮アルゴリズム&zipに追い越された.
  いわゆるガラパゴス技術. いらん.
  数年前まで役所が .lzh とかで何かしら添付ファイル送ってくることがあって文句付けようかと思ったことがある.

  985: デフォルトの名無しさん:2018/11/20(火) 22:34:45.84 ID:7AOElbkD
  >>983
  今時16bit環境なんかで使ってる奴いないだろ.
  unlha32.dllは脆弱性の対策されてるから言いがかりレベル.

  986: デフォルトの名無しさん:2018/11/20(火) 22:42:17.88 ID:U4aYcO/c
  純粋なDOS(16bit)を使っててウィルスが怖いなんて思う人いるのか.

  987: デフォルトの名無しさん:2018/11/20(火) 22:44:33.63 ID:htpgQQTF
  win95か98だとしたら背筋が凍る.

  988: デフォルトの名無しさん:2018/11/20(火) 22:50:05.05 ID:U4aYcO/c
  >>987
  いやだからDOSを狙ったウィルスなんかが今時流通してるって思うのかってことさ.

  989: デフォルトの名無しさん:2018/11/21(水) 00:32:47.70 ID:dG4a7MEF
  >>985
  unlha32.dllが対策したのはバッファーオーバーランそのものについてだけ, ね.
  >>983のは, 同じ書庫データなのにソフトによって取り扱い方に違いができてしまった事が原因で,
  言わば仕様とかlzhのエコシステム全体の不具合だから.
  unlha32.dllだけ対策しました, アンチウイルスソフトが対策しねーのが悪いって喚いてもしょうがないのよ.

  990: デフォルトの名無しさん:2018/11/21(水) 06:43:17.14 ID:sFoC6dAL
  >>989
  馬鹿なの?
  そんなのlhzに限らずどんな書庫ファイルでも同じだろ.
  単にアンチウイルスソフトが対応しなかっだけの話.
  まあグローバルに展開してるマカフィーやシマンテックから見たら極東でちょっと流行ってただけのファイルフォーマットにいちいち対応してられるかよって思うのも無理はないわな.

  991: デフォルトの名無しさん:2018/11/21(水) 08:07:38.87 ID:dG4a7MEF
  >>990
  いや, lzhのヘッダは安全性そっちのけで拡張性と互換性を優先した結果,
  論理的な最大ヘッダサイズが4ギガバイト(要するに制限がない)とか酷い事になってるからねぇ・・・・・・.
  例えば最大で64キロバイト程度のzipなんかと同等に並べるのはちょっと無理じゃねーかと.

  992: デフォルトの名無しさん:2018/11/21(水) 09:43:13.45 ID:nqncv/qX
  >>990
  https://micco.mars.jp/vul/2010/mhvi20100425.htm

  993: デフォルトの名無しさん:2018/11/21(水) 09:46:53.64 ID:sFoC6dAL
  >>991
  それの何が問題なんだ?
  まさか4GBのメモーがないとヘッダーが読めないとか思ってるのか? w.

  994: デフォルトの名無しさん:2018/11/21(水) 09:50:12.82 ID:sFoC6dAL
  >>992
  だからウィルス対策ソフトが対応してないって話だろ.
  何回ループすれば理解できるんだよ. w.

  995: デフォルトの名無しさん:2018/11/21(水) 11:07:43.06 ID:dG4a7MEF
  >>993
  おいおい・・・・・・.
  64キロバイトを一括でメモリに読み込んで処理すんのと.
  4ギガバイトを逐次読み込んで処理しなきゃいけないのとでは.
  実装の難易度もコストも全然違うんだけど・・・・・・.
  初心者でもわかりやすいところで言えば.
  64キロバイトの方はメモリが潤沢にあれば静的なメモリ確保でもいいけど.
  4ギガバイトの方は普通は動的なメモリ確保が必須になるし.

  996: デフォルトの名無しさん:2018/11/21(水) 11:11:51.13 ID:guoVPW2S

  997: デフォルトの名無しさん:2018/11/21(水) 11:49:46.67 ID:eSuVM7gW

  998: デフォルトの名無しさん:2018/11/21(水) 12:29:53.03 ID:sFoC6dAL
  >>995
  で, 何が問題なの?
  自分には実装できねーから糞だって話か? w.

  999: デフォルトの名無しさん:2018/11/21(水) 12:35:19.04 ID:sFoC6dAL
  そもそも動的メモリー確保が難しいとかどんだけレベル低いんだよ. w.

  1000: デフォルトの名無しさん:2018/11/21(水) 12:36:54.21 ID:sFoC6dAL
  と言う事でバカの頭に脆弱性があっただけ.
  終わり. w.

  1001: 1001:Over 1000 Thread
  このスレッドは1000を超えました.
  新しいスレッドを立ててください.
  life time: 619日 22時間 49分 43秒.

  1002: 1002:Over 1000 Thread

  * 1002コメント_* 374KB
  * 全部_*前100_*次100_*最新50
  *スマホ版*_*掲示板に戻る*_*ULA版*
  レス数が1000を超えています. これ以上書き込みはできません.
  read.cgi ver 07.2.2 2018/10 Walang Kapalit *
  Cipher Simian *


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