[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 04/09 05:32 / Filesize : 301 KB / Number-of Response : 1052
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【.cmd】 バッチファイルスクリプト %12 【.bat】



1 名前:デフォルトの名無しさん mailto:sageteoff [2017/03/11(土) 13:47:11.66 ID:2LSSeyH1.net]
拡張子が .cmd または .bat のバッチファイルのスクリプティング(プログラミング)に関わる
質問,テクニック(JScript,Perl等の埋め込みなど含む),関連情報のためのスレです。

※何でも無理矢理バッチでやろうとせず、WSH等の使用も検討しましょう。
前スレ
【.cmd】 バッチファイルスクリプト %11 【.bat】©2ch.net
echo.2ch.net/test/read.cgi/tech/1424858999/

それ以前の過去スレ
%10 peace.2ch.net/test/read.cgi/tech/1374205515/
%9  toro.2ch.net/test/read.cgi/tech/1335015478/
%8  toro.2ch.net/test/read.cgi/tech/1315844420/
%7  hibari.2ch.net/test/read.cgi/tech/1298873550/
%6  hibari.2ch.net/test/read.cgi/tech/1277465356/
%5  pc12.2ch.net/test/read.cgi/tech/1242268171/
%4  pc12.2ch.net/test/read.cgi/tech/1229955189/
%3  pc11.2ch.net/test/read.cgi/tech/1217860043/
%2  pc12.2ch.net/test/read.cgi/tech/1197881068/
%1  pc11.2ch.net/test/read.cgi/tech/1178281991/

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

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

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

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

179 名前:デフォルトの名無しさん mailto:sage [2017/08/29(火) 15:34:02.29 ID:ZSKrJS0x.net]
>>175
Flexible Renamer

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

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

182 名前:デフォルトの名無しさん mailto:sage [2017/08/29(火) 20:06:42.61 ID:KnTCuJQc.net]
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!"

183 名前:デフォルトの名無しさん mailto:sage [2017/08/31(木) 16:38:58.30 ID:omILiWW+.net]
>>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



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

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

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

187 名前:デフォルトの名無しさん mailto:sage [2017/09/03(日) 22:03:48.56 ID:BJjXydYg.net]
cd \
pushd D:\abc
setlocal
popd

としても元の \ に戻らなかった

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

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

190 名前:たか []
[ここ壊れてます]

191 名前:デフォルトの名無しさん mailto:sage [2017/09/16(土) 05:02:43.18 ID:cRJ1WDqm.net]
今さらバッチファイル入門て…
余計な被害者増やさずPowerShellにしろよ
これだからIT後進国は

超入門コマンドプロンプト:バッチコマンドで定型処理を行う (1/3) - @IT
www.atmarkit.co.jp/ait/articles/1709/15/news034.html
017年09月15日 05時00分 公開

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

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



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

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

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

197 名前:デフォルトの名無しさん [2017/09/17(日) 11:23:06.30 ID:jtG62g+O.net]
最近、フリーソフトとかの小さいやつの管理がめんどくさくなって
メニュー代わりにバッチファイルを使うことにしたんですよ。
全部をVHDに入れてマウントなんで、持ち運びは仮想ディスクファイル1個をコピーするだけ。
起動が素早いのがメリット。
アイコンが出ないのがデメリット。
アイコン出そうと思ったら全環境で共通のドライブ名に固定してショートカットを使ったらいいと思うけど。

プログラムの入ったフォルダ
Program Files 3

バッチファイルの入ったフォルダ
Program Link

[FirefoxPortable.bat]
set pathname1=%~d0\Program Files 3\FireFoxPortable52.0.2\FirefoxPortable\FirefoxPortable.exe
start "" "%pathname1%"

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

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

200 名前:デフォルトの名無しさん mailto:sage [2017/09/18(月) 00:06:56.51 ID:AVBMNnfo.net]
短いファイル名に関していくつか質問

1 短いファイル名はダブルクオーテーションで囲まなくても実行可能?
2 短いファイル名は取得して一ヶ月経っても変動せずにそのパスを実行出来る?

201 名前:デフォルトの名無しさん mailto:sage [2017/09/18(月) 23:50:36.04 ID:2dThcY7y.net]
>>196
「1」は、多分可能
「2」は、他にファイルが出来なければが前提かと

「dir c:\*1」と「dir c:\*1 /x」を実行して挙動を確かめて下さい。

202 名前:デフォルトの名無しさん mailto:sage [2017/09/19(火) 00:09:36.87 ID:I5t298fo.net]
少なくともNTFSではファイルの情報としてショートファイルネームも格納されるから
ファイルが存在したままある日突然名前が変わることはないはず

そのファイルを削除して似たようなロングファイルネームの別のファイルを作った時
同名だけど別のファイルが出来てしまう事はありえる

203 名前:196 mailto:sage [2017/09/19(火) 01:33:17.50 ID:FIGNw+kF.net]
レスありがとうございます。
ちなみに自分がやりたかったのは↓と同じケ



204 名前:ースで自作のbatをタスクスケジューラに登録したいというものでした。

schtasksで半角スペースを含むパスを実行させたい (DOSプロンプト活用相談室LOG)
http://fpcu.on.coocan.jp/dosvcmd/bbs/log/taskkillstart/at/4-0842.html

"を\"と書いてエスケープさせるやり方もあるようですがそちらではbatにダブルクォーテーションで囲った引数を渡すと不可解な動作をすることがあり上手くいきせんでした。

batのパスにスペースを含んだ場合 起動しない
batのパスにスペースを含まない場合 %~dp0を実行したときにbatのフォルダパスの頭にカレントディレクトリの文字列も追加される
[]
[ここ壊れてます]

205 名前:デフォルトの名無しさん mailto:sage [2017/09/19(火) 02:17:59.79 ID:Lhe/hdFe.net]
mklinkやsubstを使って違う名前でアクセスするのはどうなのでしょう
うまくいくかどうかわかりませんが

ファイル名フォルダ名に空白や%^!みたいな記号があると困ることが多いですね

206 名前:デフォルトの名無しさん mailto:sage [2017/09/20(水) 03:12:37.88 ID:aIPv0JYK.net]
>>199
この書き方に準じていないだけでは?

A Scheduled Task Does Not Run When You Use Schtasks.exe to Create It and When 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 containing spaces\script.bat arguments" /sc once /sd 07/29/2003 /st 10:01

成功例
schtasks /create /tn "my task" /tr "\"c:\foldername name containing spaces\script.bat\" arguments" /sc once /sd 07/29/2003 /st 10:01

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

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

209 名前:デフォルトの名無しさん mailto:sage [2017/09/21(木) 11:18:59.39 ID:WXZB4PjF.net]
%CMDCMDLINE%はどうなってる?

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

211 名前:デフォルトの名無しさん mailto:sage [2017/09/21(木) 18:35:03.44 ID:uKBRYTKY.net]
test

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

213 名前:デフォルトの名無しさん mailto:sage [2017/09/24(日) 20:04:30.28 ID:0vysq0yQ.net]
基本的に引数の中の半角スペースはデリミタであり
そこより左に " が奇数個あればデリミタじゃなくなる

それに関しては \" とか ^" とかあっても関係ないんじゃね



214 名前:デフォルトの名無しさん mailto:sage [2017/09/25(月) 14:27:46.65 ID:aNTDK6ge.net]
>>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\"\""

これだと実行ファイルのパスにスペースがあっても問題ない

215 名前:196 mailto:sage [2017/09/26(火) 15:58:12.82 ID:dvSxVtoZ.net]
>>209
なるほど、直接batを登録するのではなくてcmdのほうを登録すれば良かったんですね
思いつ

216 名前:きませんでした
助かりました、ありがとうございます
[]
[ここ壊れてます]

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

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

219 名前:デフォルトの名無しさん mailto:sage [2017/10/12(木) 16:57:41.08 ID:c/LUECgg.net]
なんで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

220 名前:デフォルトの名無しさん mailto:sage [2017/10/12(木) 18:25:29.18 ID:c/LUECgg.net]
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

221 名前:デフォルトの名無しさん mailto:sage [2017/10/16(月) 01:07:49.23 ID:rrtzmh2c.net]
バッチファイル作っておいて以下のようなフォルダの名前の変更を毎回ダブルクリック一発で済ませたいのですが
いろいろやってみたのですが、というほどの力もなく
お知恵お貸し下さい

処理前のフォルダ名一覧
1008安住紳一郎の日曜天国
10月15日安住紳一郎の日曜天国
10月15日爆笑問題の日曜サンデー (1)
10月15日爆笑問題の日曜サンデー (2)

処理後のフォルダ名
1008安住紳一郎の日曜天国
1015安住紳一郎の日曜天国
1015爆笑問題の日曜サンデー (1)
1015爆笑問題の日曜サンデー (2)

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

223 名前:デフォルトの名無しさん mailto:sage [2017/10/16(月) 08:11:27.58 ID:GL/w6Jlo.net]
>>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%"



224 名前:デフォルトの名無しさん mailto:sage [2017/10/16(月) 23:00:12.58 ID:rrtzmh2c.net]
>>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]で何の問題もない。
これ以上無駄な時間を掛けても&シンプルな方が可読性がよい

225 名前:デフォルトの名無しさん mailto:sage [2017/10/16(月) 23:01:09.80 ID:rrtzmh2c.net]
2.
for a in ('標準出力 パイプ 標準入力') do
この部分、パイプの縦棒の左にくっついてる^は何者なのでしょう。。。初めて見ました。
アッ、日付部分が行頭だからか?いやfindstrに行頭オプションの/Bが付いてるし、そもそもパイプの左になぜ?
検索してみたのですがわからずここで冷や汗が出てきて
ウーンこれはなんなんだろう。そもそもメタ文字なのか銅貨さえわからない。
3.
そもそも何をしているのかというとradikoという

226 名前:vログラムでお気に入りのラジオ番組を録音しています。
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分ごとに切り分けられたものを再生してもけっこう大丈夫で、音楽だと気付く程度です。
いろいろ書いてしまいましたが頭が精一杯なのでとりあえずお礼申し上げ失礼ます
[]
[ここ壊れてます]

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

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

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

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

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

232 名前:デフォルトの名無しさん mailto:sage [2017/10/17(火) 09:05:40.81 ID:fpIKg5e5.net]
>>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:"検索文字列" の違いを教えてくれ。忘れた

233 名前:デフォルトの名無しさん mailto:sage [2017/10/17(火) 10:39:26.27 ID:AWu3veoe.net]
>>225
解説ありがとうございます
とりあえず日付の所いろいろやってみてるのですがうまく行かないままです。
正規表現といわず直接文字列を指定して | が有効になる



234 名前:ゥどうかというところから実験してます。

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
を読みました。読んだだけです。頑張ります
[]
[ここ壊れてます]

235 名前:デフォルトの名無しさん mailto:sage [2017/10/17(火) 11:38:46.09 ID:fpIKg5e5.net]
>""10月15日"|"10月16日""
"で""を囲えないしfindstrの正規表現で|は使えない
findstr /?

まともな正規表現を使いたければvbsやPowerShell、Perlとか別のスクリプトに行ったほうがいい
バッチだと"&"や"%"とかダメ文字があるし凝った事をやろうとするといずれ行き詰まる
急がば回れ

236 名前:デフォルトの名無しさん mailto:sage [2017/10/17(火) 22:45:54.56 ID:bWF1v8hX.net]
参考に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 || "対象フォルダなし");

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

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

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

240 名前:デフォルトの名無しさん mailto:sage [2017/10/18(水) 07:04:24.46 ID:G1+K6kx+.net]
>>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

241 名前:"!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%!"
[]
[ここ壊れてます]

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

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



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

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

246 名前:デフォルトの名無しさん mailto:sage [2017/10/19(木) 22:12:55.60 ID:JROgBEvY.net]
ザ・ワールド、時よ止まれ。

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

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

249 名前:デフォルトの名無しさん mailto:sage [2017/10/20(金) 23:41:00.84 ID:aZN6SiIl.net]
どの程度の自動化?

250 名前:デフォルトの名無しさん mailto:sage [2017/10/21(土) 08:56:40.19 ID:Nsvn2WYb.net]
>>238
何を自動化するん?

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

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

253 名前:名無しさん@そうだ選挙に行こう! Go to vote! [2017/10/22(日) 07:51:26.89 ID:eb/3UN8i.net]
>>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 で、該当する全フォルダ名を変換する



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

255 名前:名無しさん@そうだ選挙に行こう! Go to vote! mailto:sage [2017/10/22(日) 16:29:48.93 ID:rLFHcAK9.net]
>>244

ls <directory-name> -directory | ren -newname {$_.name -replace '^(¥d+)月(¥d+)日', '$1$2' }

lsの-filterやwhere-object使ってもいいけど


256 名前:の例の場合は不要だと思うよ []
[ここ壊れてます]

257 名前:デフォルトの名無しさん [2017/10/23(月) 07:20:31.59 ID:A3jhOkfm.net]
ls -directory | ren -WhatIf -newname {$_.name -replace '^(\d+)月(\d+)日', '$1$2' }

上記で、where-object が無いと、
変更されないフォルダまで、表示されるのが気持ち悪い

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

259 名前:デフォルトの名無しさん mailto:sage [2017/10/24(火) 18:41:12.61 ID:QQrV41zo.net]
PowerShellのスクリプトファイルの拡張子は普通.ps1を使うが
デフォルトではファイルの実行を許可してないし、
また許可後もダイレクトにファイル名を指定しても実行できない
って保険かけすぎで入門者には敷居が高いだろと思わないでもないなあ

>>247
where-objectを入れてみた
(まだ2時間ぐらいしかやってないんでもっといい書き方があるかも)
$re='^(\d+)月(\d+)日';ls -directory|? name -match $re|ren -whatif -newname {$_.name -replace $re,'$1$2'}

このスレ的にはアリアス使うなら、lsよりもdirが合ってる気もするけど

260 名前:デフォルトの名無しさん mailto:sage [2017/11/03(金) 20:22:18.43 ID:+gpl8JNW.net]
ここで聞くべきか迷ったのですが…

自分のマシンからリモートデスクトップで接続できるサーバー(確かWin2008R2)があって
そのサーバーと同じネットワーク内にクライアント端末(Win7)があります。

そのクライアント端末のプロセスをリモートデスクトップで接続したサーバーから確認することは可能でしょうか?
(サーバーには管理者権限で接続しています)

要はクライアント端末でtasklistコマンドを打った結果が見たいのですが。
ちなみにクライアント端末はDHCP設定なので起動のたびにIPアドレスが変わります…

今は1日に何度も遠くにあるクライアント端末まで行ってプロセスを確認しています。
1回だけ行ってIPアドレスをメモるぐらいなら全然構わないので何か方法があれば教えて下さい。

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

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

263 名前:デフォルトの名無しさん mailto:sage [2017/11/03(金) 22:47:57.34 ID:+QQUmgGP.net]
>>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アドレスを通知してもらう



264 名前:250 mailto:sage [2017/11/04(土) 18:18:26.62 ID:HSP2f8JH.net]
みなさん情報ありがとうございます。

来週になったらとりあえず>>252さんの方法を試してみます。(一番手軽なので…汗)
それでダメな場合は一日一

265 名前:直接IPアドレスを確認しにいく方式にします。
というのもpingのブロードキャストは現場のルールで禁止されてるっぽいので。
クライアント端末も特別な用途のためのものなのでタスク作ったり何かを仕掛けるのは厳しそうです。
仕掛けられれば業務はすごく楽になるんですけど「セキュリティ上問題が…」とか言われて突っぱねられる可能性大です。><
尚、pingブロードキャスト以外の方法でIPを知る方法については自分でも調べてみます。

どうもありがとうございます。助かりました!
[]
[ここ壊れてます]

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

267 名前:デフォルトの名無しさん mailto:sage [2017/11/05(日) 10:20:45.02 ID:rFS24mxQ.net]
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でもいいのですが教えてください。

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

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

270 名前:256 mailto:sage [2017/11/05(日) 12:18:29.39 ID:rFS24mxQ.net]
>>257
>>258
素早いお答えありがとうございます。

>>257
>set beforestr=^^"
>set afterstr=^^
ダブルクォーテーション消えました!
ありがとうございました。

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

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

273 名前:デフォルトの名無しさん mailto:sage [2017/11/06(月) 15:18:34.73 ID:K1roLwuw.net]
>>260 これじゃダメか?
ていうかダメな例を教えてほしい

for /f "delims=" %%i in (1.txt) do (
set a=%%i
setlocal enabledelayedexpansion
echo !a:^"=!>>2.txt
endlocal
)



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

275 名前:デフォルトの名無しさん mailto:sage [2017/11/06(月) 19:12:27.47 ID:Mdq5cGE3.net]
echo,とか、echo;とかで

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

if defined %2 echo 引数は2つです else echo 引数は1つです

277 名前:デフォルトの名無しさん mailto:sage [2017/11/07(火) 01:14:40.14 ID:xsgE2wk0.net]
if not '%2=='

278 名前:デフォルトの名無しさん mailto:sage [2017/11/07(火) 07:09:27.79 ID:4pg/kk0r.net]
>>264 ありがとう

for /f "delims=" %%i in (001.txt) do (
set "a=%%i"
setlocal enabledelayedexpansion
set "a=!a:"=!"
echo.!a!>>002.txt
endlocal
)

これで空行以外は完璧かな?

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

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

281 名前:デフォルトの名無しさん mailto:sage [2017/11/08(水) 00:22:28.07 ID:X1Aytah6.net]
for /f delims^=^ eol^=

282 名前:265 mailto:sage [2017/11/08(水) 00:40:11.94 ID:pQrS+Zxc.net]
>>266
バッチリでした!THANKS!

283 名前:デフォルトの名無しさん mailto:sage [2017/11/08(水) 19:40:30.74 ID:VTzaN0jn.net]
>>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"なら動く

結構知られていないんだよね。



284 名前:デフォルトの名無しさん mailto:sage [2017/11/08(水) 22:40:59.50 ID:ZHWfUJ7q.net]
>>270 ありがとう。完全に動作しました

そもそも eol の既定値が ; だとかヘルプに書いてないぞ
ちなみに "eol=" とすると eol が空になるのかと思ったら
今度は行頭に " があると読み飛ばすようです
何なんだ、これは。for 文のバグですかね

285 名前:デフォルトの名無しさん mailto:sage [2017/11/09(木) 12:26:56.09 ID:NEfZ8eBs.net]
@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

286 名前:デフォルトの名無しさん mailto:sage [2017/11/10(金) 12:50:53.03 ID:5BeFn7Xg.net]
一時的なwindows資格情報の付与
付与→(再起動)→ポップアップを閉じるまで作業→(再起動)
の流れをバッチ実行一発で済ませたいと思ってる。
(○.bat)
cmdkey 書き込み
copy **.batを配置
schtasks 再起動後のタスク登録(**.bat実行)
shutdown 再起動
↓ (ログイン)
(**.bat)
echoでmsgbox表示(閉じるまで待つ)
cmdkey /delete ←ここで資格情報が消えない
schtasks /Delete タスク消去
del /f "%~dp0 自己消去

タスクは一応highest
タスク実行だとcmdkey通らないとかある?

bat素人で何が原因で消えないのかわからない・・・
ポップアップ表示中にcmd開いてcmdkey打つとちゃんと消える

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

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

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

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

291 名前:デフォルトの名無しさん [2017/11/12(日) 14:54:34.48 ID:GpB3XqQ3.net]
動画形式の勉強など、自分でやるものじゃない

動画編集アプリを使うべき

292 名前:デフォルトの名無しさん mailto:sage [2017/11/12(日) 14:57:17.00 ID:43gC7oaU.net]
今の編集アプリだとmp4

293 名前:再エンコしなくてもそのまま繋げられるのかな? []
[ここ壊れてます]



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

295 名前:デフォルトの名無しさん mailto:sage [2017/11/12(日) 15:14:20.67 ID:Xj6DjuPw.net]
ffmpegでええやん

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

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

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

exit /r や return文で

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

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

301 名前:ファイルアクセス監視 [2017/12/23(土) 19:00:05.09 ID:Jw1Bivzx.net]
ダウンロードしたローカルアプリ(Jane Styleなど)が
重要な場所のローカルファイルから情報を盗もうとしてないかどうか念のため監視したいのですが、

https://technet.microsoft.com/ja-jp/sysinternals/handle.aspx
このdosで使える handle は出力ファイル名の日本語が文字化けするんですが、何かいい方法ないですか?

文字化け以外に関しては非常に便利です
出力をdosで加工してエクスプローラーのログを除外して、ユーザー+プロセス+ファイル名が初登場の時だけ出力してます
これでもし見慣れないファイルアクセスがあったら目立ちます(GUI系はリアルタイムで消えるので)

302 名前:デフォルトの名無しさん mailto:sage [2017/12/23(土) 22:54:57.75 ID:FPRjmoIB.net]
ファイル名のようなシステム要件には、半角英数字だけを使う。
半角空白も使うな。Mac でバグる

すべてのアプリの開発者が、多国語のファイル名では、テストしていないから、
多くのアプリでバグる

特に、書庫を使う、圧縮解凍アプリでバグる

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



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

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

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

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

…ある??

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

309 名前:デフォルトの名無しさん mailto:sage [2017/12/26(火) 01:23:11.58 ID:9+DFjrUc.net]
>>296
そりゃ分かるんだけど…。
UNIX の bash だっておかしいところが結構あってさ。
でも「構文解析が未熟な時代、全てを(記号ですら)コマンドだと置いた結果」という説明の仕方ができるそうな。
C言語の仕様だっていい加減後付けが多い。でも説明を試みた結果がANSI。無理が多いけど。

Windows界隈ってそういうのが貧しいと思う。
スレ違いだけど、PowerShell も Core とか言い出してからなんかおかしくないか?

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

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

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

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



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

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

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

317 名前:デフォルトの名無しさん mailto:sage [2017/12/28(木) 22:46:38.96 ID:8hIgR6GI.net]
bash が最近のプロダクトだとか…ヨボヨボの痴呆が入ったおじいちゃんか?
UNIX で bash が出たのって 20世紀なんだが。

>>299
これのことか?明らかに違う。
> 引用符が必要な特別な文字は次のとおりです:
> <スペース>
> &()[]{}^=;!'+,`~

>>300
自分が新規で書けるなら VBScript でいい。
「これは例外、あれも例外、それも例外」なブツなんか触りたくない。
そんな時間があるなら生産的な言語に費やしたい。
触らざるを得ないからイラつく。阿呆か。

PowerShell は Windows の自動化から管理系を抜き出した方向に行こうとしているので何だかねぇ…

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

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

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

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

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

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



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

325 名前:デフォルトの名無しさん mailto:sage [2017/12/30(土) 17:45:4 ]
[ここ壊れてます]

326 名前:8.22 ID:RVllgMXp.net mailto: バッチファイルなのになんでVBの話になるのん []
[ここ壊れてます]

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

ってことかなるほど。

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

329 名前:デフォルトの名無しさん mailto:sage [2018/01/03(水) 20:04:05.34 ID:NAv6VFfd.net]
>>313
元を辿ってみると、>>297が話を逸らしたせいだ
そこからどんどん逸れてvbに行き着いた

>>315
batに埋め込めるのはjscript(条件コンパイルの構文がbatとうまい具合にかみ合った)だけでvbscriptは無理

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

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

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

333 名前:デフォルトの名無しさん mailto:sage [2018/01/13(土) 16:32:17.66 ID:9pJBMU57.net]
>>319
【最強CUI】PowerShell -Part 2 [無断転載禁止]©2ch.net
https://mevius.5ch.net/test/read.cgi/tech/1480109402/



334 名前:デフォルトの名無しさん [2018/01/18(木) 18:41:19.43 ID:lAsosfYH.net]
どうしても分からないので質問致します。


@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%

335 名前:デフォルトの名無しさん [2018/01/18(木) 18:41:39.14 ID:lAsosfYH.net]
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
と無効な引数と言われてしまい動画の吸い出しが出来ません
完全に手詰まりなため、丸投げにはなってしまいますがご教授いただければと思います
よろしくお願いします

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

337 名前: []
[ここ壊れてます]

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

339 名前:デフォルトの名無しさん mailto:sage [2018/01/18(木) 19:34:30.33 ID:pm/tv2ru.net]
170のやつを適当に書き直したら動いたよ

for /F tokens^=2^ delims^=^" %%I in ('type %HTML%^|find /I "data-sourcefile"') do set "TARGET=%%~I"

340 名前:デフォルトの名無しさん [2018/01/18(木) 19:58:03.19 ID:lAsosfYH.net]
>>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

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

何度もありがとうございます

342 名前:デフォルトの名無しさん mailto:sage [2018/01/29(月) 01:16:37.30 ID:s5lQXlw3.net]
echo abc 1>x1 1>x11 2>x2 3>x3

とするとDOS窓が応答しなくなった
x11 x2 x3 ファイルができるが x1ファイルはできない

343 名前:デフォルトの名無しさん mailto:sage [2018/01/29(月) 14:21:26.57 ID:e8Iu9+Yp.net]
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/



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

345 名前:デフォルトの名無しさん mailto:sage [2018/01/29(月) 16:22:04.20 ID:LZ9wDs2K.net]
自分用に書いたbatを流用してみた
多分こんな感じで動くはず

https://pastebin.com/zEpvpdCa

346 名前:デフォルトの名無しさん mailto:sage [2018/01/30(火) 00:28:24.66 ID:fZrZLUfh.net]
>>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!"

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

348 名前:デフォルトの名無しさん mailto:sage [2018/01/30(火) 16:28:50.07 ID:/nodnUUg.net]
>>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 に良きにはからってもらう

349 名前:デフォルトの名無しさん [2018/01/30(火) 17:10:39.08 ID:25OUwAYA.net]
>>332
>>334
ありがとうございます!
150GBくらいあるから、まだ展開し終えてないけど、
動き出しました。

実際のcompの中のa,b,c,・・・フォルダの中のzipやrarの名前は、
今のところ、下記みたいにフォルダの文字列含んでて、階層を上にしてもよかったかなと思いつつ、


350 名前:例外も出てくるかもしれないので、このまま走らせてみます。
しっかり解凍しだしてフォルダ生成してくれてます。



D:/
├comp/
│ └ a/
│   └ a111.zip
│   └ a222.zip
│ └ b/
│   └ xx1b.rar
│   └ xx2b.rar
│ └ c/
│   └ cttt.zip
│   └ crrr.rar
[]
[ここ壊れてます]

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

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

353 名前:デフォルトの名無しさん mailto:sage [2018/02/05(月) 04:53:11.12 ID:j3KUW6ez.net]
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の設定が地味に面倒になってしまうので回避したいのですが、何か良い方法はないでしょうか?



354 名前:デフォルトの名無しさん mailto:sage [2018/02/05(月) 05:04:15.80 ID:j3KUW6ez.net]
>>338 追記
パスに空白を含む場合も問題ですが、
 set testExe="D:\abc\test.exe"
のように空白を含まない場合には
 ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っています。
と言われてエラーになるので、それも含めてなんとかしたいという点を書き忘れていました。

「FOR文でフルパスでコマンドを実行したい場合、どうすればよいのでしょう」というのが根本的な質問です。

355 名前:デフォルトの名無しさん mailto:sage [2018/02/05(月) 05:55:25.28 ID:j3KUW6ez.net]
すみません。>>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
---

問題点や、もっとスマートな方法があれば、教えていただけると助かります。

356 名前:デフォルトの名無しさん mailto:sage [2018/02/05(月) 08:19:13.38 ID:ETXmgzVd.net]
>>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

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

358 名前:デフォルトの名無しさん mailto:sage [2018/02/05(月) 10:47:37.64 ID:ETXmgzVd.net]
こっちのがいいかも
前に似たようなネタがあったような

set testExe="D:\a bc\test.exe"
for /f "tokens=3" %%a in ('cmd /s /c "%testExe% --help | findstr "TargetStr""') do (

359 名前:デフォルトの名無しさん mailto:sage [2018/02/05(月) 11:16:40.07 ID:j3KUW6ez.net]
>>341
できました!なるほど、startを使えばよかったのですね・・・。ありがとうございます。

>>342
なんなんでしょうね。仕組みがよくわからないです・・・。どなたか解説を・・・。

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

361 名前:デフォルトの名無しさん mailto:sage [2018/02/05(月) 11:37:48.40 ID:j3KUW6ez.net]
>>343 >>345
重ねてありがとうございます。
cmdの場合は以下でうまくいくようです

362 名前:

set testExe="D:\a bc\test.exe"
FOR /F "tokens=3" %%a IN ('cmd /c %testExe% --help ^| findstr "TargetStr"') DO (
[]
[ここ壊れてます]

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



364 名前:デフォルトの名無しさん mailto:sage [2018/02/05(月) 14:11:13.29 ID:ETXmgzVd.net]
やっと思い出したぞ裏技w
前後の端にダミーの二重引用符 ^" を付けるんだった
>>347 のおかげで思い出したぜ

set testExe="D:\a bc\test.exe"
for /f "tokens=3" %%a in ('^"%testexe% --help ^| findstr "targetstr"^"') do (

365 名前:デフォルトの名無しさん mailto:sage [2018/02/06(火) 13:18:25.70 ID:m2OYikdE.net]
>>347-348
できました。なるほど、そういう解釈がされるんですね・・・。

バッチってほんと思わぬところでひっかかりますよね。とても勉強になりました。ありがとうございます。

366 名前:デフォルトの名無しさん [2018/02/07(水) 10:59:47.18 ID:fDqCQtuz.net]
VBでプログラムを作っているのですが、行き詰ってしまったので質問させていただきます。

バッチでiniファイルを読み込み、iniから取得したデータを格納した変数をVBのソース内で使いたいのですが可能ですか?
exe形式での納品となるのでiniファイルの読み込みはどうしてもバッチ内で行いたいのです。
ちなみに処理の流れとしては、iniファイル読み込み→exeファイル実行となっています。

どなたかご教授ください。よろしくお願いいたします。

367 名前:デフォルトの名無しさん mailto:sage [2018/02/07(水) 11:12:08.68 ID:fDqCQtuz.net]
申し訳ございません。

バッチでiniファイルを読み込み、iniから取得したデータを
格納した変数をVBのソース内で使いたいのですが可能ですか? ×
VBのソース内の変数に格納したいのですが可能ですか? ○

でした。

368 名前:デフォルトの名無しさん mailto:sage [2018/02/07(水) 11:43:25.21 ID:LQaGrglb.net]
バッチで、ini ファイルを読み込み、必要な値を取り出して、
それらを引数にして、exe を起動する

そして、exe 内では、引数から読み込んだ値を使う

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

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

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

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

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



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

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

376 名前:デフォルトの名無しさん mailto:sage [2018/02/12(月) 12:02:40.25 ID:OYWjTvif.net]
ascii.jp/elem/000/001/630/1630041/
Windows 10 RS4に追加された「curl」と「tar」コマンド

って curl と tar が追加されるんだ
PowerShell にも curl コマンド(エイリアス)があってややこしさが増すな
でも、標準で使えるようになるのはバッチファイル使ってる身とすれば
嬉しくはある

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

378 名前:デフォルトの名無しさん [2018/02/18(日) 16:07:03.48 ID:OqSvNe2j.net]
ファイル圧縮バッチを
hta の画面にドロップするだけで実行するやつ作った
https://medaka.5ch.net/test/read.cgi/csaloon/1518353191/843-846

ファイルをバッチファイルにドロップして引数受け取りは普通にあるけど
ファイル名の一部を文字列としてドロップしても起動されないのでこういう方法を取った。

379 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 16:25:37.39 ID:ZqWPhgUg.net]
>>360
Windows10 なら、WSL で、MS Store から、Ubuntu 16.04 LTS をダウンロードすれば、
curl, tar も入っている

他のLinux のコマンドも、一杯ある

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

381 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 19:20:27.56 ID:F2O3xW/S.net]
普通に使える

ubuntu run curl --help

382 名前:デフォルトの名無しさん mailto:sage [2018/02/19(月) 04:53:30.17 ID:xIEc0S27.net]
Linux(Ubuntu)側のbash、Windows側のPowerShell・コマンドプロンプトから、
相互のアプリ・コマンドを実行できる

相互のパイプも、つなげられる

つまり、Linux側のbashは、Windows10 の1つのアプリになっている

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



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

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

386 名前:デフォルトの名無しさん mailto:sage [2018/02/19(月) 23:44:41.90 ID:uhfYTKrf.net]
>>368
WSLはウェブサービス開発で使って、
実際にそのウェブサービスを動かす(=運用)するのは
ネイティブなLinuxの上だぞ。例えばAzure上のLinuxとか

運用に使ってくれるなっていうのは、WSL上でウェブサービスを動かして
実際に不特定の人にサービスを提供するなっていう意味だ

387 名前:デフォルトの名無しさん [2018/02/20(火) 00:06:58.45 ID:amqSspGZ.net]
WSL 上で、Webサーバーとかを常時接続させて運用できない

まあ最初から、自分のデスクトップPC を外部につなげて、
そんなサービスをする奴は、居ないだろ

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

389 名前:デフォルトの名無しさん mailto:sage [2018/02/20(火) 00:13:22.58 ID:XC4KsyV/.net]
>>370
端末のスタートアップスクリプトに使うのも用途外。

だから「使える」とか言うのは明らかに言い過ぎ。
お前馬鹿か?馬鹿だろ。

390 名前:デフォルトの名無しさん mailto:sage [2018/02/20(火) 00:40:00.47 ID:wdwe47Ke.net]
>>373
> 端末のスタートアップスクリプトに使うのも用途外。

端末のスタートアップスクリプトの話なんかしてないんだが、
何を言い出してるんだ? そもそも端末のスタートアップスクリプトの
意味わからねぇw


>>372
運用っていうから悪いんだよ。
「一般ユーザーに対してのウェブサービスの提供」
MSが使うなって言ってるのはこれだけだよ

391 名前:デフォルトの名無しさん mailto:sage [2018/02/20(火) 00:43:54.06 ID:wdwe47Ke.net]
うん、ちゃんと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.

サーバーアプリケーションを実行できるが、サーバーとしてのシナリオは推奨してないと

392 名前:デフォルトの名無しさん mailto:sage [2018/02/20(火) 00:46:37.66 ID:wdwe47Ke.net]
もう一つ、誰のためのものですか?という質問には


393 名前:
> Who is this for?
> This is primarily a tool for developers --
> especially web developers and those who work on or with open source projects.

第一に開発者、特にウェブ開発者やオープンソースプロジェクトを行ってる人

> 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 toolchain on Windows.

bashや多くのLinuxツールや言語を使いたい人のためのものと
[]
[ここ壊れてます]



394 名前:デフォルトの名無しさん mailto:sage [2018/02/20(火) 00:57:48.56 ID:amqSspGZ.net]
Windows のコマンドプロンプトから、
wsl bash -c "echo 'hello'"

出力結果 : hello

これぐらいのLinux の起動・実行・終了は、1秒!
定時処理ぐらい楽勝

サーバーみたいに常時実行しなければ大丈夫

395 名前:デフォルトの名無しさん mailto:sage [2018/02/20(火) 01:27:38.14 ID:wdwe47Ke.net]
>>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カーネルを模したサブシステム

396 名前:377 mailto:sage [2018/02/20(火) 01:41:53.13 ID:amqSspGZ.net]
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は、もう正規版だし、単なるアプリとして使う分には、問題ないだろ

397 名前:377 mailto:sage [2018/02/20(火) 01:44:26.24 ID:amqSspGZ.net]
書き忘れた

Windows のコマンドプロンプトで、

>where bash
C:\Windows\System32\bash.exe

398 名前:377 mailto:sage [2018/02/20(火) 01:53:46.64 ID:amqSspGZ.net]
Windows のコマンドプロンプトで、
>wsl echo hello

>ubuntu -c "echo hello"
>bash -c "echo hello"

これらは皆、hello が出力されるけど、書き方が異なる

wsl では、echo がサブコマンドになっているのかも

399 名前:デフォルトの名無しさん mailto:sage [2018/02/20(火) 01:58:14.32 ID:wdwe47Ke.net]
>>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 が出来た。

こんな所だと思う

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

401 名前:デフォルトの名無しさん mailto:sage [2018/02/20(火) 02:01:02.04 ID:wdwe47Ke.net]
>>381
ubuntu /?をするとわかるが、
ubuntu run echo helloが正しい

ubuntu.exeもwsl.exeもbash.exeもパラメータの扱いが違うだけで
ディストリ上のbashを実行していることは確かなようだ

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

403 名前:デフォルトの名無しさん mailto:sage [2018/02/20(火) 02:04:18.90 ID:wdwe47Ke.net]
ubuntuは

Usage:
<no args>
- Launches the distro's default behavior. By default, this launches your default shell.

と書いてあるから、bashじゃなくてデフォルトシェルが呼び出されるのかも。

うーん、どれを使うのが良い(汎用的)なのだろう?



404 名前:377 mailto:sage [2018/02/20(火) 02:51:43.01 ID:amqSspGZ.net]
wsl(Linux のbash)・PowerShell・コマンドプロンプトの3つが、
パイプでもつなげられるし、シームレスになってきて、CUI が統合されてきているから、

個別の話よりも、3つのCUI をパイプでどうつなげるかの方に、
話の焦点が移ってきている

405 名前:377 mailto:sage [2018/02/20(火) 03:10:41.01 ID:amqSspGZ.net]
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 を使うと良いかも

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

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

408 名前:デフォルトの名無しさん mailto:sage [2018/02/20(火) 19:54:28.42 ID:+0IlbXev.net]
へへーん、ぼくなんてまえからもってるもんねー

それはすごいねー w

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

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

411 名前:デフォルトの名無しさん mailto:sage [2018/02/20(火) 23:00:35.05 ID:wdwe47Ke.net]
>>390
Bash on Ubuntu on Windowsは、早く使いたかったんで
Inside Previewに変えてまで使ったよ。

GUIアプリには対応していないって書いてあったが仕組み上
GUIアプリ動くんじゃね?ってそこの頃はまだ情報が少なかったけど
実際に自分で試してxeyes は動いたーって2ちゃんねるに書いた記憶がある

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

413 名前:デフォルトの名無しさん mailto:sage [2018/02/20(火) 23:20:45.61 ID:wdwe47Ke.net]
嫌うのは相手の問題だからどうしようもない

俺に対する勘違いは、俺の問題だから解決する必要がある



414 名前:デフォルトの名無しさん mailto:sage [2018/02/21(水) 02:19:50.48 ID:PXpce9sQ.net]
パソコン先生、怒りの連投きたー

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

416 名前:デフォルトの名無しさん mailto:sage [2018/02/25(日) 16:07:21.04 ID:97AlcoLv.net]
例えば「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

のように表示できますが
この設定の接続先データベース(上記

417 名前:ではaaaDB)をコマンドで変更することは出来るのでしょうか? []
[ここ壊れてます]

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

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

420 名前:デフォルトの名無しさん mailto:sage [2018/02/28(水) 10:04:11.85 ID:xTKxXp1v.net]
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」の様な入力方法は有りますか?

421 名前:402 mailto:sage [2018/02/28(水) 10:18:01.40 ID:xTKxXp1v.net]
>>402
自己解決しました

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

423 名前:デフォルトの名無しさん mailto:sage [2018/03/17(土) 05:37:29.93 ID:nxO/ldT7.net]
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 }



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

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

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

427 名前:デフォルトの名無しさん mailto:sage [2018/03/17(土) 13:33:32.46 ID:T/uji2Bj.net]
ロジック真似すればいいだけじゃん
作ってくれじゃなくて教えてくれなんだから

Lispで回答されて読めないのは理解できるが
上のRubyくらいなら何の問題もないだろ

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

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

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

431 名前:デフォルトの名無しさん mailto:sage [2018/03/17(土) 18:08:03.98 ID:RY7g5/8I.net]
>>404
一応無理矢理ここまで作ってみたけど、ファイルの中身や指定文字列に特殊文字が入ってると
容赦なくコケるという地獄仕様のままなんで、限定的にしか使えないと思う。

 有意な最終行の内容にあわせて結果ファイルを出力するバッチ
 https://pastebin.com/mh9BZDCv

コケないようにやるにはどうすればいいのかな・・・。誰かうまいやり方があれば教えてくれ。

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

433 名前:デフォルトの名無しさん mailto:sage [2018/03/17(土) 18:22:19.25 ID:RY7g5/8I.net]
>>414
俺の選んだ手法がアホなだけかもしれんけど、バッチって基本的に制約多くて泣けてくるもんだから・・・( ノД`)

せっかくだしvscript版もどこかに貼ってもらえるとありがたいな。



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

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

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

437 名前:デフォルトの名無しさん mailto:sage [2018/03/17(土) 21:16:57.69 ID:Eknm4yJC.net]
@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

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

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

440 名前:デフォルトの名無しさん mailto:sage [2018/03/18(日) 04:17:33.81 ID:Cc3+LG/u.net]
>>420
wordってのがどれだけの頻度で出現するかで違ってくる
もし殆ど書かれてないのなら、最後が
--hogeならforループはほぼ2回分(wordが各行当たり前にあるのなら4回分)
hogeやなしならforループはほぼ1回分(wordが各行当たり前にあるのなら3回分)
wordと--wordの検索は一緒のループでできそうだけど

あと、データ中に、&|^%"'\や%date%を入れてみたけど問題ないみたいだ(win7)

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

442 名前:デフォルトの名無しさん mailto:sage [2018/03/18(日) 05:31:06.94 ID:5/8yH4g6.net]
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

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



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

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

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

447 名前:謔ネ []
[ここ壊れてます]

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

abc
:::def
/?
-- hoge

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

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

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

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

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



454 名前:デフォルトの名無しさん mailto:sage [2018/03/19(月) 02:29:30.41 ID:VE4HgUIn.net]
×デミリタ
○デリミタ

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

456 名前:デフォルトの名無しさん mailto:sage [2018/03/19(月) 09:11:01.79 ID:cAxnz/N1.net]
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 /a b=%%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

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

458 名前:デフォルトの名無しさん mailto:sage [2018/03/20(火) 08:03:38.21 ID:BuzmWDFp.net]
>>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で違った結果が出るところが面白いよ

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

460 名前:デフォルトの名無しさん mailto:sage [2018/03/20(火) 20:10:53.11 ID:to9q6Sr+.net]
コマンドプロンプトの画面で以下の<コマンド@>を入力すると現在の年月日時分秒が表示されるのですが
これを変数に入れるにはどうすれば良いのでしょうか?
以下の<コマンドA>ではうまく入りませんでした・・・


<コマンド@>
powershell -command "date -f yyyyMMddHHmmss"

<コマンドA>
set NICHIJI=powershell -command "date -f yyyyMMddHHmmss"

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

462 名前:デフォルトの名無しさん mailto:sage [2018/03/20(火) 23:18:51.64 ID:aHaiWzOW.net]
>>441
for /f "delims=" %%G in (‘powershell -command “date …”’) do set “NICHIJI=%%G"

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



464 名前:デフォルトの名無しさん mailto:sage [2018/03/21(水) 01:09:02.52 ID:UBrEBSgZ.net]
>>442
すみません、分かりにくい文でした
>>437

465 名前:改造しようとしたが改行がネックだと言う話

以下の通り改造してみた

>>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
[]
[ここ壊れてます]

466 名前:デフォルトの名無しさん mailto:sage [2018/03/21(水) 01:15:45.86 ID:UBrEBSgZ.net]
あ、for /f "delims=" かな

467 名前:デフォルトの名無しさん mailto:sage [2018/03/22(木) 16:25:40.46 ID:pbBa6R9F.net]
echo と同じ行で何か実行すると空白が入る

echo.>a
echo.>b & rem
dir a b

468 名前:デフォルトの名無しさん mailto:sage [2018/03/22(木) 17:04:47.92 ID:pbBa6R9F.net]
豆知識その2
echo と同じ行でパイプ実行すると表示が変わることがある

set a=%%b%%
set b=xxx
echo %a%
echo %a% | more

469 名前:デフォルトの名無しさん mailto:sage [2018/03/22(木) 17:12:47.60 ID:pbBa6R9F.net]
豆知識その3
文字化け嫌なら遅延展開で

@echo off
set "a=a > nul"
set "b=b & rem"
echo %a%
echo %b%
echo ------
setlocal enabledelayedexpansion
echo !a!
echo !b!
pause

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

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

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

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



474 名前:デフォルトの名無しさん mailto:sage [2018/04/03(火) 02:29:58.94 ID:yDWDpnwx.net]
ちょっとハマってしまったのでアドバイスをいただきたく。

@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

475 名前:454 mailto:sage [2018/04/03(火) 02:42:57.22 ID:yDWDpnwx.net]
>>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" にすればいいのだが、できれば一時ファイルへの出力は行いたくない。

何か良い方法はないでしょうか。

476 名前:デフォルトの名無しさん mailto:sage [2018/04/03(火) 18:08:30.38 ID:dFuhrusg.net]
日立だな

477 名前:デフォルトの名無しさん mailto:sage [2018/04/03(火) 21:08:04.29 ID:NTm1Ga+l.net]
空白区切りならcallとshiftで回せばいいのでは

@echo off

set DATA=alpha beta gamma

call :SEARCH %DATA%

goto :eof

:SEARCH
if "%

478 名前:1" == "" goto :eof
echo %1 | findstr be
shift
goto SEARCH
[]
[ここ壊れてます]

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

480 名前:デフォルトの名無しさん [2018/04/05(木) 19:54:59.74 ID:9RkYEovX.net]
>>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

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

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

483 名前:デフォルトの名無しさん mailto:sage [2018/04/05(木) 22:30:55.38 ID:ivnu80TE.net]
choiceはWindowsに標準搭載されてるが

https://docs.microsoft.com/ja-jp/windows-server/administration/windows-commands/choice



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


[database.txt]
りんご,ごりら,らっぱ,ぱんだ,だちょう,うし,しお,おにぎり,りす,

[delete.txt]
ごりら
ぱんだ
うし
りす

[output.txt]
りんご,らっぱ,だちょう,しお,おにぎり,

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

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

487 名前:デフォルトの名無しさん mailto:sage [2018/04/06(金) 01:53:25.80 ID:eal1pYjS.net]
>>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(','))

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

489 名前:デフォルトの名無しさん mailto:sage [2018/04/06(金) 07:06:54.89 ID:1XYxdGEK.net]
↓ガイジのおともだち

667 名前:ピラフ ◆9Jro6YFwm650 [sage] 投稿日:2018/04/05(木) 22:04:35.89 ID:SYfKFmGc
>>666
    

490 名前: *      *
  *     +  グッジョブ!
     n ∧_∧ n
 + (ヨ(* ´∀`)E)
      Y     Y    *
[]
[ここ壊れてます]

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

492 名前:デフォルトの名無しさん mailto:sage [2018/04/06(金) 10:00:35.29 ID:fQXPpScw.net]
>>456
いただきたく。
ください。

なんでわざわざ長ったらしい書き方するんだろうね。
しかも質問してるくせに偉そうという。

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



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

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

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

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

498 名前:デフォルトの名無しさん mailto:sage [2018/04/07(土) 23:31:37.19 ID:pb/9IsOI.net]
for /l %%n in (1,1,10) do (

499 名前:デフォルトの名無しさん mailto:sage [2018/04/11(水) 23:23:30.97 ID:sp32so0L.net]
質問させてください。
プログラムの標準出力を変数に代入する方法を調べ、以下のような方法を見つけて動作を確認しました。

FOR /f "DELIMS=" %%A IN ('ECHO ABC') DO SET ABC=%%A

しかし、'ECHO ABC' の部分にダブルコーテーションが含まれているとうまく動作しませんでした。
何らかの方法でダブルコーテーションをエスケープする必要があると思うのですが、
その方法をご存知の方がいらっしゃれば教えていただけないでしょうか。
よろしくお願いします。

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

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

502 名前:デフォルトの名無しさん mailto:sage [2018/04/21(土) 16:41:01.08 ID:x8Crqpim.net]
こんなファイルがありまして

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

どのようにしたらいいでしょうか

503 名前:デフォルトの名無しさん mailto:sage [2018/04/21(土) 18:30:43.44 ID:9o1T2SLn.net]
>>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



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

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

506 名前:デフォルトの名無しさん mailto:sage [2018/04/21(土) 21:33:42.67 ID:x8Crqpim.net]
>>481
これでできました
でも難しくて意味が分からないけど

>>482
秀丸でやったらできました
これは楽ですね

お二人ともありがとうございます

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

508 名前:デフォルトの名無しさん mailto:sage [2018/04/22(日) 03:16:01.56 ID:HWr0EbfP.net]
>>481は3行1セットを大前提として1行目+タブ+3

509 名前:行目で1行として出力するバッチやね

中身が何かっての全く確認しないから変な行あったら以後盛大に誤爆する
[]
[ここ壊れてます]

510 名前:デフォルトの名無しさん mailto:sage [2018/04/22(日) 06:56:22.77 ID:Lev+VBnm.net]
@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&set n=1& set "d0=%%i"
if !n! equ 0 echo.!d0! !d2!>>out.txt
)

!d0!と!d2!の間は普通にtab入力

511 名前:デフォルトの名無しさん mailto:sage [2018/04/22(日) 07:14:11.56 ID:H/AU6k7y.net]
だからなに?

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

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



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

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

516 名前:486 mailto:sage [2018/04/23(月) 16:55:05.27 ID:75V+260b.net]
>>484
> でも難しくて意味が分からないけど

こんな事言ってるから何してるのか書いただけよ
それ以外の意味は無い

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

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

519 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 21:50:58.00 ID:5PgkCptO.net]
適当でいいなら%CMDCMDLINE%

520 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 21:57:48.38 ID:vlAm5Lzz.net]
%0 参照して分岐すれば?

echo %0
pause

521 名前:デフォルトの名無しさん mailto:sage [2018/04/26(木) 22:30:55.90 ID:iUADfoHj.net]
レスありがとうございます>各位

すいませんダブルクリックと書いたのでミスリードになってしまったのですが、実際にはD&Dで引数も使用します。
なので>>496の環境変数参照して/Cオプション実行しているかどうかで分岐しようと思います。

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

523 名前:デフォルトの名無しさん mailto:sage [2018/04/27(金) 19:57:13.14 ID:CQ9eqs6l.net]
え?



524 名前:デフォルトの名無しさん mailto:sage [2018/05/01(火) 06:45:44.95 ID:aXoGd7xG.net]
64桁の10進数を16進数に変換する方法、探したけど見つからなくて
バッチファイルだけでやるのは無理があるでしょうか。

javascriptでなら巨大な桁数いけるサイトはあったのですが
バッチファイル内で大量に処理したいのです。

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

526 名前:り当てたい、よろしくお願いいたします。 []
[ここ壊れてます]

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

528 名前:デフォルトの名無しさん mailto:sage [2018/05/01(火) 17:14:01.70 ID:cVB2iu29.net]
>>501
取り敢えず、これでやったらどう?

https://technet.microsoft.com/ja-jp/sysinternals/hex2dec

529 名前:デフォルトの名無しさん mailto:sage [2018/05/01(火) 23:59:01.96 ID:7h2ZqymN.net]
>>501
普通の手段だと無理だと思う。
1. 整数演算はOSのbit数の上限までしかできない
2. 文字列として変換するにしても255⇒0xFFが限界

…。
3. そもそも符号無し16進??有りの16進??

530 名前:デフォルトの名無しさん mailto:sage [2018/05/02(水) 00:09:36.26 ID:bQsnMWtx.net]
>>501
ほぼ無理
自転車で崖を上がりたいというようなもの

あきらめて、これを機に何かの言語を覚えるといろいろな場面で一生使える
一番簡単なのはinstall不要なgawk

531 名前:505 mailto:sage [2018/05/02(水) 00:34:38.73 ID:69djG7nz.net]
訂正。64bit環境でも調べたけど、最大2147483647(符号付32bitのMAX)だった。

532 名前:デフォルトの名無しさん mailto:sage [2018/05/02(水) 02:01:56.61 ID:z5LQTSUi.net]
>>504-507
ありがとうございます。hex2decは試行済でした。

1234567890000987654321000000
を渡すと
7766001854005038656 = 0x6BC6618A48FECE40
このように崩れます。

やはり無理がありますか。。。

gawkはlinuxのようですね。windowsで実現する方法を求めていました。
バッチファイルでは出来そうにないのでWSH JScriptあたりを探してみたりしていました。
他手段を探してみたいと思います。ありがとうございました。

533 名前:デフォルトの名無しさん mailto:sage [2018/05/02(水) 03:07:32.00 ID:KFhIKBMV.net]
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



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

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

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

537 名前:デフォルトの名無しさん mailto:sage [2018/05/02(水) 06:44:11.75 ID:D/jExvSh.net]
awkなら速くできるの?

538 名前:デフォルトの名無しさん mailto:sage [2018/05/02(水) 07:02:56.10 ID:ESv7owpX.net]
>>509
元の質問者じゃないけど、これ動かすとたまに「プロセスはファイルにアクセスできません。別のプロセスが使用中です。」って出る。
自分

539 名前:ナ書いたbatもループとかcallが多いとこれが出たりリダイレクトに失敗してたりする事があるんだけど何が原因?
ごくごく稀に飛ぶはずのないラベルに飛んで動作不良起こしたりもする。
[]
[ここ壊れてます]

540 名前:デフォルトの名無しさん mailto:sage [2018/05/02(水) 18:25:33.72 ID:vWDYKqwa.net]
>>508
これとかは?

ツール関係の小部屋
sky.geocities.jp/hp_gabo200x/room_tool.html

C-style arbitrary precision calculator
sky.geocities.jp/hp_gabo200x/mysoft/gcalc.lzh

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

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

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



544 名前:デフォルトの名無しさん mailto:sage [2018/05/03(木) 11:45:15.41 ID:Ox4SBvDu.net]
>>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

545 名前:デフォルトの名無しさん mailto:sage [2018/05/03(木) 18:33:32.97 ID:Ox4SBvDu.net]
>>515 の gcalcを使用すると簡単

>type a
printf("%x\n", 1234567890123456789012345678901234567890123456789012345678901234)

>gcalc < a > b

>type b
0x30046030f26f462d7ac21a27eb9d53fff233c7acd12d87e96aff2

546 名前:デフォルトの名無しさん mailto:sage [2018/05/03(木) 18:53:18.66 ID:Ox4SBvDu.net]
すまん、printfの次の行にexitを追加して

547 名前:501 [2018/05/04(金) 16:14:55.26 ID:hkAWCjp ]
[ここ壊れてます]

548 名前:W.net mailto: >>509
>>519
すごい!ありがとうございます!
なんか微妙だなーと思って戻ってみたら凄いスマートなのリプきてた。

gcalcとも比較してみましたがかなり早いですね。_秒二桁くらい違う。
使わせていただきます。ありがとうございました!
[]
[ここ壊れてます]

549 名前:デフォルトの名無しさん mailto:sage [2018/05/04(金) 23:52:47.93 ID:Ry3XO9FI.net]
>>501
Ruby では、

num = 9999_1234567890_1234567890_1234567890_1234567890_1234567890_1234567890

num.to_s(16)
#=> "184e78450dd8c1fca3b502d65e4f6fb73c42c47ccff196ce3f0ad2"

550 名前:デフォルトの名無しさん mailto:sage [2018/05/05(土) 00:20:09.03 ID:uOR+hZGm.net]
dcなら

値1
値2

値n
16of

551 名前:デフォルトの名無しさん mailto:sage [2018/05/05(土) 04:13:57.15 ID:nqyvYHZY.net]
>>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

552 名前:デフォルトの名無しさん mailto:sage [2018/05/14(月) 16:02:14.00 ID:vCNzBA31.net]
%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 数字

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

こうとか



554 名前:デフォルトの名無しさん mailto:sage [2018/05/15(火) 01:55:36.53 ID:VsPlEm8N.net]
@rem 2147483648 以上の数は扱えないため、大きい値が入る条件には不向き。

set "W=%1"
set DUMMY=a
set /A "DUMMY=W*1"
if not "%W%"=="%DUMMY%" (echo 数字以外) else echo 数字のみ

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

556 名前:デフォルトの名無しさん mailto:sage [2018/05/15(火) 15:47:52.58 ID:Aaz/hbaw.net]
0001 数字以外

557 名前:デフォルトの名無しさん mailto:sage [2018/05/16(水) 00:05:23.47 ID:vNnFvDtx.net]
ありがとうございます
>>527
findstって正規表現のようなことができるのですね、知らなかったです

>>528
英字だけ、数字だけだといいのですが、英数字混在文字列でエラーになりました
*1 の代わりに +0も同じでした

558 名前:デフォルトの名無しさん mailto:sage [2018/05/16(水) 03:54:43.21 ID:Hrg3NbAG.net]
@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%"

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

560 名前:デフォルトの名無しさん mailto:sage [2018/05/16(水) 04:13:36.97 ID:Hrg3NbAG.net]
なんか間違ってたので書き直した

@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%"

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

562 名前:デフォルトの名無しさん mailto:sage [2018/05/16(水) 16:48:32.10 ID:VQztSlVV.net]
"1"
TRUE
1"2"
ECHO は <OFF> です。

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



564 名前:デフォルトの名無しさん mailto:sage [2018/05/16(水) 22:31:00.96 ID:VQztSlVV.net]
1^2
1|2
1&2

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

566 名前:デフォルトの名無しさん mailto:sage [2018/05/16(水) 23:15:29.43 ID:VQztSlVV.net]
>>538>>527宛て

>>534的には、1^^2 []
[ここ壊れてます]

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

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

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

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

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

573 名前:デフォルトの名無しさん mailto:sage [2018/05/17(木) 07:02:08.36 ID:TsNh8oQN.net]
あ、eol= だった



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

575 名前:デフォルトの名無しさん mailto:sage [2018/05/17(木) 08:50:29.12 ID:zVFG07SK.net]
>>545
>>269-273

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

577 名前:デフォルトの名無しさん mailto:sage [2018/05/17(木) 10:17:41.58 ID:TsNh8oQN.net]
どんな方法でも良いから
引数の中に " とか ; が入ってても
正しく動作するのを頼む

というのは絶対に無理なのかね

578 名前:デフォルトの名無しさん mailto:sage [2018/05/17(木) 11:47:23.61 ID:TsNh8oQN.net]
>>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%"

579 名前:デフォルトの名無しさん mailto:sage [2018/05/17(木) 17:15:43.43 ID:TsNh8oQN.net]
とりあえず引数の " と ; の対策らしきもの
引数は行末まで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%

580 名前:デフォルトの名無しさん mailto:sage [2018/05/17(木) 17:16:28.81 ID:zVFG07SK.net]
>>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 ^"あり

581 名前:デフォルトの名無しさん mailto:sage [2018/05/17(木) 17:18:28.36 ID:zVFG07SK.net]
なお、+-は除くのが吉
+1+2-3

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

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



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

585 名前:デフォルトの名無しさん mailto:sage [2018/05/18(金) 12:57:02.82 ID:CQAI+hTy.net]
これが分からない

https://social.technet.microsoft.com/Forums/ja-JP/610268b2-c3f7-4e4f-8aa2-9d32353804e4?forum=win10itprogeneralJP

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

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

1FF18

588 名前:デフォルトの名無しさん mailto:sage [2018/05/24(木) 10:48:33.72 ID:cPlRxlDn.net]
1FF18

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

590 名前:デフォルトの名無しさん mailto:sage [2018/06/10(日) 16:08:13.36 ID:fV9CYqGb.net]
なんだって?

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

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

593 名前:562 mailto:sage [2018/06/10(日) 20:59:39.63 ID:TMZk6u5D.net]
>>564
できました
ありがとうございます!

>>565
意図した順番というのは、D&Dした順番、という意味でした



594 名前:デフォルトの名無しさん [2018/07/04(水) 22:24:09.32 ID:gFgZc5FG.net]
GTD

595 名前:デフォルトの名無しさん mailto:sage [2018/07/05(木) 16:48:32.11 ID:AeL6VB/V.net]
GTD

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

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

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

599 名前:デフォルトの名無しさん mailto:sage [2018/07/08(日) 19:34:33.35 ID:ayaOLpVg.net]
>>569
forじゃないけど、こんなんじゃあかんの?

:loop
echo %~nx1
shift
if not "%~1"=="" goto :loop

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

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

602 名前:デフォルトの名無しさん mailto:sage [2018/07/08(日) 20:57:49.35 ID:3ARFRdhF.net]
こういうの直すと互

603 名前:キ性の問題でも起きるの? []
[ここ壊れてます]



604 名前:デフォルトの名無しさん mailto:sage [2018/07/08(日) 21:45:56.33 ID:PKG5RTYD.net]
>571
こうで良くないかなぁ?/d を使うパターン。

for /d %%f in (%*) do (
echo %%~nxf
)

>>575
そういう仕様に依存している過去のコードの動作に影響が出るのさ。
そういうコードは今までずっと企業内で使われている。
作者不詳のまま…

605 名前:デフォルトの名無しさん mailto:sage [2018/07/08(日) 21:49:43.77 ID:PKG5RTYD.net]
ごめん、/d でも全角はアウトですた。
わけわからーん

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

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

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

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

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

対処方法としては、フルパスの何処かに半角スペースを入れてクォートするだけ。

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

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

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



614 名前:デフォルトの名無しさん mailto:sage [2018/07/09(月) 00:39:27.28 ID:CF6LQR6B.net]
全角空白の場合、ダブルクォーテーションで括られないのに、引数の区切り記号として取り扱われるってことか

間に、ダブルクォーテーションで括る操作をかませばいいか
@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)+'"');

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

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

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

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

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

620 名前:デフォルトの名無しさん mailto:sage [2018/07/09(月) 21:52:59.96 ID:JZ4qv3b5.net]
俺はバッチスクリプトを生成するスクリプトをPerlだのPhysonで書くときは
ダブルクォートで囲わずに全部キャレットでエスケープしてる。

今回の件は %* が勝手に全角空白で区切る仕様が駄目なんだけど…
スクリプトから呼ぶ場合には何とかなっても、D&Dの

621 名前:時点で引数を加工できないってとこに問題がある。
shift しても無駄、っていうところ…。

解決策…、ある??俺は思いつかない…。
[]
[ここ壊れてます]

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

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



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

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

626 名前:デフォルトの名無しさん mailto:sage [2018/07/10(火) 07:31:20.48 ID:LbQkaO6y.net]
Ruby, PowerShell を使った方が良い

バグるのは低品質だし、時間の無駄

627 名前:デフォルトの名無しさん mailto:sage [2018/07/11(水) 20:28:10.61 ID:mCCOIiej.net]
>>597
Ruby は実行環境のインスコがいる。
PoerShell はD&Dできない。
それ以前に、特殊な世界ではいまだに XP が現役だったりする。
Win7SP1以降のアップデートパッチを1個でも当てたら動作保証しませんなどというフザけた業務システムも実在する。
レジストリを汚すインスコは駄目だけど、ネイティブコンパイルしたコマンドをコピーして使う分にはおk、てな環境もある。

とりあえず、スクリプトを使用した D&D のファイルパス問題回避の最大公約数的解決は VBScript しかないんじゃないかな。
(さすがに Win9X な環境はもうないだろう…と思うけど)
使える環境なら検討した方がいいけど、安易な「○○使えばいい」という回答は頭が悪すぎる。

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

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

630 名前:デフォルトの名無しさん mailto:sage [2018/07/12(木) 11:56:39.69 ID:72SuVZq5.net]
それ以前に、DOS自体が、現e(ry

631 名前:デフォルトの名無しさん mailto:sage [2018/07/12(木) 14:54:19.05 ID:+klw6xr1.net]
>>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

下に続く

632 名前:デフォルトの名無しさん mailto:sage [2018/07/12(木) 14:54:43.36 ID:+klw6xr1.net]
: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

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



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

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

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

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

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

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

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

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

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

643 名前:デフォルトの名無しさん mailto:sage [2018/07/12(木) 22:45:26.82 ID:+klw6xr1.net]
>>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 ... 置換



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

645 名前:デフォルトの名無しさん mailto:sage [2018/07/13(金) 00:39:35.42 ID:7GlypEZW.net]
漢字コードが関係しているのかも
shift−jis
chcp 932

utf-8
chcp 65001

で試してみたら

646 名前:デフォルトの名無しさん mailto:sage [2018/07/13(金) 06:59:58.30 ID:laaSwUH8.net]
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

647 名前:デフォルトの名無しさん mailto:sage [2018/07/13(金) 19:59:02.76 ID:laaSwUH8.net]
>>617
if "!a!"=="!b!" echo NG4

結果は
NG4

まあ、見た目は似ているが...

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

649 名前:デフォルトの名無しさん mailto:sage [2018/07/14(土) 06:43:27.53 ID:8rUsawXH.net]
>>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

下に続く

650 名前:デフォルトの名無しさん mailto:sage [2018/07/14(土) 06:43:59.73 ID:8rUsawXH.net]
: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%

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

652 名前:デフォルトの名無しさん mailto:sage [2018/07/14(土) 18:45:20.78 ID:8rUsawXH.net]
>>622
すみません。:x3 の下の行を下記に訂正します

:x3
set a=!a:~%b%,-1!!e!& set /a b=0

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



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

655 名前:デフォルトの名無しさん mailto:sage [2018/07/15(日) 00:45:51.50 ID:LqRrN2Y+.net]
リダイレクト使ってバッチ内に記述したテキストをファイルに出力すると、行数が増えるにつれて
どんどん処理が遅くなるんですが(多分ファイルのオープンとクローズの処理が重たい
んだとは思うけど)、何十行もあるテキストでも一括で書き込んで早くする方法とかないですか?

ただ不思議なのは、ソースとなるテキストを別のテキストファイルからforで読み込みして
各行を逐次出力ファイルにリダイレクトで書き出した場合はそんなに遅くないんですよねぇ。

656 名前:デフォルトの名無しさん mailto:sage [2018/07/15(日) 07:47:51.60 ID:3kOM020K.net]
>>626
俺はそう思ったことはないなぁ…具体的なコードを見せて。

一括での書き込みは、処理をカッコで括るとできる。
(
echo start
:
:
echo end
) > test.txt

657 名前:626 mailto:sage [2018/07/15(日) 10:00:49.84 ID:LqRrN2Y+.net]
>>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で回してリダイレクトした方が何故か早い」と書き込んだけど、勘違い。
改めて確認したらほとんど変わらなかった。

658 名前:626 mailto:sage [2018/07/15(日) 10:01:23.98 ID:LqRrN2Y+.net]
>>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
-----

教えてもらった全体を()で囲ってまとめてリダイレクトしたら一瞬で処理完了しました。ありがとうございます。
実際のコードは条件式の他に変数展開した文字列の中に()が含まれていたりするので、要所要所で使い分けが必要そうですが。

659 名前:デフォルトの名無しさん mailto:sage [2018/07/15(日) 11:22:20.37 ID:SEkGxxwq.net]
へー(´・∀・`)

660 名前:627 mailto:sage [2018/07/15(日) 12:40:32.94 ID:3kOM020K.net]
>>628-629
あー、600行もあったらファイルのオープン・クローズ処理の影響が大きくなるねぇ。
カッコで括ると「括った内容、1行で延々書かれたものとして処理」してくれる。多分こういう用途のためにあるんだと思う。
なのでカッコ内の特殊文字エスケープは通常と変わらなかったはず…。(確証はないけど)

俺はヒアドキュメントっぽいことがしたい時、いちいちリダイレクトを入れるのが面倒&読みづらいこともあってこう書いてるわ。

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

662 名前:デフォルトの名無しさん mailto:sage [2018/07/18(水) 21:57:41.23 ID:6GF3Pq4/.net]
別のバッチファイルにする必要も無いんじゃね?

@echo off

call :abc > d.txt
goto :eof

:abc
echo xxx
echo yyy
echo zzz

663 名前:デフォルトの名無しさん mailto:sage [2018/07/18(水) 22:23:21.60 ID:pnNaFbbR.net]
それもいいんじゃない?



664 名前:デフォルトの名無しさん mailto:sage [2018/07/18(水) 22:31:48.09 ID:pnNaFbbR.net]
ちょっと聞きたいんだが…

for /f "tokens=1* delims=:" %%A in ('findstr /n "^" filename.txt') do echo.%%B
これ、バッチが標準入力から受け取ったものを処理する雛形らしいんだけど…

findstr /n "^"
これアリか?正規表現として成立してない!?何だこれ??

findstr /n ".*"
ならアリだしこう書くべし。正規表現として何でもマッチする。

なんだけど何で findstr /n "^" が通るのか分からんわ。

665 名前:デフォルトの名無しさん mailto:sage [2018/07/18(水) 22:46:17.26 ID:6GF3Pq4/.net]
それ、確か : で始まる行が不味いんじゃね?

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

667 名前:デフォルトの名無しさん mailto:sage [2018/07/18(水) 23:17:52.69 ID:pnNaFbbR.net]
>>636
https://blogs.yahoo.co.jp/kerupani/15344574.html
が上手いことやってる。感心した。万能ではないらしいが検証中。
tee が作れるかもしれん。

>>637
マジだった。findstrはアホの子だった。

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

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

670 名前:デフォルトの名無しさん mailto:sage [2018/07/19(木) 00:47:19.86 ID:oVpGn6oR.net]
>>635
正規表現としてじゃなくて cmd のエスケープかと。

echo;abc | findstr /n ""
FINDSTR: 検索文字列がありません。

echo;abc | findstr /n "^"
1:abc

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

672 名前:デフォルトの名無しさん mailto:sage [2018/07/19(木) 08:15:18.80 ID:31+wDFSY.net]
プロセスが特定の文字列を出力したら処理を終了させたくて下記のようなの書いてみたけど思うように動かないです。

process.exe | find "hoge"&&TASKkill /F /im process.exe

&&で指定したコマンドは元のプロセスが終了しないと実行されないのでしょうか?

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



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

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

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

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

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

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

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

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

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

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



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

685 名前:デフォルトの名無しさん [2018/07/23(月) 17:41:55.79 ID:1W7qAEKf.net]
Linuxでコマンド実行した結果とWindowsでコマンド実行した結果を
一つのファイルに書き出したいんだけど、改行コードが違っている
バッチファイルでCR LFではなくLFで出力したいなと思って
このコードを見つけたんだが何やってるのかさっぱりわから

686 名前:ない

<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
[]
[ここ壊れてます]

687 名前:656 mailto:sage [2018/07/24(火) 01:43:43.96 ID:tpeQiESg.net]
違うこと調べていて、たまたま答えにぶつかったぜw

ken sou1900.blog96.f c2.com/blog-en try-7.html

688 名前:デフォルトの名無しさん mailto:sage [2018/07/24(火) 01:44:16.69 ID:tpeQiESg.net]
違うこと調べていて、たまたま答えにぶつかったぜw
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

こっちも未だよくわからいが、
まあこれも単なる不思議な動作だろう

なっとくした

689 名前:デフォルトの名無しさん mailto:sage [2018/07/24(火) 01:45:28.43 ID:tpeQiESg.net]
なんでこれが書き込めないんだよ

fc2.com

690 名前:デフォルトの名無しさん mailto:sage [2018/07/24(火) 01:46:02.21 ID:tpeQiESg.net]
↑これは書き込めるのか

↓これはどうだ?
a.fc2.com

691 名前:デフォルトの名無しさん mailto:sage [2018/07/24(火) 01:46:25.75 ID:tpeQiESg.net]
kensou1900.blg96.fc2.com

692 名前:デフォルトの名無しさん mailto:sage [2018/07/24(火) 01:46:48.81 ID:tpeQiESg.net]
blog96.fc2.com

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



694 名前:デフォルトの名無しさん mailto:sage [2018/07/24(火) 01:48:34.51 ID:tpeQiESg.net]
aaaablog96.fc2.com/aaa.html

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

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

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

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

699 名前:デフォルトの名無しさん mailto:sage [2018/07/24(火) 04:54:02.60 ID:tpeQiESg.net]
Windowsの改行コードは[CR][LF]だよ

だけど、処理の一部として、Linux側にコマンドを投げ
その出力をログファイルに書き込むんだよ
Linuxの改行コードは[LF]

その同じログファイルにWindowsからも書き込むんだよ
こっちは当然[CR][LF]

まざるとうざくなるので、どちらかに統一したかったんだよ

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

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

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

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



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

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

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

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

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

709 名前:デフォルトの名無しさん mailto:sage [2018/07/26(木) 18:09:38.18 ID:B1r9j6T7.net]
改行コードはコマンドに依存する

dir /? > d.txt
sort /? > s.txt

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

echo off
for %%f in (%*) do (
echo %%f
echo %%~dp
echo %%~nf
pause
)

711 名前:デフォルトの名無しさん mailto:sage [2018/07/29(日) 20:35:34.14 ID:u49zNrL5.net]
>>680

%%~dpf
だろ

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

713 名前:デフォルトの名無しさん [2018/07/29(日) 23:23:01.82 ID:AzlFD5Cm.net]
>>681
ありがとうございます
それも試したと思っていたけどそうでなかったようですね

>>682
多くのサンプルではサブルーチンをつかっているようですが
カッコを使うとバグの原因になりやすいとかそんな理由なのでしょうか



714 名前:デフォルトの名無しさん mailto:sage [2018/07/31(火) 00:35:30.31 ID:eJ/lX+1f.net]
>>683
%%~dp → %%~df%%~pf

callを使い %1などを使えるようにするため
昔は%~n1 など数字でないと動作無保証だった

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

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

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

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

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

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

721 名前:687 mailto:sage [2018/08/04(土) 05:41:55. ]
[ここ壊れてます]

722 名前:21 ID:z4XK4aXP.net mailto: cmd /? にも setlocal /? にも echo /? にも
echoとパイプ併用時の環境変数の二重展開について記述は無いようです
[]
[ここ壊れてます]

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



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

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

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

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

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

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

730 名前:デフォルトの名無しさん mailto:sage [2018/08/04(土) 12:17:58.67 ID:hhRJxbHb.net]
>>687
>>448

731 名前:687 mailto:sage [2018/08/05(日) 05:37:23.17 ID:DoWKU022.net]
理解できました
みなさんありがとうございました

732 名前:デフォルトの名無しさん mailto:sage [2018/08/06(月) 20:49:35.73 ID:9+kXWEFM.net]
echo は結構罠
if "%errlorleverl%" ... も罠。

はやくバッチから救われたい…

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



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

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

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

737 名前:デフォルトの名無しさん mailto:sage [2018/08/12(日) 09:09:39.33 ID:pT5cyKVs.net]
>>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 (

だと正常に動く。何故だか分からない。

738 名前:デフォルトの名無しさん mailto:sage [2018/08/12(日) 09:13:22.78 ID:pT5cyKVs.net]
>>706 にちょっと間違い。
〇 if "%ERRORLEVEL%"="0" (
× if not "%ERRORLEVEL%"="0" (

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

740 名前:デフォルトの名無しさん mailto:sage [2018/08/12(日) 09:40:11.52 ID:pT5cyKVs.net]
>>708
悪い。typo。
〇 if "%ERRORLEVEL%"=="0" (

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

742 名前:デフォルトの名無しさん mailto:sage [2018/08/12(日) 14:40:43.26 ID:IZr1Emsm.net]
>>710
> ゼロから書き直せ

こんな感じっすかー?

0" ([HOME]if "%ERRORLEVEL%"=="

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



744 名前:デフォルトの名無しさん mailto:sage [2018/08/12(日) 18:02:08.07 ID:aLWFoJnR.net]
>>706
パイプの動作が原因だろう
パイプの右側は子タ

745 名前:スクでの実行となる(おそらくは)
メインタスクに環境を引き継がないんだと思う

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が入らない
[]
[ここ壊れてます]

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

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

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

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

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

751 名前:デフォルトの名無しさん mailto:sage [2018/08/12(日) 21:38:30.71 ID:pT5cyKVs.net]
>>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

こんな感じにするしかなかったし、これならせめて引継ぎができると思う。

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

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



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

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

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

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

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

759 名前:デフォルトの名無しさん mailto:sage [2018/08/15(水) 13:28:33.22 ID:j7d0pce0.net]
質問させてください。
Linuxでいうところの、/dev/nullで標準入力待ちを終了させるのはどうすればいいのでしょうか。

具体的には、Windows向けの

760 名前:opensslコマンドを実行しています。
openssl s_client -connect 〜とやると標準出力が一通り出たところで入力待ちになる仕様で、
コマンドプロンプト上だとCtrl+Cで止めてあげる必要があります。

Linuxだと、末尾に< /dev/nullで終わらせられるのですが、Windowsバッチで同じように終了させる方法は無いでしょうか。
[]
[ここ壊れてます]

761 名前:デフォルトの名無しさん mailto:sage [2018/08/15(水) 13:50:50.34 ID:o8lgioa7.net]
< nul
じゃダメなの?

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

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



764 名前:デフォルトの名無しさん mailto:sage [2018/08/15(水) 14:36:26.98 ID:j7d0pce0.net]
>>730
参考サイトありがとうございます。
先ほど教えていただいたのと同じ< nulですよね。
サンプルコマンドの通り打ってみても入力待ちで止まります…。
念のためOpenSSLを入れ直しても変わりませんでした。

サンプルでパイプで渡してる直前まで( < nul 2> nul)で試すと、
実行結果がダーっと出て、入力待ちで止まるんですよね…。

765 名前:デフォルトの名無しさん mailto:sage [2018/08/15(水) 15:17:17.37 ID:j7d0pce0.net]
下のサイトのやり方も参考にしつつやってみましたが、どれも結果は変わらずでした。
後出しですみませんが、当方の環境はWin10 Pro 1803、opensslは1.0.2m.1.0.2oでやってました。
https://stackoverflow.com/questions/25760596/how-to-terminate-openssl-s-client-after-connection

回答くださった方、ありがとうございました。
もしやってみて、何言ってんだ、できたぞ?という方いらっしゃいましたら教えていただければ幸いです。

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

767 名前:デフォルトの名無しさん mailto:sage [2018/08/15(水) 15:25:45.29 ID:jNJ7KLOy.net]
>>732
普段OpenSSLは使わないけどたまたまインストールしてあったOpenSSL 1.1.0hで出来たよ

コマンドはこう
openssl s_client -connect example.com:443 < nul 2> nul | openssl x509 -text | findstr Not

768 名前:デフォルトの名無しさん mailto:sage [2018/08/15(水) 15:59:22.79 ID:j7d0pce0.net]
>>734
試していただいてありがとうございます。

そのコマンドを実行したときなのですが、コンソールが返ってくるまで1分ほどかかりませんか? すぐ返りますか?

< nulの有無に関わらず1分ほど待つので、単にタイムアウトか何かで終了しているのかなと思っております。
nulを入力として受け取っているなら、すぐに1個目のパイプより前のコマンドは終わるはずだと思いまして…。

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

770 名前:デフォルトの名無しさん mailto:sage [2018/08/15(水) 16:09:56.08 ID:j7d0pce0.net]
>>736
ありがとうございます。
ということは>>728さんと同じ書き方でちゃんとできて、
私の環境起因で何かがおかしいってことですね…。
他のパソコン出してきて試してみようと思います。

>>733さんもありがとうございます。
まずはバッチ化する前にプロンプト上で試している段階で躓いてました。

771 名前:733 mailto:sage [2018/08/15(水) 16:14:15.33 ID:xax+OHuY.net]
>>733
1)コマンドプロンプトで下記のように入力し、hoge.txtを作る
copy con hoge.txt[Enter]
[Ctrl+d]
[Ctrl+z]

2)バッチの方で
<hoge.txt
とすればコンソールでCtrl+Dを入力したのと同じ効果となるはず

772 名前:デフォルトの名無しさん mailto:sage [2018/08/15(水) 16:47:26.04 ID:j7d0pce0.net]
>>737です。
あの後うまくいきました!アドバイスありがとうございました!

Windows向けに提供されている最新のインストーラを色々試したのですが、
openssl 1.0.2pだとダメ、1.1.0iだと< nulが効きました。
32bit向け、64bit向けのインストーラのどれでも同じ結果でした。

私の試してたのが1.0.2系だけで、>>734さんは1.1.0hで成功してるので、


773 名前:1.0.2系だとダメなのかもしれません…。
< nulはきっと汎用的なものなので、そんなわけはないと思いたいのですが…。

長々とありがとうございました、大変助かりました。
[]
[ここ壊れてます]



774 名前:デフォルトの名無しさん mailto:sage [2018/08/15(水) 21:05:55.42 ID:cg3gjcxB.net]
悪いけど、Windowsバッチに鉄板を求めるのも、追いかけるのも無駄。
歴史的経緯でそうなってしまっている。マトモな資料なんかありゃない。
NULの解釈がコマンドによって違ったって全く不思議じゃあない。

犬のクソをクソだと知りつつカリントウだと思いながら食わなければならないような、そんな代物。
好きで書いてる奴なんかほとんどいないと思う。

バッチで書いた方が良いと判断できる材料がなければVBscriptやPowerShellで書いた方が遥かにいい。
環境が許せば他の言語の導入を検討するのも大いにいい。

よく知られたコマンドをよく知られたイディオム下で使うのでもなければ、バッチでなんか書かない方がいい。
それでもクソみたいにハマることがあるんだから。

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

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

777 名前:740 mailto:sage [2018/08/15(水) 21:52:48.84 ID:X+03HcfZ.net]
xcopy のヘルプは酷い。
Vistaでは「推奨されない。使わないで。robocopyを使って」みたいな文言が出てきた。理由は記述なし。
この文言、7以降では消えた。
ネットワーク越しにxcopy中に通信が切れたらどうなるか、MSは知ってたはずなんだが。

xcopyを使いまくってるクソベンダーどもから「直しきれない。フザけんな!」とでも突き上げを食らったんだろうか?
こういうところも本当に信用できない。

778 名前:740 mailto:sage [2018/08/15(水) 21:58:51.70 ID:X+03HcfZ.net]
>>741
cmd「あ、pushdとかでヨロ」
ネットワーク系で言えばpingが酷い。
if errorlevel そのものが効かない。エラーしたらズルズルっと抜ける。

あ、某SIer(富〇通)のバッチを思い出した。
pingでTCPの疎通確認?エラー処理なし?
バッチとか以前の問題だった。
富〇通は日本から消え去ればいいと思った。

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

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

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

782 名前:デフォルトの名無しさん mailto:sage [2018/08/16(木) 04:14:43.69 ID:W93QKVeg.net]
エロ動画.avi                .exe

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



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

785 名前:デフォルトの名無しさん mailto:sage [2018/08/16(木) 11:22:52.16 ID:hWBtBIZ+.net]
batファイルで任意のプログラムを実行し、一定時間後に強制終了させる(画面を閉じる)という処理は実現可能ですか?
任意のプログラムも同じDOS画面上で走ります。
タイマーでtaskkillを実行してcmdを終了させる

786 名前:ニいうのを考えたんですが、cmdが複数あると使えないので他に方法があれば知りたいです。 []
[ここ壊れてます]

787 名前:デフォルトの名無しさん mailto:sage [2018/08/16(木) 15:41:05.25 ID:KoNkkRtT.net]
>>751

START "test001" cmd /c test.bat


TASKKILL /FI "WINDOWTITLE eq test001"

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

789 名前:デフォルトの名無しさん mailto:sage [2018/08/16(木) 20:50:06.40 ID:qKowi4/2.net]
>>747
否。
pingはICMP。pingが通ってもTCPが通るという保証は無い。
逆に、pingは返さないがTCPが通る環境だってある。
ただでさえpingコマンドの動きはおかしいのに、pingでTCP疎通確認しました!というのが大手SIer(富〇通とか)が首を釣るべきポイント。

ダミーの共有フォルダを用意して
dir \\hoge.local\hoge
とかでSMBを経由したTCPの疎通が確認できるんだぜ??
頭が悪いとしか言いようがない。

もう一度言う。
pingではTCPの疎通は「絶対に確認できない」

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

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

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

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



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

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

796 名前:デフォルトの名無しさん mailto:sage [2018/08/16(木) 22:36:21.06 ID:qKowi4/2.net]
>>756
富〇通のシステムのサーバーがシステムの動作に必要なファイルを共有フォルダで端末に公開してたからだよ。
「何でこうしないの?」だよ。アホか。

>>758
そこまで知らねーな。
SMBoverTCPを止めてWindowsの共有フォルダが機能しなくなるかどうかのテストまでしたことはない。
止まるらしいけどバッチの範囲内じゃなくなるからこの話はもうしない。

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

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

て言わなきゃ分からないアレですか?

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

800 名前:デフォルトの名無しさん mailto:sage [2018/08/16(木) 23:19:02.45 ID:qKowi4/2.net]
>>764
おい。
十歩くらいは譲ってや

801 名前:る。
だがお前は馬鹿。

問題。
Windowsサーバーはネットワークの場所の検出に失敗することがあります。
パブリックと勘違いしたらpingを返さないことがあります。
さて、検出に失敗する場合はどのような場合でしょうか?

答えではないが発生例
富〇通に渡された手順通りにサーバーを再起動したらそうなった

> ならpingが通れば回線チェックできるとしても問題なかろう
pingの結果だけを信用したら駄目なんだよクソが!!
どんだけレベル低いんだお前??

…ああもう呆れる…。
[]
[ここ壊れてます]

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

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



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

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

806 名前:デフォルトの名無しさん mailto:sage [2018/08/17(金) 02:44:03.57 ID:jfy/CF71.net]
昔はpingを使っていたが、今は

set errorlevel=
arp -a|findstr 192.168.0. >nul
if not %ERRORLEVEL% == 0 goto オフライン処理

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

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

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

810 名前:デフォルトの名無しさん mailto:sage [2018/08/18(土) 21:40:50.22 ID:/0AtM/3Y.net]
ただの記号ですら言い方は人それぞれだからなあ

ピリオド      : ドット、ポチ、ポツ
アスタリスク   : アスター、コメ、ピカ
アンダースコア : アンダーバー、アンスコ

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

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

813 名前:デフォルトの名無しさん mailto:sage [2018/08/19(日) 10:20:25.64 ID:vvrGLkFs.net]
777



814 名前:デフォルトの名無しさん mailto:sage [2018/08/19(日) 20:48:42.50 ID:10g4+5oK.net]
>>768
パブリックと誤検出した場合、当たり前だけどpingは返さない。
ドメインコントローラーが勘違いした場合、端末も勘違いすることがある。
クソな再起動手順がもたらす問題を回避するために…「全プロファイルでファイァーウォール停止」を要求されたらそりゃたまらんわ。
正しい再起動手順でやれば、そんな事態は一切おこらないってのにさ。

>>771
おまい、スレ違い。
ここはバッチスクリプトスレ。
過不足ない通信が可能かどうかを調べるバッチなりなんなりを使うのが主題。
実際にエラーが出て連絡を受けた人間が調査の手始めにpingを打つことは普通にある。

>>772
???WINS名前解決???
何世紀の人????

「少なくとも、相手がTCPを使ったサービスを実行できる状態にある」の言いに使ってるけどね。

815 名前:間違いじゃないだろ。
本当に相手のサービスそのものがダウンしているかどうかにはtelnetを使ったりするし。MS純正じゃないのも含めて。

でもまぁここはバッチスクリプトのスレなので、pingが通った=TCPもイケる、は間違いなのは別で調べて頂戴。

>>770
arp -a って…ギャグのつもりなのか?笑えない。
[]
[ここ壊れてます]

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

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

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

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

820 名前:デフォルトの名無しさん mailto:sage [2018/08/20(月) 01:33:20.51 ID:6ECfAniW.net]
スレタイ読めるか?

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

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

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



824 名前:デフォルトの名無しさん [2018/08/21(火) 09:38:25.46 ID:OVCCyiik.net]
if スクリーンセーバーが起動されていなかったら
if 各種省電力モードになっていなかったら
if モニタの電源が消されていなかったら
if モニタの前に人が座っていたら

できる範囲でいいのでこれらの判定方法を教えてください

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

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

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

828 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 19:24:58.18 ID:PvZ4HV2M.net]
findstr はアホの子と言ってすみませんでした。
「^」や「$」は位置にマッチするメタ文字でした。
お詫びと訂正を申し上げます。

別件で、find /v "" が空文字列にマッチする件は納得いかないため調査中です。

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

830 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 11:04:29.30 ID:55pEzwdh.net]
バッチファイルで上の階層に移動し
そのカレントディレクトリを変数に格納したいんです。
現在の記述

cd ../
set PARENT_DIR=%CD%\

これを一行にまとめる方法ってありませんかね?
for文やパイプラインを使っても駄目でした...

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

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

833 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 11:25:48.74 ID:PFw0pViP.net]
遅延展開でfor文ループをやってるバッチファイル(*.bat)があるんですが
このバッチファイルをメモ帳で



834 名前:開いて内容をクリップボードにコピーして
それをコマンドプロンプト画面に貼り付けたら同じように動作しますか?
[]
[ここ壊れてます]

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

836 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 13:07:23.92 ID:ZzrAYlbi.net]
やってみればわかるけどコマンドプロンプトで
setlocal enabledelayedexpansionやっても効果ないよ。
cmd /v:onで遅延展開有効にしたコマンドプロンプト起動しないとだめ。

837 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 14:01:30.30 ID:Kp4FoNKX.net]
ああほんとだ。こんな感じにすればいいのね
cmd /v:on
set str=hoge &for /l %a in (0,2,10) do ( set str=!str!%a ) & echo !str!

838 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 15:49:42.37 ID:/S+ZLweZ.net]
800!

このシリーズも、12まで言っても、新発見があるのね。
前(バッチファイルプログラミング質問スレ )のも含むと、すでに15スレ目か。

839 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 18:22:30.74 ID:Kp4FoNKX.net]
自分はこのスレになってから来たからまだ新参、過去スレ読まなきゃ

840 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 19:11:50.77 ID:qpELtL6e.net]
>>798
> バッチ ファイルでは、SETLOCAL ENABLEEXTENSIONS または DISABLEEXTENSIONS
> 引数は /V:ON または /V:OFF スイッチよりも優先されます。
> 詳細については SETLOCAL /? を参照してください。
じゃない??
cmd /v:on なんて使ったことがない…

841 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 19:12:48.89 ID:qpELtL6e.net]
あ、もしかしてバッチとコマンドプロンプトでは動きが違うってこと??

842 名前:796 mailto:sage [2018/08/26(日) 19:26:46.75 ID:PFw0pViP.net]
>>797-799
ええと、よくわからなくなってきたので自分でもググってみますね。(^_^;)
どうもありがとうございました。

843 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 19:58:30.97 ID:Kp4FoNKX.net]
ググらずにコマンドプロンプト開いて試せばいいんだよ
・遅延展開を使うために事前に cmd /v:on[Enter]する
・バッチのfor文は%%を%1つに置き換えてから貼る。
・do ループの処理は複数行で書けないので、( 処理 & 処理 & 処理 )と書く。(の後と)の前の半角スペースが大事
とりあえずそんなとこ。



844 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 21:34:45.08 ID:ZzrAYlbi.net]
コマンドプロンプトでもdo の後に括弧つけて改行すれば
More?ってプロンプト出て普通に複数行書ける

> for %x in (hoge) do (
More?

845 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 01:51:11.66 ID:Sgkp88za.net]
SETLOCALに ENABLEEXTENSIONSなどがあったのか、知らなかったなあ

setlocalcのようなものが必要なこと自体cmdの設計ミスなんだけど、ますます複雑化、恥の上塗り路線

846 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 06:43:21.31 ID:EbTlBfxg.net]
>>795
有難うございます!

847 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 07:33:20.85 ID:4tgtf9in.net]
>>808
for %%i in (.) do set PARENT_DIR=%%~dpi

848 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 08:39:19.94 ID:cyhHU1Jz.net]
forとか使わなくても…

%cd:\=&set parent=%

って知られてないんかな?

849 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 08:40:17.66 ID:cyhHU1Jz.net]
すまん勘違いした

850 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 08:54:21.79 ID:eE05Kd4s.net]
for %%i in (..) do set PARENT_DIR=%%~fi

851 名前:デフォルトの名無しさん mailto:sage [2018/09/11(火) 15:07:38.99 ID:7Sv68F+V.net]
テキストを type でユニコードに変換できるけど
cmd /u /c type sjis.txt > uni.txt
これを逆にシフトjisに戻す方法はありますか?

852 名前:デフォルトの名無しさん mailto:sage [2018/09/11(火) 15:30:06.35 ID:7Sv68F+V.net]
cmd /a /c more < uni.txt > sjis2.txt

853 名前:デフォルトの名無しさん mailto:sage [2018/09/11(火) 15:30:11.03 ID:zUlaXCLj.net]
nkf -s uni,txt > sj.txt



854 名前:デフォルトの名無しさん mailto:sage [2018/09/11(火) 15:32:51.33 ID:7Sv68F+V.net]
>>815
すみませんでした
自己解決しました

855 名前:デフォルトの名無しさん mailto:sage [2018/09/11(火) 16:55:41.49 ID:7Sv68F+V.net]
cmd /u /c type s.txt > u.txt
set /p x="" < nul > bom.txt
copy /b bom.txt + u.txt u

856 名前:2.txt
type u2.txt > s2.txt
comp s.txt s2.txt
[]
[ここ壊れてます]

857 名前:デフォルトの名無しさん mailto:sage [2018/09/11(火) 21:05:10.34 ID:hTiklz9U.net]
nkf 推しは死ね。
それはなんでもアリじゃねぇか。
とりあえず、ここは「(デフォでは)全Windows環境で動く」が前提にしろや。

>>817
それが何故上手く動くのかの解説をする義務が君にはあると思う。
「ここのコマンドでSJIS変換が入ってます」くらいの。

858 名前:デフォルトの名無しさん mailto:sage [2018/09/11(火) 21:54:57.13 ID:7Sv68F+V.net]
上記の2バイトのBOMはユニコードのテキストである印です。
例えばメモ帳で空のユニコードのファイルを作成したらbom.txtと同じになる。
typeコマンドはBOMを参照して入力コードを決定し、
コードページを参照して出力コードを決定する。

859 名前:デフォルトの名無しさん mailto:sage [2018/09/11(火) 23:18:52.19 ID:hTiklz9U.net]
>>819
ありがとう。。

> typeコマンドはBOMを参照して入力コードを決定し、
type にそんな機能があったのか!という感じ。

860 名前:デフォルトの名無しさん mailto:sage [2018/09/12(水) 08:46:42.71 ID:wnqO0p2C.net]
もの凄く泥臭いな

861 名前:デフォルトの名無しさん mailto:sage [2018/09/12(水) 12:32:37.36 ID:iSRyeJ5N.net]
応用すれば色々と変換できる
ソースが 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

862 名前:デフォルトの名無しさん mailto:sage [2018/09/12(水) 21:20:08.66 ID:EE8mLPPB.net]
本筋とは関係ないんだが、『2バイトのBOM』のあるレス >>817,822 読み込むと
しばらくしてと JaneStyle(3.75) が落ちる
dat から該当部分『2バイトのBOM』を削除すると問題なくなる
今どき JaneStyle 3.75 使ってる人はほぼ居ないと思うけど参考まで
オマ環だったらゴメンナサイ

863 名前:デフォルトの名無しさん mailto:sage [2018/09/12(水) 22:07:08.64 ID:iSRyeJ5N.net]
俺の環境は Win10 で
Jane Style Version 4.00
不具合無い



864 名前:デフォルトの名無しさん mailto:sage [2018/09/12(水) 22:49:28.45 ID:gLwHpn+Y.net]
>>823
専ブラをバージョンアップしない理由は何?

865 名前:デフォルトの名無しさん mailto:sage [2018/09/12(水) 23:08:31.59 ID:alzyNvAF.net]
>>823
3.75でこのスレを串(API)で読み込んで10分ほど放置、その後新着チェックや別スレを見ても別に落ちたりしないんだが
(なお、HTMLで読み込むとBOM部分が削除されちゃったんで意味なし)

866 名前:デフォルトの名無しさん mailto:sage [2018/09/12(水) 23:09:04.85 ID:iSRyeJ5N.net]
どうやら >>822 のBOM="" の引用符の中は
Internet Explorer 11 ではコピペ出来ないようだ
該当の行の Base64 は
c2V0IC9wIEJPTT0i//4iIDwgbnVsID4gVVRGLTE2TEUudHh0DQo=

867 名前:デフォルトの名無しさん mailto:sage [2018/09/12(水) 23:48:42.33 ID:/kdY+KWC.net]
>>825
プロキシ入れる必要はあって問題なくはないけど読み書きに使えてるから
広告非表示するだけならバイナリ弄る方が手っ取り早いとは思いますが、そんな感じです

>>826
ありゃ、そんな気はしてましたがオマ環でしたか
もうちょっと確認してみると、MacType を切ると再現しなくなったので、
その辺の合わせ技+こちらのその他の環境、かなと
読み込んであのレスのあたりをスクロールして上下させてると、
フォントの描画が MacType が効いてないようになってから100%落ちちゃってたもんで

868 名前:826 mailto:sage [2018/09/13(木) 00:03:58.75 ID:t/mtX2p/.net]
>>828
俺もmactypeは入ってるんだけどなあ

869 名前:デフォルトの名無しさん mailto:sage [2018/09/13(木) 00:07:45.35 ID:t/mtX2p/.net]
なお10回程スクロール(キー、マウスホ

870 名前:ィール、スクロールバー)してみたんだけど []
[ここ壊れてます]

871 名前:デフォルトの名無しさん mailto:sage [2018/09/13(木) 00:47:39.75 ID:vvLnBjaZ.net]
MacTypeは関係ないのでは?
4.0でなんともないし

872 名前:デフォルトの名無しさん mailto:sage [2018/09/13(木) 00:49:13.24 ID:1CXXM/l/.net]
確認ありがとうございます
限定的な環境依存のいわゆる、オマ環、と分かっただけでも収穫です

流石にスレチと思うのでこの辺で

873 名前:デフォルトの名無しさん mailto:sage [2018/09/14(金) 07:13:36.14 ID:FIpeWt57.net]
>>822 のBOMの引用符の中を正しくコピペ出来ない人は、
1行目をこれで代用

chcp 65000
cmd /u /c set /p BOM=+/v8<nul> UTF-16LE.txt



874 名前:デフォルトの名無しさん mailto:sage [2018/09/14(金) 13:56:39.97 ID:Ah8o0gi1.net]
>>833 がうまくいかない
バイナリエディタでできたUTF-16LE.txtを覗くと
2B 00 2F 00 76 00 38 00
となる

875 名前:デフォルトの名無しさん mailto:sage [2018/09/14(金) 16:33:12.67 ID:UfVRD/gP.net]
よくわかんないんだけど
BOMはUTF-16LEでは "FF FE" じゃないの?

876 名前:デフォルトの名無しさん mailto:sage [2018/09/14(金) 17:33:39.58 ID:Ah8o0gi1.net]
>>822ならそうなるよ。

877 名前:デフォルトの名無しさん mailto:sage [2018/09/14(金) 18:51:45.62 ID:fIt3xJ+t.net]
>>834
chcp 65000が利かないのかな?環境は2000? XP?
こっちではどうかな?
for /f "tokens=1,2 delims=[" %%i in ('cmd /u /c echo 寿対') do set xFF=%%i&set xFE=%%j
set /p BOM=%xFF%%xFE%<nul>utf16le.txt

878 名前:デフォルトの名無しさん mailto:sage [2018/09/14(金) 20:35:18.83 ID:Ah8o0gi1.net]
>>837
バッチに >>830を書いて実行したら FF FEになった。 
コマンドプロンプトで1行づつやってたからダメだったらしい
>>837
もバッチで大丈夫でした
Win10です

879 名前:デフォルトの名無しさん mailto:sage [2018/09/19(水) 17:45:23.36 ID:zK7o51II.net]
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 が出ない

880 名前:デフォルトの名無しさん mailto:sage [2018/09/19(水) 18:33:47.81 ID:zK7o51II.net]
setlocal enabledelayedexpansion
set a=abc
if /i !a:~0,1! == !a:~0,1! echo eq


1! の使い方が誤っています。

俺の PC だけなのか?

881 名前:デフォルトの名無しさん mailto:sage [2018/09/19(水) 18:44:41.74 ID:zK7o51II.net]
分かった
^, にしたら良かった

if /i !a:~0^,1! == !a:~0^,1! echo eq

882 名前:デフォルトの名無しさん mailto:sage [2018/09/20(木) 06:54:59.39 ID:SZObeV+C.net]
謎仕様だなあ...

883 名前:デフォルトの名無しさん mailto:sage [2018/09/21(金) 03:25:46.77 ID:q2E2aQh+.net]
また謎です
shiftすると%1は変わるが、%*は変わらない



884 名前:デフォルトの名無しさん mailto:sage [2018/10/03(水) 12:55:17.46 ID:kms9X1pz.net]
表示は出来るが、代入が一部だけ出来ない整数値があったよ

@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=

885 名前:デフォルトの名無しさん mailto:sage [2018/10/05(金) 06:58:30.40 ID:Iu01kfl1.net]
setlocal enabledelayedexpansion
set /a "a=1,b_!a!=2"
set b_

で、

b_0=2

何か変だが、こういう仕様なのか?

886 名前:デフォルトの名無しさん mailto:sage [2018/10/05(金) 08:53:46.57 ID:vSWfZutq.net]
,で分けてあってもsetコマンドは1つだけなので複数コマンドとは思われてないってことなんだろうね

setlocal enabledelayedexpansion
set /a a=1 & set b_!a!=2
set b_!a!

なら大丈夫

887 名前:デフォルトの名無しさん mailto:sage [2018/10/05(金) 17:03:33.33 ID:Iu01kfl1.net]
>>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

888 名前:デフォルトの名無しさん mailto:sage [2018/10/05(金) 17:27:41.95 ID:vSWfZutq.net]
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でできるって知らなかったわ…
謎挙動。

889 名前:デフォルトの名無しさん mailto:sage [2018/10/05(金) 18:09:57.00 ID:Iu01kfl1.net]
set /a で %a% や !a! はあまり使

890 名前:用しない方が良さそうだ
% や ! は演算子に含まれる文字で紛らわしいし
展開のタイミングで予想外の挙動するし
展開時に >>844 のように特異値でエラーになったりするし

値参照は変数名だけでいい
[]
[ここ壊れてます]

891 名前:デフォルトの名無しさん mailto:sage [2018/10/05(金) 18:17:00.44 ID:vSWfZutq.net]
ご自由に。それより某グラマー御用達QAサイトのトップ回答者様が書くバッチがgoto :EOF 多用で頭痛い

892 名前:デフォルトの名無しさん mailto:sage [2018/10/05(金) 18:26:50.86 ID:Iu01kfl1.net]
俺もよく使うよ、goto :eof

893 名前:デフォルトの名無しさん mailto:sage [2018/10/05(金) 18:28:05.47 ID:hOPHqLcn.net]
>>850
何か問題が?
goto :endとかより遥かにいいと思うが



894 名前:デフォルトの名無しさん mailto:sage [2018/10/05(金) 18:33:02.62 ID:Iu01kfl1.net]
goto その物が多いとか言われた事も

895 名前:デフォルトの名無しさん mailto:sage [2018/10/05(金) 18:46:17.97 ID:vSWfZutq.net]
自分だと大抵

{メインルーチン}
goto :EOF

:sub1
{サブルーチン12}
exit /b

:sub2
{サブルーチン}
exit /b

と書くことが多い。

トップ回答者様は

{メインルーチン}
goto :EOF

:sub1
{サブルーチン}
goto :EOF

sub2
{サブルーチン}
goto :EOF

と回答されている。サブルーチンの下のはgoto は不要だし慣れない。

896 名前:デフォルトの名無しさん mailto:sage [2018/10/05(金) 19:02:53.79 ID:Iu01kfl1.net]
戻り値なけりゃどっちでもいい様な気がするが
逆に exit を避けてる人もいるよ

897 名前:デフォルトの名無しさん mailto:sage [2018/10/05(金) 19:53:21.88 ID:LaGwhHU8.net]
俺もgoto派だな

898 名前:デフォルトの名無しさん mailto:sage [2018/10/05(金) 21:35:58.50 ID:RB/KKRkK.net]
gotoは見通しが悪くなるから、極力使わないようにしてる
他の主流の言語だと使えないものが多いから、必然的にそういう書き方に慣れてしまった

899 名前:デフォルトの名無しさん mailto:sage [2018/10/05(金) 23:49:53.55 ID:8nMQUHh9.net]
goto は使わないに越したことはない。
が、制御構文が貧弱な言語では、熟慮の上で使わざるを得ない場面で使う。
が正解。

詳しくはWikipediaで。

900 名前:デフォルトの名無しさん mailto:sage [2018/10/05(金) 23:56:24.52 ID:qkvvR9Zs.net]
Cでもgotoは使うよね

901 名前:デフォルトの名無しさん mailto:sage [2018/10/05(金) 23:58:44.47 ID:8nMQUHh9.net]
C言語にはMISRAとかいう規約があるが無視していい。
あれは組み込み分野だけの特殊なものだと思っていい。

大抵の人間は、「これは思考からはぶいていい」という書き方の方が読みやすい。
だから、「これは戻すか終わらせる」と書いていっていい。
そうすれば、残ったものに集中できるだろ?

まぁ、日ごろ「自分が辞めた後にこれを読まされる人間が困らないかどうか」って考えて書いてるかどうかってことだ。

902 名前:デフォルトの名無しさん mailto:sage [2018/10/06(土) 16:39:29.59 ID:P4YKYACU.net]
あちこちでreturnするのもスパゲッティなgotoと大差がない気がするんだ
テロ的というか

903 名前:デフォルトの名無しさん mailto:sage [2018/10/06(土) 17:10:22.17 ID:GNiE4xH/.net]
字面が違うだけで同じだろ



904 名前:デフォルトの名無しさん mailto:sage [2018/10/06(土) 20:28:48.17 ID:gea8Zy97.net]
gotoもイディオムに従って使えば混乱しない
バッチファイルだとforの方が理解不能で害悪

905 名前:デフォルトの名無しさん mailto:sage [2018/10/06(土) 23:02:20.58 ID:tgEP6apu.net]
gotoがゴーゴーに見えた

906 名前:デフォルトの名無しさん mailto:sage [2018/10/06(土) 23:12:15.45 ID:uJ87E9Rb.net]
>>860-861
IPAの出してるMISRAの解説書のreturnは1か所にしろというルール、
あれはクソofクソのルールだと思うね。early returnこそ正義

Cとbatの書き方は全然比較にならないけど

907 名前:デフォルトの名無しさん [2018/10/07(日) 00:27:12.50 ID:pbh8RIqN.net]
>>861
むしろ goto の良い使い方と言われている制限が、return をまねたもの。

908 名前:デフォルトの名無しさん [2018/10/07(日) 11:03:03.39 ID:Bzp9uIq0.net]
バッチファイルかパワーシェルでIPv4のIPアドレスのみを取得して環境変数に代入するにはどういうコマンドになりますか?
教えてください

909 名前:デフォルトの名無しさん mailto:sage [2018/ ]
[ここ壊れてます]

910 名前:10/07(日) 12:00:15.70 ID:6qmhFN/2.net mailto: 「powershell ip address」で検索! []
[ここ壊れてます]

911 名前:デフォルトの名無しさん mailto:sage [2018/10/07(日) 12:28:26.52 ID:VwaVbKnV.net]
>>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以降だともうちょっと素直に書ける感じだけど

912 名前:デフォルトの名無しさん mailto:sage [2018/10/07(日) 12:53:16.71 ID:Dedwpgqn.net]
アダプタが1つだけならこんなでいいんじゃね?

setlocal enabledelayedexpansion
for /f "tokens=2 delims=:" %%a in ('ipconfig ^|find "IPv4"') do set IPADRESS=%%a
set IPADRESS=%IPADRESS:~1%
echo %IPADRESS%

913 名前:デフォルトの名無しさん [2018/10/07(日) 12:54:26.67 ID:Bzp9uIq0.net]
この処理作るのにバッチとパワーシェル組み合わせないとできないんですか?
ip取得するだけでも結構大変なのですね



914 名前:デフォルトの名無しさん [2018/10/07(日) 12:56:55.73 ID:Bzp9uIq0.net]
と思ったらバッチだけでもできそうなんですね、アダプターは一つです
ちょっと色々教えてもらったのでテストしてみます!

915 名前:870 mailto:sage [2018/10/07(日) 13:03:20.66 ID:Dedwpgqn.net]
遅延変数展開の呪文要らなかったわ、1行目削っていいよ

916 名前:デフォルトの名無しさん [2018/10/07(日) 13:07:01.74 ID:Bzp9uIq0.net]
遅延環境数ってforとifの()で使用するときだけ必要なんでしたっけ?

917 名前:デフォルトの名無しさん mailto:sage [2018/10/07(日) 13:23:02.79 ID:Dedwpgqn.net]
だいたいその理解でおk
forやifの()内のスクリプトブロックが複数処理で変数代入とその参照のペアがある場合に使う
1処理だけとか、代入だけとかなら不要

918 名前:デフォルトの名無しさん mailto:sage [2018/10/07(日) 17:41:47.85 ID:0jrGYEp4.net]
無限ループの原因は何か
SET A=1073741824
FOR /L %%B IN (-%A%,%A%,%A%) DO ECHO %%B

919 名前:デフォルトの名無しさん mailto:sage [2018/10/07(日) 19:04:07.20 ID:Dedwpgqn.net]
set /a A=1073741824
1073741824
set /a B=A+A
-2147483648
となるからね、32bitINTの範囲が-2147483648〜-2147483647
2進表記の最上位bitが1が立ってしまったらマイナス値

920 名前:デフォルトの名無しさん mailto:sage [2018/10/07(日) 19:25:23.31 ID:Dedwpgqn.net]
試してみるとfor /l 文ではステップ値が1073741824以上の場合必ずバグったループになるね、まあ仕方ないのかも

921 名前:デフォルトの名無しさん mailto:sage [2018/10/07(日) 19:43:19.94 ID:0jrGYEp4.net]
内部的にどんな計算してるか気になるところです
B は -1073741824,0,1073741824 なので
普通に考えると32ビットのオーバーフローはしてない筈

922 名前:デフォルトの名無しさん mailto:sage [2018/10/07(日) 19:55:29.49 ID:0jrGYEp4.net]
ああ、分かった
4ループめでオーバーフローするのか
3ループめで最終値に等しいと抜けるんじゃ無いわけか

923 名前:デフォルトの名無しさん [2018/10/07(日) 19:57:49.70 ID:2JwzOMBB.net]
バッチファイルのif文でパワーシェルのif -Orみたいな処理できますか?



924 名前:デフォルトの名無しさん mailto:sage [2018/10/07(日) 20:18:06.07 ID:0jrGYEp4.net]
IFの条件は2個の値を比較するだけ
複雑なOR,AND,XORとかあるんなら計算して結果を変数に入れる
それをIFの条件で使う

925 名前:デフォルトの名無しさん mailto:sage [2018/10/08(月) 21:58:47.76 ID:To7x1PVP.net]
あると便利なミニミニバッチ

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

926 名前:デフォルトの名無しさん mailto:sage [2018/10/09(火) 08:38:25.31 ID:IIAdkwpd.net]
画面クリアは普通にcls打つのと何が

927 名前:違うん? []
[ここ壊れてます]

928 名前:デフォルトの名無しさん mailto:sage [2018/10/09(火) 11:35:59.50 ID:9WevvN1n.net]
時刻表示ならプロンプト変えたら?
clsは>>884
クリップボード履歴管理系のアプリ使ってる人には無用?

929 名前:デフォルトの名無しさん mailto:sage [2018/10/09(火) 15:53:20.49 ID:hXgFZ2lj.net]
>>884
一文字でいいので、お菓子を食べながらでもできる、大差

930 名前:デフォルトの名無しさん mailto:sage [2018/10/10(水) 17:37:49.95 ID:Wl83IH5q.net]
そういうしょぼいものならdoskeyでも使っとけ

931 名前:デフォルトの名無しさん mailto:sage [2018/10/11(木) 22:01:20.44 ID:aIIKUaH8.net]
1文字とか何かで誤爆しそうで危うすぎる

932 名前:デフォルトの名無しさん [2018/10/12(金) 00:17:12.22 ID:xVyRtSc0.net]
くだらねー

933 名前:デフォルトの名無しさん mailto:sage [2018/10/13(土) 05:37:42.36 ID:YmkYzRio.net]
copyコマンドがおかしい
copy x+y z
とするとzに改行追加されている

copy /B x+y z
だと問題なしだが??



934 名前:デフォルトの名無しさん mailto:sage [2018/10/13(土) 07:34:07.12 ID:TS7U3WRI.net]
>>890これね
ttp://shigechi-64.hatenablog.com/entry/20090717/1247798200

935 名前:デフォルトの名無しさん mailto:sage [2018/10/13(土) 19:25:44.82 ID:fQqIQRVk.net]
改行じゃなくて 0x1A の 1byte なら付加されるが

echo test> a
dir a
copy a /b + nul /a
dir a

サイズが 1byte 増える

936 名前:デフォルトの名無しさん mailto:sage [2018/10/14(日) 01:22:10.62 ID:IWBgfNe4.net]
>>891
以前から知られていたのですね

そのサイトはウィルス注意報が出たので見ませんでしたが

937 名前:デフォルトの名無しさん mailto:sage [2018/10/14(日) 06:32:47.46 ID:5zXkQKrC.net]
テキストファイルのEOF(0x1A)は前世紀の遺物
昔のテキストエディタはファイルの末尾にEOF(0x1A)を付加していた。
仕様が古すぎて今じゃCOPYのヘルプを見ても、詳細が分からん状態

copy でファイルを連結する時は /a がデフォルト
ちなみに copy /a はEOF(0x1A)を付加するだけじゃないぞ
ファイルの途中に0x1Aが有ったらそれ以降が無くなってしまう怖い仕様

あと、echo xxx >> とかでテキストを追加したら末尾の0x1Aは勝手に削除される

938 名前:デフォルトの名無しさん mailto:sage [2018/10/14(日) 09:07:44.01 ID:YBMQaeBO.net]
>>30
>>31
ずいぶん昔の質問で悪いんだが
これって全ての引数を意味する「%*」に起動時のコマンドラインは含まれないってこと?

939 名前:デフォルトの名無しさん mailto:sage [2018/10/14(日) 18:08:37.67 ID:gwXaIkcp.net]
chcp 65001入ってるスクリプトをUTF-8で保存して動かしてみたらエスケープ処理が酷い・・・

940 名前:デフォルトの名無しさん mailto:sage [2018/10/15(月) 01:28:48.04 ID:yVBNeV/e.net]
>>895
そうです
バッチはいろいろ癖があるので、そんなものだと思うしかないです

別件
echo %*
shift
echo %*

rem %* はshiftされない

941 名前:デフォルトの名無しさん mailto:sage [2018/10/16(火) 00:24:50.38 ID:GeydM3gl.net]
>>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

942 名前:デフォルトの名無しさん mailto:sage [2018/10/25(木) 05:27:15.65 ID:cKUaktMr.net]
echo %__APPDIR__%
C:\Windows\SysWOW64\
これが出る時32ビットのコマンドプロンプトらしいんですが
64ビットのコマンドプロンプトと何か違うんでしょうか

943 名前:デフォルトの名無しさん mailto:sage [2018/10/27(土) 11:16:03.78 ID:NXHcy7gB.net]
reg query "HKU\.DEFAULT\Control Panel\International"

表示された最後の行に
H



944 名前:KEY_USERS\.DEFAULT\Control Panel\International\・・・・・・
これは何だろうとレジストリエディタで見ると謎の文字で地球が3つ。
しかしメモ帳で表示出来る文字が
コンソール画面で表示出来ないのはダメだね
[]
[ここ壊れてます]

945 名前:デフォルトの名無しさん mailto:sage [2018/10/27(土) 12:02:14.11 ID:8ILfgags.net]
メモ帳「俺はだいぶ前からユニコード対応済みだから表示はするさ、ANSI(CP932)で保存はできなくてもなー」

946 名前:デフォルトの名無しさん mailto:sage [2018/10/27(土) 12:15:54.46 ID:NXHcy7gB.net]
DIRコマンドでもユニコード対応してるよね。ちゃんと表示される。
でもこの地球文字はDIRコマンドでも表示されないようだ
フォントの問題かねえ

947 名前:デフォルトの名無しさん mailto:sage [2018/10/27(土) 13:14:57.64 ID:8ILfgags.net]
フォント問題だね、
メモ帳とかレジストリエディタはフォントリンクで表示用フォントが持ってないコードも他のフォントにあればそれで代用表示するから

948 名前:デフォルトの名無しさん mailto:sage [2018/10/27(土) 15:49:46.95 ID:IkTi26EG.net]
なんだよ地球文字って?

949 名前:デフォルトの名無しさん mailto:sage [2018/10/27(土) 16:16:07.64 ID:NXHcy7gB.net]
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

950 名前:デフォルトの名無しさん mailto:sage [2018/10/27(土) 16:59:45.97 ID:r0d5m4I8.net]
そんな文字(絵文字?)があるのか。
初めて見て、びっくり。(; ̄Д ̄)

951 名前:デフォルトの名無しさん mailto:sage [2018/10/27(土) 17:04:05.15 ID:NXHcy7gB.net]
それ、右上のリンクを押したら色々出て来て笑える

952 名前:デフォルトの名無しさん mailto:sage [2018/10/27(土) 22:17:46.77 ID:8ILfgags.net]
for /f %a in ('dir /b') do echo %~za,%~ta
なんてことできたんだねえ、
dir /bは他の属性情報を削いでるからできないと思い込んでた

953 名前:デフォルトの名無しさん mailto:sage [2018/10/28(日) 08:43:59.31 ID:uzLWPyey.net]
>>908
dirで取得した情報使うわけじゃないから
カレントにxxx.txtとかのファイルがあれば
for /f %a in ("xxx.txt") do echo %~za
とかできるよ



954 名前:デフォルトの名無しさん mailto:sage [2018/10/28(日) 11:17:25.40 ID:ecNurFe9.net]
dpnxfだったら単にファイル名にカレントのパスを付けるだけだからチグハグでも出来ちゃうんだぜ
aaa.txtっていうファイルがカレントに存在してなくても構わないってことだ
pushd d:\xxx\yyy
for /f %a in ("aaa.txt") do echo %~fa
ってやれば、d:\xxx\yyy\aaa.txtっていう架空のファイルのフルパス名を表示してくれる

955 名前:デフォルトの名無しさん mailto:sage [2018/10/28(日) 20:39:42.80 ID:5N/SSOj8.net]
>>905
俺のブラウザが古いのかうまく表示されなかったけど、これか。
i.stack.imgur.com/DQ2Ls.png

956 名前:デフォルトの名無しさん [2018/10/29(月) 00:52:54.50 ID:m4kOmKq3.net]
質問です。
データが以下のように入っている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行だけ試しにやってみたら理想と近い形になったのですが、
削除対象が複数になると上手くいきませんでした。

957 名前:デフォルトの名無しさん mailto:sage [2018/10/29(月) 06:11:32.56 ID:VYDzXbvz.net]
?
findstr /v "AAA AAD" bass.csv>output.csv
で行くはずだがだめだった?
これが行ければ除外パターンを作るfor /f文を前段に作るだけで終わると思うが

958 名前:デフォルトの名無しさん mailto:sage [2018/10/29(月) 06:59:07.30 ID:VYDzXbvz.net]
行けるじゃん…そういえばfindstrは/gオプションあるから、for文も要らんね

findstr /v /g:delete.txt bass.csv>output.txt

なおfindstrの複数検索パターン指定は和文だと失敗する。


959 名前:博嘯フ検索なら問題なし []
[ここ壊れてます]

960 名前:デフォルトの名無しさん mailto:sage [2018/10/29(月) 07:23:43.41 ID:g89iCylL.net]
よくわからんが
FINDSTR /B にして検索文字列のあとに , を付ければいいんじゃね

961 名前:デフォルトの名無しさん mailto:sage [2018/10/29(月) 07:26:06.09 ID:g89iCylL.net]
あ、/I も付ければいいかも

962 名前:デフォルトの名無しさん mailto:sage [2018/10/29(月) 08:03:30.04 ID:VYDzXbvz.net]
行頭以外にAAAやAADが記述されており、それは出力したいなら /B は合った方がいい

963 名前:デフォルトの名無しさん mailto:sage [2018/10/29(月) 08:12:46.70 ID:VYDzXbvz.net]
訂正 AABやAADが だった



964 名前:デフォルトの名無しさん mailto:sage [2018/10/29(月) 08:15:25.80 ID:g89iCylL.net]
無いとファイル名の部分一致するかも
拡張子あるなら末尾の , は要らんかも
和文ダメなんだ知らんかった

965 名前:デフォルトの名無しさん mailto:sage [2018/10/29(月) 09:16:39.77 ID:g89iCylL.net]
>>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

966 名前:デフォルトの名無しさん mailto:sage [2018/10/29(月) 09:25:17.80 ID:g89iCylL.net]
>>920
3行目訂正
if %n%==0 (copy bass.csv output.csv & goto :eof ) else set /a n-=1

967 名前:デフォルトの名無しさん mailto:sage [2018/10/29(月) 10:42:05.23 ID:VYDzXbvz.net]
おいらが書くならこう

@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

968 名前:デフォルトの名無しさん mailto:sage [2018/10/29(月) 11:13:29.52 ID:K68WvpFD.net]
>>899
x64だと
C:\Windows\System32\

x64だと64bitで書いたアプリもあるのでフォルダで区別
ここらへんwindows自体が手品のようなことをしていていわば巨大ウィルスソフト化
x64はintelの失敗作、性能を優先しすぎて使い勝手が大幅に悪くなった

969 名前:デフォルトの名無しさん mailto:sage [2018/10/29(月) 11:17:19.87 ID:P47cxv7B.net]
CSVのフィルタ処理をバッチでやろうとは思わないけど参考になった

970 名前:デフォルトの名無しさん mailto:sage [2018/10/29(月) 11:21:43.07 ID:VYDzXbvz.net]
すまん、>>922の内側のfor分の %%変数は%%cの方がよかった。
ローカル変数的な振る舞いで動作上は問題ないけど

971 名前:デフォルトの名無しさん mailto:sage [2018/10/29(月) 11:39:07.63 ID:wCs1yHBV.net]
先輩方、お知恵ありがとうございます。

情報の後出しとなってしまって大変申し訳ありません。
ファイル名には枝番がふられているものがあり、
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
================================

972 名前:デフォルトの名無しさん mailto:sage [2018/10/29(月) 11:41:47.37 ID:VYDzXbvz.net]
delete.txtにカンマ加えて書けばいいんでないの?
AAB,
AAD,

973 名前:デフォルトの名無しさん mailto:sage [2018/10/29(月) 11:55:18.87 ID:g89iCylL.net]
>>926
>>920でOK

>>922
delete.txtの中の
テキストに半角スペースや ! 文字があると誤動作



974 名前:デフォルトの名無しさん mailto:sage [2018/10/29(月) 12:31:59.63 ID:g89iCylL.net]
>>926
もし>>920を使うなら>>921で訂正してください

975 名前:デフォルトの名無しさん mailto:sage [2018/10/29(月) 13:38:05.43 ID:SulfyTCP.net]
>>923
質問は64bitならどういう値になるって質問ではなくて、
32bitの場合と64bitの場合とで機能・動作的に何が違うの?
って意味だと思うけど

976 名前:デフォルトの名無しさん mailto:sage [2018/10/29(月) 13:42:01.94 ID:t/dvzEws.net]
>>930
違うよ

977 名前:デフォルトの名無しさん mailto:sage [2018/10/29(月) 13:43 ]
[ここ壊れてます]

978 名前::07.31 ID:VYDzXbvz.net mailto: >>928
半角スペースはケアレス、!は全く気にしていなかった。勉強になった。有難う
[]
[ここ壊れてます]

979 名前:デフォルトの名無しさん mailto:sage [2018/10/29(月) 22:11:24.00 ID:BnWHDqaq.net]
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

980 名前:デフォルトの名無しさん mailto:sage [2018/10/29(月) 22:24:44.16 ID:XpqRFBWF.net]
地球はチタマと読むのです

981 名前:899 mailto:sage [2018/10/30(火) 17:29:47.50 ID:GfHx62hK.net]
>>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が自分自身を騙してるのでしょうか
たぶん機能上は違いが無いと思いますが

982 名前:デフォルトの名無しさん mailto:sage [2018/10/30(火) 17:53:27.44 ID:ZaLbntHv.net]
その呼び出してるアプリが32bitアプリなのだと予想

983 名前:デフォルトの名無しさん mailto:sage [2018/10/30(火) 17:57:36.37 ID:GfHx62hK.net]
C:\Program Files (x86)なので32ビットですね



984 名前:デフォルトの名無しさん mailto:sage [2018/10/30(火) 18:58:54.08 ID:ZaLbntHv.net]
64bitOSでの32bitアプリはエミュレーションみたいな物で、32bitアプリから64bitのdllは使えないし、その逆も出来ないようになってる。なのでcmd.comも分けてあるという理由でメモリや動作モード以外の機能差は無いのではなかろうかと

985 名前:デフォルトの名無しさん mailto:sage [2018/10/30(火) 19:57:27.49 ID:8A3JIwUi.net]
32bitアプリから見た C:\Windows\System32 の実体は C:\Windows\SysWOW64 だから、
System32にあってもSysWOW64にないコマンド(WSL関連とか)は実行できないとか、
環境変数の値がビット数に応じて違うとか、その程度の違い

986 名前:デフォルトの名無しさん mailto:sage [2018/10/30(火) 22:17:05.55 ID:GfHx62hK.net]
試しに
64ビットでビルドしたコマンドは
普通に動作しました

>echo %__APPDIR__%
C:\Windows\SysWOW64\

>Hello_World.exe
Hello World!

987 名前:デフォルトの名無しさん mailto:sage [2018/10/31(水) 19:08:48.10 ID:QI0rTSh9.net]
以前は確かsystem32のcmdとSysWOW64のcmdが同じだったんだ
そんでもってWinSxSのcmdが違っていた
今はsystem32とSysWOW64が違うんだな
WinSxSのはsystem32と同じになってる
手品の種が変った?

988 名前:デフォルトの名無しさん mailto:sage [2018/10/31(水) 21:11:08.13 ID:lh+glCNV.net]
>>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% 

989 名前:デフォルトの名無しさん mailto:sage [2018/11/01(木) 07:13:18.37 ID:5DVAbKOZ.net]
夜見た時は何をやってるのか分からなかった。
finnd /vをパイプでパターン数繰り返すわけね。

990 名前:デフォルトの名無しさん [2018/11/01(木) 11:22:42.11 ID:06yasLFO.net]
%ってファイル名に使えるんだね
半角記号でバッチの挙動に関係するのは「!」くらいしか

991 名前:知らなかったわ。

じゃあ変数名と同じ名前のフォルダ(例えば「%appdata%」)に
cdで移動するのは無理って事?
[]
[ここ壊れてます]

992 名前:デフォルトの名無しさん mailto:sage [2018/11/01(木) 11:39:55.83 ID:OrBUhe7y.net]
@echo off
md %%appdata%%
cd %%appdata%%
cd
pause

993 名前:デフォルトの名無しさん mailto:sage [2018/11/01(木) 11:46:36.02 ID:OrBUhe7y.net]
>set /p a=
%appdata%

>cd %a%

>cd
D:\%appdata%



994 名前:デフォルトの名無しさん mailto:sage [2018/11/01(木) 19:53:37.88 ID:5DVAbKOZ.net]
for /f 文の時の()内ってダブルコーテーションのパスつっこむとダメなのね
知らなかったわ……

995 名前:デフォルトの名無しさん mailto:sage [2018/11/01(木) 21:09:19.14 ID:OeVqRgzL.net]
usebackqがあるだろ

996 名前:デフォルトの名無しさん mailto:sage [2018/11/02(金) 17:48:30.39 ID:C2p2E45I.net]
>>945
%の前に%を置いてエスケープするのか
どうもありがとう

997 名前:デフォルトの名無しさん mailto:sage [2018/11/05(月) 20:55:44.71 ID:LVlVWx6w.net]
遅延展開だと論理否定の単項演算子が全く使い物にならない
@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

998 名前:デフォルトの名無しさん mailto:sage [2018/11/06(火) 07:20:24.04 ID:4bA2Iy3p.net]
>>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

999 名前:デフォルトの名無しさん mailto:sage [2018/11/06(火) 08:19:38.89 ID:NUZ4yNuE.net]
言語仕様に謎が多すぎて業務に使うには怖い

1000 名前:デフォルトの名無しさん [2018/11/06(火) 10:53:18.93 ID:XCQlzVed.net]
標準インストールされてるという以外に長所はないよなぁ

1001 名前:デフォルトの名無しさん mailto:sage [2018/11/06(火) 11:06:43.59 ID:OYWwvpi1.net]
今のWindowsなら、Powerchell?、WSH?なら、標準インストールされているが・・・・。
以前なら、REXX(PC-DOS)とか、QBASICあたり?

でも、使い物になるのは・・・・。

1002 名前:デフォルトの名無しさん mailto:sage [2018/11/06(火) 11:25:34.30 ID:CgLejKNb.net]
QBASICは中身がないので別途買わないと動かないよ

1003 名前:デフォルトの名無しさん mailto:sage [2018/11/06(火) 14:54:37.43 ID:7wQVLanf.net]
>>951
!を取って
set /a "b=(5^^5)"
では
オペランドがありません。
0
って出るのは何故?



1004 名前:デフォルトの名無しさん mailto:sage [2018/11/06(火) 15:53:15.52 ID:4bA2Iy3p.net]
>>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)"
オペランドがありません。

1005 名前:デフォルトの名無しさん mailto:sage [2018/11/06(火) 15:56:47.52 ID:4bA2Iy3p.net]
たぶん式に遅延変数があると2回展開してるんじゃ?

1006 名前:デフォルトの名無しさん mailto:sage [2018/11/06(火) 16:35:24.41 ID:4bA2Iy3p.net]
遅延変数が無くても
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 になってると思う

1007 名前:デフォルトの名無しさん mailto:sage [2018/11/06(火) 16:48:03.38 ID:4bA2Iy3p.net]
遅延無しの環境では二重引用符だけでエスケープは要らないようだ
>cmd /v:off
>set /a "a=!(123^123)"
1
>

1008 名前:デフォルトの名無しさん mailto:sage [2018/11/07(水) 07:55:29.42 ID:BI4/Q6Ue.net]
遅延モードでは式の中に ! 文字があると展開の処理が違うんだろう。
だから ^ 文字の扱いも変化する。

1009 名前:デフォルトの名無しさん mailto:sage [2018/11/08(木) 07:17:29.99 ID:9iJL9tpZ.net]
@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使えば簡単だけど

1010 名前:デフォルトの名無しさん mailto:sage [2018/11/09(金) 09:53:58.29 ID:3Y5lMbnv.net]
%~nx0 が変だ

>dir /b
test.bat

>type test.bat
@echo file="%~nx0"

>test
file="test.bat"

>"test"
file="test"

>

1011 名前:デフォルトの名無しさん mailto:sage [2018/11/09(金) 11:09:53.39 ID:3Y5lMbnv.net]
どうも先頭の引用符が怪しい

>.\"test"
file="test.bat"

>test"
file="test.bat"

>"test
file="test"

>

1012 名前:デフォルトの名無しさん mailto:sage [2018/11/09(金) 17:30:33.44 ID:3Y5lMbnv.net]
>te"st
file="test.bat"

1013 名前:デフォルトの名無しさん mailto:sage [2018/11/09(金) 19:53:31.9 ]
[ここ壊れてます]



1014 名前:2 ID:BPg47oOK.net mailto: test.exe.bat []
[ここ壊れてます]

1015 名前:デフォルトの名無しさん mailto:sage [2018/11/09(金) 21:20:20.98 ID:3Y5lMbnv.net]
>t"E"s"T"
file="test.bat"

>"t"E"s"T"
file="t"E"s"T"

先頭が引用符だと
%~nx0 は入力丸写しの
拡張子無視のバカ仕様らしい

1016 名前:デフォルトの名無しさん mailto:sage [2018/11/14(水) 01:02:30.37 ID:fbx51wpG.net]
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 の中のファイルは拡張子が消えた状態になってしまいます。
ファイル名から元の拡張子を消し、中のファイルは拡張子を残したままってどこを変えればよいのでしょうか?

1017 名前:デフォルトの名無しさん mailto:sage [2018/11/14(水) 06:32:53.24 ID:JBsUV7Ak.net]
単に7zipのcliコマンドオプションの使い方で、バッチと関係ないなあ...

1018 名前:デフォルトの名無しさん mailto:sage [2018/11/14(水) 06:39:30.75 ID:vPR2E9Wi.net]
-txz だと書庫のヘッダににファイル名の情報は無い
書庫名を変えて開くと中のファイル名も同じく変わるだけ
中身は同じ

1019 名前:デフォルトの名無しさん mailto:sage [2018/11/14(水) 06:57:09.62 ID:JBsUV7Ak.net]
要するにxzファイルフォーマットの限界だな。ファイル名を保持する機能が無い

1020 名前:デフォルトの名無しさん mailto:sage [2018/11/14(水) 07:10:28.19 ID:vPR2E9Wi.net]
だから複数ファイルの圧縮も出来ない

1021 名前:デフォルトの名無しさん mailto:sage [2018/11/15(木) 02:26:56.15 ID:/pNu0fIl.net]
できないのか。残念。

1022 名前:デフォルトの名無しさん mailto:sage [2018/11/15(木) 03:44:20.67 ID:sPg3U71k.net]
xzじゃないとダメなの?
zipやrarや7zにしちゃダメなの?

1023 名前:デフォルトの名無しさん mailto:sage [2018/11/15(木) 04:23:57.43 ID:eQKfIPvp.net]
反応遅っっw



1024 名前:デフォルトの名無しさん mailto:sage [2018/11/15(木) 04:24:41.49 ID:MW4yWYe4.net]
>>968 が何をしたいのか分からん。
-txz なのに拡張子が .7z になってる。
なぜ .xz にしないのか。

1025 名前:デフォルトの名無しさん mailto:sage [2018/11/19(月) 19:31:45.62 ID:qVZWX1fW.net]
ところで、結局、DOSでの圧縮はどの形式がおすすめ?

1026 名前:デフォルトの名無しさん mailto:sage [2018/11/19(月) 20:03:49.96 ID:Qq88xGOU.net]
DOSなんてもう使ってないし

1027 名前:デフォルトの名無しさん mailto:sage [2018/11/19(月) 20:26:27.04 ID:8P0ZFwQc.net]
>>977
lzh 一択

1028 名前:デフォルトの名無しさん mailto:sage [2018/11/19(月) 23:22:31.08 ID:uf9ZfFD/.net]
>>979
右に同じ

1029 名前:デフォルトの名無しさん mailto:sage [2018/11/20(火) 03:39:49.15 ID:rmOcRzV5.net]
lzhは脆弱性があるから使うべきではない
zip一択
DOSで使えるzipアプリがあるかどうかは知らん

1030 名前:デフォルトの名無しさん mailto:sage [2018/11/20(火) 06:48:32.61 ID:TCh3BaRv.net]
>>981
> lzhは脆弱性があるから使うべきではない
脆弱性は対策されてるよ
使用しない方がいいと言うのはlzhの脆弱性じゃなくてアンチウイルスソフトが対応しないから

1031 名前:デフォルトの名無しさん mailto:sage [2018/11/20(火) 09:38:17.04 ID:O/AOgigh.net]
そもそもアンチウィルスソフトに対応してもらえないってのが脆弱性でしょ。

事実上公式最新版のUNLHA.DLLはソース非公開で
ソース公開してる古いDOS版はヘッダ構造体がサイズ固定で静的に確保されてるから、
例えばDOSでは考慮しなくて良かった数千文字の
長いファイル名があるとバッファオーバーランを引き起こす。
アンチウィルスソフトによってはDOS版のソースを使ってるので
バッファオーバーランを発生させるようなヘッダを不正扱いして
該当書庫のそれ以降の圧縮ファイルの検査をスルーするものがあるが、
そのような検査されない圧縮ファイルであっても事実上公式のUNLHA.DLLでは解凍できてしまう。
検査はされないが解凍できてしまうようなファイルにウィルスしこまれたら大変ってのが「脆弱性」なわけ。
アンチウィルスソフトが対応して

1032 名前:ュれないなら脆弱性は対策されてるとは言えないっしょ。

対処法は誰かが移植性の高いソースコードを書いて公開するぐらいしかないよーな。
[]
[ここ壊れてます]

1033 名前:デフォルトの名無しさん mailto:sage [2018/11/20(火) 21:31:14.05 ID:9NuM4Bsa.net]
>>983
どっちもねーよアホンダラ。
LHA は日本独自の圧縮アルゴリズム&zipに追い越された。
いわゆるガラパゴス技術。いらん。
数年前まで役所が .lzh とかで何かしら添付ファイル送ってくることがあって文句付けようかと思ったことがある。



1034 名前:デフォルトの名無しさん mailto:sage [2018/11/20(火) 22:34:45.84 ID:7AOElbkD.net]
>>983
今時16bit環境なんかで使ってる奴いないだろ
unlha32.dllは脆弱性の対策されてるから言いがかりレベル

1035 名前:デフォルトの名無しさん mailto:sage [2018/11/20(火) 22:42:17.88 ID:U4aYcO/c.net]
純粋なDOS(16bit)を使っててウィルスが怖いなんて思う人いるのか

1036 名前:デフォルトの名無しさん mailto:sage [2018/11/20(火) 22:44:33.63 ID:htpgQQTF.net]
win95か98だとしたら背筋が凍る

1037 名前:デフォルトの名無しさん mailto:sage [2018/11/20(火) 22:50:05.05 ID:U4aYcO/c.net]
>>987
いやだからDOSを狙ったウィルスなんかが今時流通してるって思うのかってことさ

1038 名前:デフォルトの名無しさん mailto:sage [2018/11/21(水) 00:32:47.70 ID:dG4a7MEF.net]
>>985
unlha32.dllが対策したのはバッファーオーバーランそのものについてだけ、ね。

>>983のは、同じ書庫データなのにソフトによって取り扱い方に違いができてしまった事が原因で、
言わば仕様とかlzhのエコシステム全体の不具合だから
unlha32.dllだけ対策しました、アンチウイルスソフトが対策しねーのが悪いって喚いてもしょうがないのよ。

1039 名前:デフォルトの名無しさん mailto:sage [2018/11/21(水) 06:43:17.14 ID:sFoC6dAL.net]
>>989
馬鹿なの?
そんなのlhzに限らずどんな書庫ファイルでも同じだろ
単にアンチウイルスソフトが対応しなかっだけの話
まあグローバルに展開してるマカフィーやシマンテックから見たら極東でちょっと流行ってただけのファイルフォーマットにいちいち対応してられるかよって思うのも無理はないわな

1040 名前:デフォルトの名無しさん mailto:sage [2018/11/21(水) 08:07:38.87 ID:dG4a7MEF.net]
>>990
いや、lzhのヘッダは安全性そっちのけで拡張性と互換性を優先した結果、
論理的な最大ヘッダサイズが4ギガバイト(要するに制限がない)とか酷い事になってるからねぇ……

例えば最大で64キロバイト程度のzipなんかと同等に並べるのはちょっと無理じゃねーかと。

1041 名前:デフォルトの名無しさん mailto:sage [2018/11/21(水) 09:43:13.45 ID:nqncv/qX.net]
>>990
https://micco.mars.jp/vul/2010/mhvi20100425.htm

1042 名前:デフォルトの名無しさん mailto:sage [2018/11/21(水) 09:46:53.64 ID:sFoC6dAL.net]
>>991
それの何が問題なんだ?
まさか4GBのメモーがないとヘッダーが読めないとか思ってるのか? w

1043 名前:デフォルトの名無しさん mailto:sage [2018/11/21(水) 09:50:12.82 ID:sFoC6dAL.net]
>>992
だからウィルス対策ソフトが対応してないって話だろ
何回ループすれば理解できるんだよ w



1044 名前:デフォルトの名無しさん mailto:sage [2018/11/21(水) 11:07:43.06 ID:dG4a7MEF.net]
>>993
おいおい……

64キロバイトを一括でメモリに読み込んで処理すんのと
4ギガバイトを逐次読み込んで処理しなきゃいけないのとでは
実装の難易度もコストも全然違うんだけど……

初心者でもわかりやすいところで言えば
64キロバイトの方はメモリが潤沢にあれば静的なメモリ確保でもいいけど
4ギガバイトの方は普通は動的なメモリ確保が必須になるし。

1045 名前:デフォルトの名無しさん mailto:sage [2018/11/21(水) 11:11:51.13 ID:guoVPW2S.net]


1046 名前:デフォルトの名無しさん mailto:sage [2018/11/21(水) 11:49:46.67 ID:eSuVM7gW.net]


1047 名前:デフォルトの名無しさん mailto:sage [2018/11/21(水) 12:29:53.03 ID:sFoC6dAL.net]
>>995
で、何が問題なの?
自分には実装できねーから糞だって話か? w

1048 名前:デフォルトの名無しさん mailto:sage [2018/11/21(水) 12:35:19.04 ID:sFoC6dAL.net]
そもそも動的メモリー確保が難しいとかどんだけレベル低いんだよ w

1049 名前:デフォルトの名無しさん mailto:sage [2018/11/21(水) 12:36:54.21 ID:sFoC6dAL.net]
と言う事でバカの頭に脆弱性があっただけ
終わり w

1050 名前:1001 [Over 1000 Thread.net]
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 619日 22時間 49分 43秒

1051 名前:過去ログ ★ [[過去ログ]]
■ このスレッドは過去ログ倉庫に格納されています






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<301KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef