拡張子が .cmd または .bat のバッチファイルのスクリプティング(プログラミング)に関わる
質問,テクニック(JScript,Perl等の埋め込みなど含む),関連情報のためのスレです。
※何でも無理矢理バッチでやろうとせず、WSH等の使用も検討しましょう。
前スレ
【.cmd】 バッチファイルスクリプト %11 【.bat】©2ch.net
http://echo.2ch.net/test/read.cgi/tech/1424858999/
それ以前の過去スレ
%10 http://peace.2ch.net/test/read.cgi/tech/1374205515/
%9 http://toro.2ch.net/test/read.cgi/tech/1335015478/
%8 http://toro.2ch.net/test/read.cgi/tech/1315844420/
%7 http://hibari.2ch.net/test/read.cgi/tech/1298873550/
%6 http://hibari.2ch.net/test/read.cgi/tech/1277465356/
%5 http://pc12.2ch.net/test/read.cgi/tech/1242268171/
%4 http://pc12.2ch.net/test/read.cgi/tech/1229955189/
%3 http://pc11.2ch.net/test/read.cgi/tech/1217860043/
%2 http://pc12.2ch.net/test/read.cgi/tech/1197881068/
%1 http://pc11.2ch.net/test/read.cgi/tech/1178281991/
探検
【.cmd】 バッチファイルスクリプト %12 【.bat】©2ch.net
レス数が1000を超えています。これ以上書き込みはできません。
2017/03/11(土) 13:47:11.66ID:2LSSeyH1
2017/03/11(土) 14:16:25.14ID:tWxSSf/m
2GET
2017/03/11(土) 17:24:01.08ID:aIgw+L4R
そろそろ次スレ立てた方がいいと思う
2017/03/11(土) 19:08:44.39ID:ayh8mOJp
タヒ
2017/03/12(日) 22:04:13.40ID:LKmH3irJ
達人の方々!お教えください
set文による文字列の置き換えで
=を置き換えたいのですが
どのように記述すればよいのでしょうか?
set文による文字列の置き換えで
=を置き換えたいのですが
どのように記述すればよいのでしょうか?
2017/03/13(月) 02:51:46.65ID:ieWeiZc+
>>5
setの文字列置換では無理
=の個数が決まっているのならforでderims==
不特定なら一文字ずつ=かどうかを判定し=なら置換したい文字列を付け足し
テストしてないから不備があるかもだけど以下みたいな感じで出来ると思う
:ReplaceEqual
if "%~1"=="" (echo ERROR&exit /b)
set "str=%~1"
set output=
:CheckEqual
if not defined str exit /b
pause
if "%str:~0,1%"=="=" (
set "output=%output%置換後文字列"
set "str=%str:~1%"
goto :CheckEqual
)
set "output=%output%%str:~0,1%"
set "str=%str:~1%"
goto :CheckEqual
setの文字列置換では無理
=の個数が決まっているのならforでderims==
不特定なら一文字ずつ=かどうかを判定し=なら置換したい文字列を付け足し
テストしてないから不備があるかもだけど以下みたいな感じで出来ると思う
:ReplaceEqual
if "%~1"=="" (echo ERROR&exit /b)
set "str=%~1"
set output=
:CheckEqual
if not defined str exit /b
pause
if "%str:~0,1%"=="=" (
set "output=%output%置換後文字列"
set "str=%str:~1%"
goto :CheckEqual
)
set "output=%output%%str:~0,1%"
set "str=%str:~1%"
goto :CheckEqual
2017/03/13(月) 02:56:02.96ID:ieWeiZc+
済まん pause テストするつもりで入れてたのを消すの忘れてた
まあそのままテストしてみて
まあそのままテストしてみて
2017/03/13(月) 03:26:40.42ID:Kv5ZfyaF
:ReplaceEqual
set "str=%~1"
set output=
:CheckEqual
if "%str:~0,1%"=="=" (
set "output=%output%置換後文字列"
set "str=%str:~1%"
) else (
set "output=%output%%str:~0,1%"
set "str=%str:~1%"
)
if defined str goto :CheckEqual
exit /b
set "str=%~1"
set output=
:CheckEqual
if "%str:~0,1%"=="=" (
set "output=%output%置換後文字列"
set "str=%str:~1%"
) else (
set "output=%output%%str:~0,1%"
set "str=%str:~1%"
)
if defined str goto :CheckEqual
exit /b
2017/03/13(月) 07:40:38.20ID:KSFKLeET
2017/03/13(月) 22:53:05.48ID:UotY540z
>>8と同じだけど、もう少し使いやすいI/Fにしたもの
@echo off
rem 文字列中には、",%(1つのみ) を入れないこと
set "var==abc=def=!#$&'()=^~|-+*;:{}<>,./?\_%%"
call :replace var "=" "="
echo "%var%"
rem savety stopper
goto :eof
:replace
setlocal
set i=0
set s=
:replace_loop
call set "c=%%%1:~%i%,1%%"
if not defined c (endlocal&set "%1=%s%"&goto :eof)
if "%c%" equ "%~2" (set "s=%s%%~3") else (set "s=%s%%c%")
set /a i+=1
goto :replace_loop
@echo off
rem 文字列中には、",%(1つのみ) を入れないこと
set "var==abc=def=!#$&'()=^~|-+*;:{}<>,./?\_%%"
call :replace var "=" "="
echo "%var%"
rem savety stopper
goto :eof
:replace
setlocal
set i=0
set s=
:replace_loop
call set "c=%%%1:~%i%,1%%"
if not defined c (endlocal&set "%1=%s%"&goto :eof)
if "%c%" equ "%~2" (set "s=%s%%~3") else (set "s=%s%%c%")
set /a i+=1
goto :replace_loop
2017/03/15(水) 08:22:32.42ID:Ekd3hMdD
cmderいいな
この手のツールで表示が崩れたりせずまともに動くやつ見るの初めてだ
この手のツールで表示が崩れたりせずまともに動くやつ見るの初めてだ
2017/03/15(水) 19:39:27.45ID:sbz59NLr
for /r %%i in (*.jpg) のようなコマンドで取得した絶対パスをカレントフォルダとの相対パスに変換するにはどうするのが一番ですか?
現在はsetコマンドの置換機能でカレントフォルダの部分のパスを消しているんですがパスに変な文字列が入っていると誤作動を起こしそうで少し不安です。
もっとスマートなやり方はありますか?
現在はsetコマンドの置換機能でカレントフォルダの部分のパスを消しているんですがパスに変な文字列が入っていると誤作動を起こしそうで少し不安です。
もっとスマートなやり方はありますか?
2017/03/16(木) 01:00:29.70ID:DixFGYK0
>パスに変な文字列が入っていると
どのみち%が入っているとバッチだと詰む。やれなくないけど物凄く面倒
バッチでは完全な文字列操作は無理だと割り切った方がいい
PowerShell使えば?
ttps://www.google.co.jp/search?&q=powershell+%E7%9B%B8%E5%AF%BE%E3%83%91%E3%82%B9+%E5%A4%89%E6%8F%9B
どのみち%が入っているとバッチだと詰む。やれなくないけど物凄く面倒
バッチでは完全な文字列操作は無理だと割り切った方がいい
PowerShell使えば?
ttps://www.google.co.jp/search?&q=powershell+%E7%9B%B8%E5%AF%BE%E3%83%91%E3%82%B9+%E5%A4%89%E6%8F%9B
2017/03/16(木) 01:47:18.14ID:9KCSEqzj
>>13
分かりました、何か別の方法を考えます
分かりました、何か別の方法を考えます
2017/03/16(木) 02:25:05.07ID:iKA3O6Cf
>>14
実際の有効なパスが対象なんだから
問題となるのは上に出てきたequalを含んだフォルダがある場合だけだろう
setlocal
echo %cd%>tmpfile
for %%i in (tmpfile) do set /a size=%%~zi-2
del tmpfile
if %size% neq 3 set /a size+=1
for /r %%i in (*.txt) do (
set "p=%%~i"
call set "p=%%p:~%size%%%"
call echo ".\%%p%%"
)
endlocal
実際の有効なパスが対象なんだから
問題となるのは上に出てきたequalを含んだフォルダがある場合だけだろう
setlocal
echo %cd%>tmpfile
for %%i in (tmpfile) do set /a size=%%~zi-2
del tmpfile
if %size% neq 3 set /a size+=1
for /r %%i in (*.txt) do (
set "p=%%~i"
call set "p=%%p:~%size%%%"
call echo ".\%%p%%"
)
endlocal
2017/03/16(木) 02:32:32.21ID:iKA3O6Cf
肝心なのは、文字列操作、表示まで扱う場合は
文字列を必ず""で括るようにすること
& % ^ 等を含んでると括ってないとおかしくなる
文字列を必ず""で括るようにすること
& % ^ 等を含んでると括ってないとおかしくなる
2017/03/16(木) 04:08:08.29ID:gadu0oc0
chcp 437
2017/03/16(木) 11:46:49.75ID:iKA3O6Cf
>>17
ファイルサイズじゃ根本的にダメだったね
(それにecho %cd%も""で括ってなきゃいけなかったし)
call :length "%cd%" n
for /r %%i in (*.txt) do (
set "p=%%~i"
call set "p=%%p:~%n%%%"
call echo ".\%%p%%"
)
goto :eof
:length
setlocal
set s=%1
set n=0
:length_1
call set "c=%%s:~%n%,1%%"
if defined c set /a n+=1&goto :length_1
if %n% neq 5 set /a n+=1
endlocal&set /a %2=%n%-2
goto :eof
ファイルサイズじゃ根本的にダメだったね
(それにecho %cd%も""で括ってなきゃいけなかったし)
call :length "%cd%" n
for /r %%i in (*.txt) do (
set "p=%%~i"
call set "p=%%p:~%n%%%"
call echo ".\%%p%%"
)
goto :eof
:length
setlocal
set s=%1
set n=0
:length_1
call set "c=%%s:~%n%,1%%"
if defined c set /a n+=1&goto :length_1
if %n% neq 5 set /a n+=1
endlocal&set /a %2=%n%-2
goto :eof
2017/03/16(木) 12:49:57.48ID:iKA3O6Cf
訂正
call :length cd n
for /r %%i in (*.txt) do (
set "p=%%~i"
call set "p=%%p:~%n%%%"
call echo "%%p%%"
)
goto :eof
:length
setlocal
set n=0
:length_1
call set "c=%%%1:~%n%,1%%"
if defined c set /a n+=1&goto :length_1
if %n% neq 3 set /a n+=1
endlocal&set /a %2=%n%
goto :eof
call :length cd n
for /r %%i in (*.txt) do (
set "p=%%~i"
call set "p=%%p:~%n%%%"
call echo "%%p%%"
)
goto :eof
:length
setlocal
set n=0
:length_1
call set "c=%%%1:~%n%,1%%"
if defined c set /a n+=1&goto :length_1
if %n% neq 3 set /a n+=1
endlocal&set /a %2=%n%
goto :eof
2012
2017/03/16(木) 18:53:00.18ID:9KCSEqzj21デフォルトの名無しさん
2017/03/17(金) 21:12:58.50ID:V4hZYsin どなたかお詳しい方、ご教示ください
windows7を起動後、自動で特定のアカウントパスワード入力後にログインし、
ログイン後、デスクトップの特定座標を自動でクリックするという操作を行わせたいです
このような処理はbatファイルで可能でしょうか?
win7初期状態にインストールされているものであれば他のものを使用してもよいのですが。
キーワードだけでも結構ですので、お助けいただければ幸いです
windows7を起動後、自動で特定のアカウントパスワード入力後にログインし、
ログイン後、デスクトップの特定座標を自動でクリックするという操作を行わせたいです
このような処理はbatファイルで可能でしょうか?
win7初期状態にインストールされているものであれば他のものを使用してもよいのですが。
キーワードだけでも結構ですので、お助けいただければ幸いです
2017/03/17(金) 21:46:29.02ID:93Jxn9OB
胡散臭すぎるだろ・・・
2017/03/17(金) 22:18:36.30ID:Pk7DeofX
ログインとはWindows7の登録ユーザーってことか?
それともWebブラウザを起動してどっかのサイトにログインするってことか?
あと何故マウスクリックなのか?
デスクトップに表示してるアイコンなら別に直接起動できるだろうに
それともWebブラウザを起動してどっかのサイトにログインするってことか?
あと何故マウスクリックなのか?
デスクトップに表示してるアイコンなら別に直接起動できるだろうに
2017/03/18(土) 09:01:42.64ID:KPOks79l
>>21
無理です
無理です
2017/03/18(土) 15:14:23.81ID:cDGLzqpd
start https://www.google.co.jp/search?q=windows7+自動ログイン
2017/03/20(月) 17:14:02.44ID:QMGJB+5Y
だいぶ使い道ないけど、DIRって複数フォルダの内容を1回で表示できるんだね。
DIR C:\tmp C:\tmp2
DIR C:\tmp C:\tmp2
2017/03/24(金) 13:17:40.14ID:jo55dHfH
for文が同一フォルダに自分で出力したファイルを
一つだけ拾っちゃうんだけど、何か対策はありませんか?
for %%I in (*.jpg) do copy %%I %%~dpI_%%~nxI
って感じに処理すると
1.jpg 2.jpg → _1.jpg _2.jpg __1.jpg
となっちゃう…
一つだけ拾っちゃうんだけど、何か対策はありませんか?
for %%I in (*.jpg) do copy %%I %%~dpI_%%~nxI
って感じに処理すると
1.jpg 2.jpg → _1.jpg _2.jpg __1.jpg
となっちゃう…
2017/03/24(金) 13:52:45.87ID:OsTTofqK
for /f "delims=" %%a in ('dir /a-d /b *.jpg') do
2017/03/25(土) 20:50:35.80ID:8s6m96Ov
なるほどDIRか…
ありがとうございました。
ありがとうございました。
30デフォルトの名無しさん
2017/03/28(火) 18:35:13.10ID:oEoZ8De2 バッチファイルで
echo %*
とすると引数がすべて表示されるけど
%0=自分自身だけ無いのはなんで?
*で0だけハブられるなんて可哀想……
echo %*
とすると引数がすべて表示されるけど
%0=自分自身だけ無いのはなんで?
*で0だけハブられるなんて可哀想……
2017/03/28(火) 18:52:24.94ID:IKXgMhqU
少し考えれば分かりそうなものだが
%cmdcmdline%
%cmdcmdline%
2017/03/30(木) 01:42:37.50ID:gGp/SYAm
なんか真似しそう(笑)
2017/04/03(月) 06:06:20.82ID:awE7Wvau
バッチ書くのにオススメのエディタあったら教えて
最近目がめっきり弱くなって来たので色分け表示とかの視認性上がるものや
便利そうな機能があるものを知りたい
頻繁に使うわけじゃないからこそ探すの面倒で先人の知識をお借りしたい
最近目がめっきり弱くなって来たので色分け表示とかの視認性上がるものや
便利そうな機能があるものを知りたい
頻繁に使うわけじゃないからこそ探すの面倒で先人の知識をお借りしたい
2017/04/03(月) 07:06:14.38ID:pL1jzkCs
2017/04/03(月) 07:12:25.04ID:5ummjK72
サクラエディタ
2017/04/03(月) 07:33:25.19ID:uEU30p4H
マジレスすると目が悪いならでかいモニタ買ってフォントサイズでかくするのが一番良い
PowerShell、Ruby, PythonとかならVSCodeでブレークポイント張ったり変数のインスペクトしたりできるけど
その手の支援機能が全く期待できないBatじゃどれ使っても同じだろう
手に馴染んだエディタ使えばいいしないならフリーのどれか一つ覚えればいい
キーワードの色分け程度なら大抵用意されてるし
VisualBatはちょくちょく見かけるけどそれ専用の環境を覚えるくらなら普通のエディタ使ったほうがいい気がする
個人的にはBatから別の言語のコード書いて呼び出す事が多いし
自作マクロになるけど
↓みたいなコードを一つのファイルに書いて##!!に挟まれたカーソル位置のコードを切り出して実行する機能が
言語の学習やちょっとしたテストに便利で気に入っているのでエディタマクロ覚えて作ってみるのお勧め
##!! echo test
echo hello
##!! for test
for %i in (a,b,c) do echo %i
##!! calc test
set a=1
set /a a+=2
echo %a%
PowerShell、Ruby, PythonとかならVSCodeでブレークポイント張ったり変数のインスペクトしたりできるけど
その手の支援機能が全く期待できないBatじゃどれ使っても同じだろう
手に馴染んだエディタ使えばいいしないならフリーのどれか一つ覚えればいい
キーワードの色分け程度なら大抵用意されてるし
VisualBatはちょくちょく見かけるけどそれ専用の環境を覚えるくらなら普通のエディタ使ったほうがいい気がする
個人的にはBatから別の言語のコード書いて呼び出す事が多いし
自作マクロになるけど
↓みたいなコードを一つのファイルに書いて##!!に挟まれたカーソル位置のコードを切り出して実行する機能が
言語の学習やちょっとしたテストに便利で気に入っているのでエディタマクロ覚えて作ってみるのお勧め
##!! echo test
echo hello
##!! for test
for %i in (a,b,c) do echo %i
##!! calc test
set a=1
set /a a+=2
echo %a%
2017/04/03(月) 07:56:40.92ID:wDpIbVKg
中身のない長文要らんわ
2017/04/03(月) 22:35:33.81ID:TkzGFBjq
>>33
黒背景に白地の文字が視認性あがるよ
フォントはゴシックで文字サイズも大きくする
俺の使ってるのは一般的にはオススメではないのでどうかと思うが
(New)QXエディタ(一応シェアウェアだが未登録でも機能制限も期間制限も無い)
黒背景に白地の文字が視認性あがるよ
フォントはゴシックで文字サイズも大きくする
俺の使ってるのは一般的にはオススメではないのでどうかと思うが
(New)QXエディタ(一応シェアウェアだが未登録でも機能制限も期間制限も無い)
2017/04/03(月) 22:53:09.08ID:jFb9lqNm
真っ黒背景に真っ白文字は目がズキズキする
2017/04/03(月) 22:58:56.52ID:TkzGFBjq
2017/04/03(月) 23:14:57.75ID:rmwiW03F
color 0f
は目に痛い
は目に痛い
2017/04/03(月) 23:18:55.00ID:TkzGFBjq
目のいい人がコメントしたって意味ないだろ
老眼やかすみ目で文字が読みにくくなったらわかるよ
特に、カンマとピリオドの区別が付かないとストレス溜まるぜ
老眼やかすみ目で文字が読みにくくなったらわかるよ
特に、カンマとピリオドの区別が付かないとストレス溜まるぜ
2017/04/03(月) 23:37:00.86ID:mc8PKhXW
2017/04/04(火) 00:06:37.41ID:m/ZONOLH
背景は薄い黄緑色にしてる
目が疲れない
目が疲れない
2017/04/04(火) 00:16:41.83ID:Q0uaZ4Jg
そういえば昔のホスト端末とかって黒背景に緑字が多かったよね?
あれってなんでだろ?
あれってなんでだろ?
2017/04/04(火) 02:35:10.99ID:G7XsiAet
>>45
グリーンディスプレイがあったからじゃね?
グリーンディスプレイがあったからじゃね?
2017/04/04(火) 02:45:05.78ID:ti2ez7YV
緑やオレンジの蛍光体の方がTVの白蛍光体より刺激が少ないから採用されていたらしい
2017/04/04(火) 04:37:33.60ID:RiJvnB3V
4933
2017/04/04(火) 05:42:06.14ID:ldgn2Vfw 皆様たくさんのレスありがとうございます
VisualBat試してみました
デバッガとしては便利そうですがTab文字打てないのでエディタとしてはまだちょっと使えなさそうです
for や if の()で自動インデントとかしてくれるようになると便利かも
今後の更新に期待します
他、挙げて頂いたアドバイスも順次時間が取れ次第試して行きたいと思っております
次はサクラエディタを試用する予定。他候補にMery、QX
コマンドプロンプトは color 07 不透明度80 で使っております
かすみ目、乱視、老眼、ド近眼、何れも酷いです
他に思い付いたアドバイス等ございましたらよろしくお願いします
VisualBat試してみました
デバッガとしては便利そうですがTab文字打てないのでエディタとしてはまだちょっと使えなさそうです
for や if の()で自動インデントとかしてくれるようになると便利かも
今後の更新に期待します
他、挙げて頂いたアドバイスも順次時間が取れ次第試して行きたいと思っております
次はサクラエディタを試用する予定。他候補にMery、QX
コマンドプロンプトは color 07 不透明度80 で使っております
かすみ目、乱視、老眼、ド近眼、何れも酷いです
他に思い付いたアドバイス等ございましたらよろしくお願いします
2017/04/04(火) 06:03:57.35ID:o7weIbXl
>>43
フォントはVLゴシックのほうがいいと思う
フォントはVLゴシックのほうがいいと思う
2017/04/04(火) 12:05:28.05ID:h1EI1nbQ
gPadは色弄りやすい
2017/04/04(火) 12:56:18.88ID:CQgziqhI
>>50
あのフォントゼロに斜線が入ってるから使ってる
あのフォントゼロに斜線が入ってるから使ってる
2017/04/05(水) 00:03:13.02ID:jDUjKmAY
2017/04/08(土) 17:14:16.29ID:3YaJnUcz
ms製wgetなんてあったんだな
何故か異様に遅いが
bitsadmin /Transfer htmlget https://www.google.co.jp/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png c:\logo.png
何故か異様に遅いが
bitsadmin /Transfer htmlget https://www.google.co.jp/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png c:\logo.png
2017/04/08(土) 17:15:28.84ID:3YaJnUcz
フォントはMyricaがClearTypeと相性がいい
2017/04/08(土) 17:52:42.60ID:RJCKk6tM
VLゴシックは行間空き過ぎ
同じ行数が表示出来るようフォントサイズで調整した場合
VLゴシックのフォントサイズ10に対しIPAゴシック12、MSゴシック13
やたらと空行入れたがる脳みそスカスカの空行厨が好みそうなフォント
自分にはIPAゴシックよりVLが良い点が見当たらないので
>>50さん、どの辺が良いのか具体的に教えていただけると助かります
同じ行数が表示出来るようフォントサイズで調整した場合
VLゴシックのフォントサイズ10に対しIPAゴシック12、MSゴシック13
やたらと空行入れたがる脳みそスカスカの空行厨が好みそうなフォント
自分にはIPAゴシックよりVLが良い点が見当たらないので
>>50さん、どの辺が良いのか具体的に教えていただけると助かります
2017/04/08(土) 18:14:54.54ID:xnWSKOe7
2017/04/08(土) 18:57:28.10ID:LC0ZcHdg
>>54
動かなかったんで/helpしてみたら、WindowsXPのbitsadminには/Transfarが無かった(version 1.0 [ 5.1.2600.0 ])
調べてみたら、
Windows XP Service Pack 2 サポート ツール
https://www.microsoft.com/ja-jp/download/details.aspx?id=18546
をインストールすればいいことが判った
version 2.0 [ 6.6.2600.2180 ]
動かなかったんで/helpしてみたら、WindowsXPのbitsadminには/Transfarが無かった(version 1.0 [ 5.1.2600.0 ])
調べてみたら、
Windows XP Service Pack 2 サポート ツール
https://www.microsoft.com/ja-jp/download/details.aspx?id=18546
をインストールすればいいことが判った
version 2.0 [ 6.6.2600.2180 ]
2017/04/09(日) 11:47:08.97ID:z+t/KLMw
Myrica良いね
|が破線なのと\→\バックスラッシュに違和感あるけど慣れればこっちの方が見分け楽そう
|が破線なのと\→\バックスラッシュに違和感あるけど慣れればこっちの方が見分け楽そう
2017/04/11(火) 20:07:11.55ID:bvJ+shyZ
set test=%1
for /f "delims=" %%f in (%test%) do (
E:\test\test.bat %%f
)
上記のfor処理にテキストのファイルパスを一つずつ読み込ませて専用batで処理した後に
全部終わったらシャットダウン処理をしたいのですが
ループ処理に割り込ませる方法って何かありますか?
for /f "delims=" %%f in (%test%) do (
E:\test\test.bat %%f
)
上記のfor処理にテキストのファイルパスを一つずつ読み込ませて専用batで処理した後に
全部終わったらシャットダウン処理をしたいのですが
ループ処理に割り込ませる方法って何かありますか?
2017/04/11(火) 21:42:41.83ID:ZiByT+J4
質問の意味が不明瞭
全部終わった後でいいならforの後にshutdown書けばいいんでないの?
for中に割り込ませたいのは何故?
全部終わった後でいいならforの後にshutdown書けばいいんでないの?
for中に割り込ませたいのは何故?
2017/04/11(火) 22:02:51.00ID:bvJ+shyZ
set test=%1
for /f "delims=" %%f in (%test%) do (
E:\test\test.bat %%f
)
shutdown /S /T 30
単純にこれでうまくいかなかったので割り込ませる必要があるのかと思い質問しましたが
やっぱりそんなわけないですよね・・・
単純なミスをしてる可能性が高そうなのでもう一回見直してみます
for /f "delims=" %%f in (%test%) do (
E:\test\test.bat %%f
)
shutdown /S /T 30
単純にこれでうまくいかなかったので割り込ませる必要があるのかと思い質問しましたが
やっぱりそんなわけないですよね・・・
単純なミスをしてる可能性が高そうなのでもう一回見直してみます
2017/04/11(火) 22:31:07.73ID:U8R3p0c1
callしてないからtest.batから帰ってこないだけでは
2017/04/11(火) 22:39:54.03ID:bvJ+shyZ
あちゃーほんとだ
普通に動いてたから気づかなかった・・・
アホですね
ちょっと修正してテストしてみます
指摘ありがとう
普通に動いてたから気づかなかった・・・
アホですね
ちょっと修正してテストしてみます
指摘ありがとう
65デフォルトの名無しさん
2017/04/15(土) 01:17:56.44ID:yuPX0yl1 ソフトを起動した際に出るライセンスキーを入力する画面に値を自動でいれたいです。
batで可能でしょうか?
batで可能でしょうか?
2017/04/15(土) 08:13:42.82ID:eG98vJ7n
ahk
2017/04/15(土) 23:02:38.65ID:a3PF4w5O
batでgrep検索をしようと思ってるんだけど、
検索結果にファイルのフルパスを出力する方法を教えてください><
現状だとファイル名+行の内容しか出ない・・・
検索結果にファイルのフルパスを出力する方法を教えてください><
現状だとファイル名+行の内容しか出ない・・・
68デフォルトの名無しさん
2017/04/27(木) 06:44:05.61ID:Ek2Yalzm 複数のファイルがあり、ぞれぞれ中身が
fileID: aaaa within(
);
や
fileID: akf within(
);
などfileID: ~ within();は固定です。
各ファイルのaaaaやakfを読み込みの際に変数に取り込みたいのですがどのように書けばいいでしょうか?
fileID: aaaa within(はファイルの一行目なので set /p fl=< %inputFile% でとれました。
fileID: aaaa within(
);
や
fileID: akf within(
);
などfileID: ~ within();は固定です。
各ファイルのaaaaやakfを読み込みの際に変数に取り込みたいのですがどのように書けばいいでしょうか?
fileID: aaaa within(はファイルの一行目なので set /p fl=< %inputFile% でとれました。
2017/04/27(木) 07:31:26.21ID:LF40VtKG
テストしてないけどこんな感じ。必要ならusebackqとかも。aaaaに&とか入るならsetでクオートする必要がある
for /f "tokens=2* delims= " %%a in (%inputFile%) do (
set ID=%%b
goto :NEXT
)
:NEXT
または
set /p fl=< %inputFile%
for /f "tokens=2* delims= " %%a in (%fl%) do set ID=%%b
または
for /f "tokens=2* delims= " %%a in ('findstr /b /c:"fileID" "%inputFile%"') do set ID=%%b
for /f "tokens=2* delims= " %%a in (%inputFile%) do (
set ID=%%b
goto :NEXT
)
:NEXT
または
set /p fl=< %inputFile%
for /f "tokens=2* delims= " %%a in (%fl%) do set ID=%%b
または
for /f "tokens=2* delims= " %%a in ('findstr /b /c:"fileID" "%inputFile%"') do set ID=%%b
70デフォルトの名無しさん
2017/04/29(土) 21:00:05.56ID:GvSnly4L2017/04/29(土) 23:45:46.56ID:AyX6Tpbc
書いたコマンドとテストした対象ファイルの1行目をコピペで貼ってみ
2017/05/09(火) 16:43:52.50ID:PScyAxKX
助けて下さい!
毎月第二木曜日の16:00になったら
Aフォルダに入っているgファイルにBフォルダに入っているgファイルを上書きする
batファイルを作って下さい
よろしくお願いします
毎月第二木曜日の16:00になったら
Aフォルダに入っているgファイルにBフォルダに入っているgファイルを上書きする
batファイルを作って下さい
よろしくお願いします
2017/05/09(火) 17:29:08.98ID:bjRIYrg3
>>72
ファイル上書きのBAT(c:\xxx.bat)を作成してタスク登録する
schtasks /create /sc monthly /mo second /d thu /st 16:00:00 /tn title /tr "c:\xxx/bat" /ru username /rp userpassword
ファイル上書きのBAT(c:\xxx.bat)を作成してタスク登録する
schtasks /create /sc monthly /mo second /d thu /st 16:00:00 /tn title /tr "c:\xxx/bat" /ru username /rp userpassword
2017/05/09(火) 18:58:44.41ID:PScyAxKX
>>73
ありがとうございます!
ありがとうございます!
2017/05/12(金) 00:01:39.58ID:1meaH6LX
set txt="C:\scr\a.txt"
for /f "delims=, usebackq tokens=1,2,3,4,5,6,7,8" %%i in (%txt%) do (
set /a X="(%%j-%%i)+(%%l-%%k)+(%%n-%%m)+(%%p-%%o)"
)
echo %X%
forを使った計算について質問ですがa.txtから数値を抜き出し計算したいのですが最後の二つが空の場合があり
この場合は%%pと%%oですがその場合はエラーになって強制終了してしまいます
gotoを使う方法は思いついたのですが他に空だった場合にゼロを代入するなどは可能でしょうか?
for /f "delims=, usebackq tokens=1,2,3,4,5,6,7,8" %%i in (%txt%) do (
set /a X="(%%j-%%i)+(%%l-%%k)+(%%n-%%m)+(%%p-%%o)"
)
echo %X%
forを使った計算について質問ですがa.txtから数値を抜き出し計算したいのですが最後の二つが空の場合があり
この場合は%%pと%%oですがその場合はエラーになって強制終了してしまいます
gotoを使う方法は思いついたのですが他に空だった場合にゼロを代入するなどは可能でしょうか?
2017/05/12(金) 08:46:27.33ID:trqCrhEU
set txt="C:\scr\a.txt"
for /f "usebackq tokens=1,2,3,4,5,6,7,8 delims=, " %%i in (%txt%) do (
set /a X=%%j-%%i+%%l-%%k+%%n-%%m, po=%%p-%%o
)
set /a XX=X+po
echo %XX%
for /f "usebackq tokens=1,2,3,4,5,6,7,8 delims=, " %%i in (%txt%) do (
set /a X=%%j-%%i+%%l-%%k+%%n-%%m, po=%%p-%%o
)
set /a XX=X+po
echo %XX%
2017/05/12(金) 11:05:40.92ID:lLM9Jqdl
echo ^
とすると more? と出る
??
とすると more? と出る
??
2017/05/12(金) 12:02:37.54ID:+kEWkBL6
2017/05/19(金) 17:52:47.97ID:ya28xWZT
特定のフォルダ内のテキストファイルを処理するバッチを作りましたが
@echo off
for /f "usebackq delims=" %%i in (`dir /B /S "E:\text_sc\*.txt"`) do (
echo %%i
call E:\work\syori.bat "%%i"
)
syori.batで処理したテキストを忘れないようにリスト化(syorizumi_list.txt)
aaa
bbb
ccc
のように処理したテキストの名前だけ縦に追記
次回から新しいテキストファイルが同じフォルダに出来た場合にsyorizumi_list.txtの
処理済みのテキストを除外して処理したいのですが
コマンドのアドバイスを頂けないでしょうか
@echo off
for /f "usebackq delims=" %%i in (`dir /B /S "E:\text_sc\*.txt"`) do (
echo %%i
call E:\work\syori.bat "%%i"
)
syori.batで処理したテキストを忘れないようにリスト化(syorizumi_list.txt)
aaa
bbb
ccc
のように処理したテキストの名前だけ縦に追記
次回から新しいテキストファイルが同じフォルダに出来た場合にsyorizumi_list.txtの
処理済みのテキストを除外して処理したいのですが
コマンドのアドバイスを頂けないでしょうか
2017/05/19(金) 19:38:36.49ID:HiKVEJh7
>>79
もし、その入力ファイルをその後弄らないのならファイル属性を弄るのがいい
例えば、アーカイブ属性を削るとか読み取り専用属性にするとか
そうすれば、forの中のdirに/aで分別できる
それが無理な場合は、こんなかんじでファイルに登録されているかどうかチェックするとかかな
findstr /x "%%~ni" syorizumi_list.txt >nul
if errorlenel 1 (
echo %%i
call E:\work\syori.bat "%%i"
)
)
もし、その入力ファイルをその後弄らないのならファイル属性を弄るのがいい
例えば、アーカイブ属性を削るとか読み取り専用属性にするとか
そうすれば、forの中のdirに/aで分別できる
それが無理な場合は、こんなかんじでファイルに登録されているかどうかチェックするとかかな
findstr /x "%%~ni" syorizumi_list.txt >nul
if errorlenel 1 (
echo %%i
call E:\work\syori.bat "%%i"
)
)
2017/05/19(金) 21:01:19.56ID:ya28xWZT
>>80
レスありがとうございます
読み取り属性の方は最終手段としてとりあえず書かれたコマンドを追記してテストしていますが
エラーで強制終了してしまいます・・・
ヒントは頂けたのでちょっと考えてみます
レスありがとうございます
読み取り属性の方は最終手段としてとりあえず書かれたコマンドを追記してテストしていますが
エラーで強制終了してしまいます・・・
ヒントは頂けたのでちょっと考えてみます
2017/05/19(金) 21:32:14.27ID:8Dg0HTHO
処理済みファイルを下位ファルダに移動させるとかじゃダメなの?
それが1番楽だと思うけど
それが1番楽だと思うけど
2017/05/19(金) 22:02:54.16ID:ya28xWZT
ダメではないですし意地になってるだけです・・・
すいません
どうしようもなければそうしおうと思います
すいません
どうしようもなければそうしおうと思います
2017/05/19(金) 22:41:00.81ID:HiKVEJh7
2017/05/19(金) 22:45:30.06ID:HiKVEJh7
あと、移動させるなら下位フォルダはダメだよ
dir /sではそれも対象だから
dir /sではそれも対象だから
2017/05/19(金) 23:51:05.34ID:ya28xWZT
2017/05/20(土) 02:30:44.06ID:HrYyDnOr
2017/05/20(土) 08:10:06.10ID:N++czmo3
2017/05/20(土) 21:37:37.96ID:HrYyDnOr
2017/05/20(土) 22:35:16.21ID:N++czmo3
2017/05/22(月) 14:12:41.59ID:Q9T2A2Wt
こんなろくに理解せずそのまんまコピペして使ってるとトラップに引っかかるぞ
2017/05/22(月) 22:28:16.59ID:b+LuBt/G
下位フォルダに移動することも検討してるなんてレスから
/sが必要だとも思えんよね
/sが必要だとも思えんよね
2017/05/22(月) 22:30:42.85ID:b+LuBt/G
もし/sが意図通りだったら
aaa.txt
aaa\aaa.txt
なんて状況どうするんだって話だし
aaa.txt
aaa\aaa.txt
なんて状況どうするんだって話だし
2017/05/26(金) 07:30:18.71ID:/NUGeMQI
2017/05/26(金) 16:05:36.92ID:OOQCykcT
引数 %1 %2 ,, は%9 までだが
shiftで取り出せば%10以上でも取り出せた
shiftで取り出せば%10以上でも取り出せた
2017/06/15(木) 12:35:49.64ID:j04OpPTD
Cドラのdown配下のmp4とaviを
DドラTozakaruzoSaikonkaraに集約してコピーしたいときはどうするの?
XCOPY "C:\down\*.mp4” "D:\TozakaruzoSaikonkara\" /d /e /h /r /y
XCOPY "C:\down\*.avi" "D:TozakaruzoSaikonkara\" /d /e /h /r /y
ワイルドカード使いたいけど、eroやmoroのところが難しい
for文の記述の方がいいなど、よろしくお願いします。
C:/
├down/
│ └ ero/
│ └ 111.mp4
│ └ moro/
│ └ xx2.avi
│ └ zzz.mp4
│ └xxx.avi
D:/
├TozakaruzoSaikonkara/
│ └ 111.mp4
│ └ xx2.avi
│ └ zzz.mp4
│ └ xxx.avi
DドラTozakaruzoSaikonkaraに集約してコピーしたいときはどうするの?
XCOPY "C:\down\*.mp4” "D:\TozakaruzoSaikonkara\" /d /e /h /r /y
XCOPY "C:\down\*.avi" "D:TozakaruzoSaikonkara\" /d /e /h /r /y
ワイルドカード使いたいけど、eroやmoroのところが難しい
for文の記述の方がいいなど、よろしくお願いします。
C:/
├down/
│ └ ero/
│ └ 111.mp4
│ └ moro/
│ └ xx2.avi
│ └ zzz.mp4
│ └xxx.avi
D:/
├TozakaruzoSaikonkara/
│ └ 111.mp4
│ └ xx2.avi
│ └ zzz.mp4
│ └ xxx.avi
2017/06/15(木) 13:13:57.77ID:6QOS5lbl
robocopy /?
2017/06/15(木) 15:41:43.67ID:y+UEOWCj
2017/06/15(木) 15:46:23.72ID:y+UEOWCj
cd d:\TozakaruzoSaikonkara の方がいいか
100デフォルトの名無しさん
2017/06/15(木) 15:50:20.24ID:y+UEOWCj もしフォルダが無いなら
md d:\TozakaruzoSaikonkara 追加してくれ
md d:\TozakaruzoSaikonkara 追加してくれ
101デフォルトの名無しさん
2017/06/15(木) 16:07:02.35ID:y+UEOWCj *.mp4 だった
穴だらけだな
俺もボケてきたか
穴だらけだな
俺もボケてきたか
102デフォルトの名無しさん
2017/06/15(木) 17:02:52.10ID:+JrLzVDI103デフォルトの名無しさん
2017/06/15(木) 17:08:46.74ID:+JrLzVDI いや、フルパスかな
初めてだったので、楽しみます
ありがとう
初めてだったので、楽しみます
ありがとう
104デフォルトの名無しさん
2017/06/16(金) 01:17:16.66ID:fojoWyA2 >>103
俺がもっといいやり方がないか調査するからとりあえずmoroフォルダをうp!
俺がもっといいやり方がないか調査するからとりあえずmoroフォルダをうp!
105デフォルトの名無しさん
2017/06/17(土) 18:10:57.34ID:hP08xqzx >>98
ドライブとディレクトリの違いであるのか、コピーと移動の違いであるのか、
教えていただけたらうれしいです。
>>96
で、同じドライブの別フォルダに移動したいとき、下記教えていただいたコマンドを変えて実行すると、
別ドライブのときのようにコピーがされない状況です。
cd /d c:\down
cd c:\TozakaruzoSaikonkara
for /r %%i in (*.avi *mp4) do move /y "%%~fi" c:
---------
下記の用に移動したい
C:/
├down/
│ └ ero/
│ └ 111.mp4
│ └ moro/
│ └ xx2.avi
│ └ zzz.mp4
│ └xxx.avi
C:/
├TozakaruzoSaikonkara/
│ └ 111.mp4
│ └ xx2.avi
│ └ zzz.mp4
│ └ xxx.avi
ドライブとディレクトリの違いであるのか、コピーと移動の違いであるのか、
教えていただけたらうれしいです。
>>96
で、同じドライブの別フォルダに移動したいとき、下記教えていただいたコマンドを変えて実行すると、
別ドライブのときのようにコピーがされない状況です。
cd /d c:\down
cd c:\TozakaruzoSaikonkara
for /r %%i in (*.avi *mp4) do move /y "%%~fi" c:
---------
下記の用に移動したい
C:/
├down/
│ └ ero/
│ └ 111.mp4
│ └ moro/
│ └ xx2.avi
│ └ zzz.mp4
│ └xxx.avi
C:/
├TozakaruzoSaikonkara/
│ └ 111.mp4
│ └ xx2.avi
│ └ zzz.mp4
│ └ xxx.avi
106デフォルトの名無しさん
2017/06/17(土) 21:48:00.86ID:4uF4heHb for /r c:\down %%i in (*.avi *.mp4) do move /y "%%~i" c:\TozakaruzoSaikonkara
107デフォルトの名無しさん
2017/06/17(土) 22:08:13.20ID:hP08xqzx108デフォルトの名無しさん
2017/06/17(土) 22:53:57.13ID:4uF4heHb 参考に言っておくが () の中の引数なんだが、ワイルドカード以外は要注意だ
例えば (*.avi *.mp4 sukebe.jpg) とかにすると
各ディレクトリに sukebe.jpg が無くても強引にコマンド実行してエラーになったりする
例えば (*.avi *.mp4 sukebe.jpg) とかにすると
各ディレクトリに sukebe.jpg が無くても強引にコマンド実行してエラーになったりする
109デフォルトの名無しさん
2017/06/19(月) 21:06:26.56ID:HM1jnBNt moroとかsukebeとか名付けがオッサン臭いんだがw
110デフォルトの名無しさん
2017/06/26(月) 00:08:20.51ID:a4kJ2YgH DIRコマンドでは*を使って検索みたいなことが出来ますね。
【コマンド】
C:\>dir /s /b C:\Windows\System32\host*
【実行結果】
C:\Windows\System32\hostname.exe
C:\Windows\System32\dllcache\hostname.exe
C:\Windows\System32\drivers\etc\hosts
他にもっと複雑な検索も出来るのでしょうか?
【コマンド】
C:\>dir /s /b C:\Windows\System32\host*
【実行結果】
C:\Windows\System32\hostname.exe
C:\Windows\System32\dllcache\hostname.exe
C:\Windows\System32\drivers\etc\hosts
他にもっと複雑な検索も出来るのでしょうか?
111デフォルトの名無しさん
2017/06/26(月) 00:10:31.02ID:a4kJ2YgH あと「DIR /?」で出てくるヘルプにはこの機能について触れられていないのはなぜなのでしょう?こんなに便利なのに。
112デフォルトの名無しさん
2017/06/26(月) 00:24:40.04ID:1HPve1dM ワイルドカードはDIR固有じゃないけど
113デフォルトの名無しさん
2017/06/26(月) 00:27:25.02ID:q7GF7ZpN >>111
windowsXPで恐縮なんだが、Windowsヘルプ(ヘルプとサポートセンター)では、
Dirの項目の説明の中で、ワイルドカード関係のものとして以下のものが書いてあったよ
解説
・複数の filenames を使用する
複数の filenames を使用できます。スペース、カンマ、またはセミコロンでファイル名を区切ります。
FileName でワイルドカード文字 (? と *) を使うと、ファイルのグループを表示することができます。
・ワイルドカードを使用する
ワイルドカード (? と *) を使うと、ファイルとサブディレクトリのサブセットの一覧を表示できます。
例
ドライブ C のすべてのディレクトリで、拡張子が .txt のすべてのファイルの一覧を表示するには、次のように入力します。
dir c:\*.txt /w/o/s/p
各ディレクトリにある拡張子が .txt のファイル名が、アルファベット順にソートされた一覧がワイド形式で表示されます。
画面単位で一時停止し、キーが押されると次の画面が表示されます。
windowsXPで恐縮なんだが、Windowsヘルプ(ヘルプとサポートセンター)では、
Dirの項目の説明の中で、ワイルドカード関係のものとして以下のものが書いてあったよ
解説
・複数の filenames を使用する
複数の filenames を使用できます。スペース、カンマ、またはセミコロンでファイル名を区切ります。
FileName でワイルドカード文字 (? と *) を使うと、ファイルのグループを表示することができます。
・ワイルドカードを使用する
ワイルドカード (? と *) を使うと、ファイルとサブディレクトリのサブセットの一覧を表示できます。
例
ドライブ C のすべてのディレクトリで、拡張子が .txt のすべてのファイルの一覧を表示するには、次のように入力します。
dir c:\*.txt /w/o/s/p
各ディレクトリにある拡張子が .txt のファイル名が、アルファベット順にソートされた一覧がワイド形式で表示されます。
画面単位で一時停止し、キーが押されると次の画面が表示されます。
114デフォルトの名無しさん
2017/06/26(月) 01:37:25.73ID:q7GF7ZpN >>111
つまりコマンドの内蔵ヘルプは簡略版ってことなんだ
それと、なんかちょっと検索してみたら
Windows10には「ヘルプとサポート」がないらしい
なのでオンラインでのコマンドラインリファレンス
https://technet.microsoft.com/ja-jp/library/cc755121%28v=ws.10%29.aspx
XPの「ヘルプとサポート」には
「コマンドラインリファレンス」の他にも、
「新しいコマンドラインツール」
「コマンドシェルの概要」(ここにパイプやリダイレクトの説明が載っている)
ってのがあったんだけどなあ
つまりコマンドの内蔵ヘルプは簡略版ってことなんだ
それと、なんかちょっと検索してみたら
Windows10には「ヘルプとサポート」がないらしい
なのでオンラインでのコマンドラインリファレンス
https://technet.microsoft.com/ja-jp/library/cc755121%28v=ws.10%29.aspx
XPの「ヘルプとサポート」には
「コマンドラインリファレンス」の他にも、
「新しいコマンドラインツール」
「コマンドシェルの概要」(ここにパイプやリダイレクトの説明が載っている)
ってのがあったんだけどなあ
115デフォルトの名無しさん
2017/07/01(土) 02:44:43.86ID:mwCfh4Ih 質問があります。
ちょっと事情があってすべての引数をダブルクオーテーションで囲って実行しなければならなくなりました。
例えばこんな感じで
"C:\Software\ffmpeg\ffmpeg.exe" "-i" "%~1" "-vcodec" "utvideo" "-acodec" "pcm_s16le" "%~dpn1_test.avi"
ffmpegでは正常に動くことを確認したのですが他の一般的なソフトウェアもこのような起動方法で動作すると考えてもいいのでしょうか?
ちょっと事情があってすべての引数をダブルクオーテーションで囲って実行しなければならなくなりました。
例えばこんな感じで
"C:\Software\ffmpeg\ffmpeg.exe" "-i" "%~1" "-vcodec" "utvideo" "-acodec" "pcm_s16le" "%~dpn1_test.avi"
ffmpegでは正常に動くことを確認したのですが他の一般的なソフトウェアもこのような起動方法で動作すると考えてもいいのでしょうか?
116デフォルトの名無しさん
2017/07/01(土) 03:37:58.17ID:QCoLM9eW 引数の仕様はそれぞれだが問題無い
117デフォルトの名無しさん
2017/07/05(水) 22:31:01.85ID:9GxT9B4i とあるファイルの中身の文字列を置換したいのですが、何かいい方法はありますでしょうか?
とあるファイルはtxtファイルではないですが、テキストエディタで開くと文字列が書いてあります。
とあるファイルはtxtファイルではないですが、テキストエディタで開くと文字列が書いてあります。
118デフォルトの名無しさん
2017/07/05(水) 22:46:04.03ID:R8zuGv9z 全部テキストならともかくそれ以外のバイナリファイル内の置換はcmdじゃ無理だろ
WSHとかPower Shellとかで探せ
WSHとかPower Shellとかで探せ
119デフォルトの名無しさん
2017/07/06(木) 00:29:11.58ID:l/JVwvz3 テキストファイルだけど、拡張子がtxtではないファイルのことです
120デフォルトの名無しさん
2017/07/06(木) 01:41:06.31ID:vizsBHcK findstr である程度のことはできるけど、置換の条件とかが複雑になってくるとしんどい。
外部コマンドが使用可能なら、onigsedとか、SEDを使った方が多少は楽。
外部コマンドが使用可能なら、onigsedとか、SEDを使った方が多少は楽。
121デフォルトの名無しさん
2017/07/06(木) 02:34:32.14ID:VUvDmuBp122デフォルトの名無しさん
2017/07/07(金) 17:03:51.39ID:peDYPYbs >>119
ren Nullpo.unko Nullpo.txt
ren Nullpo.unko Nullpo.txt
123デフォルトの名無しさん
2017/07/09(日) 19:10:43.21ID:Gxva3cTk バッチファイルからシリアルポートを簡単に読み書き出来る手段って無いですかね?
古くはCOM?を使う方法が有名ですがBluetoothなどで作られた仮想シリアルポート?には使えないようです
古くはCOM?を使う方法が有名ですがBluetoothなどで作られた仮想シリアルポート?には使えないようです
124デフォルトの名無しさん
2017/07/13(木) 00:28:41.39ID:m+WJUz/m シリアルポートってなんだ?RS-232Cとかか?
125デフォルトの名無しさん
2017/07/13(木) 00:45:21.62ID:CfPNRtgi >>123
232C→USB変換ケーブルみたいなのあったような
232C→USB変換ケーブルみたいなのあったような
126デフォルトの名無しさん
2017/07/16(日) 11:23:45.75ID:FHjtOHLZ そもそもバッチファイルって何?
CでもBasicでもなく、メモ帳の拡張子をbatに変えるだけで良くて、
コマンドブロンプトとかいう、MS-DOSと何が違うのかわからないような画面で動いて、
何なの?
CでもBasicでもなく、メモ帳の拡張子をbatに変えるだけで良くて、
コマンドブロンプトとかいう、MS-DOSと何が違うのかわからないような画面で動いて、
何なの?
127デフォルトの名無しさん
2017/07/16(日) 15:58:56.60ID:30vHB81v CだってBASICだってメモ帳の拡張子を適当に変えれば行けますよ
128デフォルトの名無しさん
2017/07/18(火) 02:02:06.89ID:Bi+xDIbE 「拡張子とは何か」から始めとけ
129デフォルトの名無しさん
2017/07/18(火) 09:43:40.29ID:YNdL6SIO130デフォルトの名無しさん
2017/07/18(火) 12:15:15.33ID:+17jTjCv >>129
なんでメモ帳って書いてあるのにnotepad.exeをいじるわけ?
なんでメモ帳って書いてあるのにnotepad.exeをいじるわけ?
131デフォルトの名無しさん
2017/07/18(火) 12:23:23.94ID:lxnTGpj5 そらメモ帳の実体はnotepad.exeやし
132デフォルトの名無しさん
2017/07/18(火) 19:54:35.52ID:qQbuN+bc >>130
お前の言う「メモ帳」とはnotepad.exeでない何か他のものなのか?
お前の言う「メモ帳」とはnotepad.exeでない何か他のものなのか?
133デフォルトの名無しさん
2017/07/18(火) 20:32:10.68ID:wtRY8Rgw もう夏休みか
134デフォルトの名無しさん
2017/07/18(火) 23:42:51.89ID:Wjn/rMX6 揚げ足の取り方が寒い。
135デフォルトの名無しさん
2017/07/19(水) 00:03:00.46ID:oeGL8Gu+ >>126についていうなら、その辺のいい加減さが理解を妨げてると言える
136デフォルトの名無しさん
2017/07/19(水) 00:19:58.81ID:wIP5zHZ/137デフォルトの名無しさん
2017/07/19(水) 00:23:24.87ID:I6a60LYe しかし誰もきちんと説明できないという
138デフォルトの名無しさん
2017/07/19(水) 02:27:06.77ID:Gwnbk1WK どこから説明始めたらいいのかわからん程だし
139デフォルトの名無しさん
2017/07/19(水) 21:02:00.27ID:WMMf4PqS 説明はできないが揚げ足は取れる、ということですね。
140デフォルトの名無しさん
2017/07/19(水) 22:27:12.79ID:caLBuZR5 コピー系コマンドのコピー速度って
遅 copy < xcopy < robocopy 早
で良いですよね?
これはVista、7、10のどのOSでも同じでしょうか?
遅 copy < xcopy < robocopy 早
で良いですよね?
これはVista、7、10のどのOSでも同じでしょうか?
141デフォルトの名無しさん
2017/07/19(水) 23:32:30.26ID:I6a60LYe copyの方が早くね?4文字だし。
142140
2017/07/20(木) 03:04:39.26ID:R4lBeVK+143デフォルトの名無しさん
2017/07/22(土) 00:59:36.62ID:J1O+P69V +.bat や ,.bat もOKだった
144デフォルトの名無しさん
2017/07/22(土) 21:18:13.40ID:yBUCBb6t プラスバッドって、何か格好いいな。
カンマバットはダセェけど。
カンマバットはダセェけど。
145デフォルトの名無しさん
2017/07/23(日) 16:18:49.88ID:sxzHAQSA では、
£.bat
γ.bat
ラプラスバットと、ガンマバットでは、どうだろう?
£.bat
γ.bat
ラプラスバットと、ガンマバットでは、どうだろう?
146デフォルトの名無しさん
2017/07/29(土) 01:24:32.19ID:ocuZvBLs @.bat や =.bat
ファイルを作ることはできるが、実行しようとしてもコマンドプロンプトに無視されて実行できなかった
ファイルを作ることはできるが、実行しようとしてもコマンドプロンプトに無視されて実行できなかった
147デフォルトの名無しさん
2017/07/29(土) 02:07:03.67ID:0L2d7SO5 @.bat はフルパスで C:\work\@bat ってするか、キャレットでエスケープして ^@.bat で実行できる
=.bat はフルパスでもダメだけど、キャレットでエスケープすればいける
=.bat はフルパスでもダメだけど、キャレットでエスケープすればいける
148デフォルトの名無しさん
2017/08/01(火) 00:45:45.45ID:7i1X54Qd149デフォルトの名無しさん
2017/08/10(木) 19:56:28.38ID:gQNT5BPl (^_^)
150デフォルトの名無しさん
2017/08/10(木) 21:54:16.62ID:BFQhJ/Te "@ とか "= とか
151デフォルトの名無しさん
2017/08/14(月) 22:38:23.70ID:3xlVGOet すみません助けてください
遅延関数を宣言してるところから、下記の親ディレクトリの名前だけ引くサブルーチンに
ファイルフルパス投げて、戻そうとしているのですが
for文のところでDEST_DIRに値が入らなくて困っています
windows7環境で遅延関数について調べているのですが
なんで値が入らないのかわからず。 %%Pをechoすると中身が表示されるのですが
それをSETするときに何をやっても入りません。。。助けてください
:GET_PARENTDIR
setlocal enabledelayedexpansion
SET PathLF=%1
SET PathLF=%PathLF:~0,-1%
SET PathLF=!PathLF:\=^
!
for /F %%P in ("!PathLF!") do SET DEST_DIR = %%P
endlocal && set DEST_DIR = %DEST_DIR%
echo %DEST_DIR%
exit /b
遅延関数を宣言してるところから、下記の親ディレクトリの名前だけ引くサブルーチンに
ファイルフルパス投げて、戻そうとしているのですが
for文のところでDEST_DIRに値が入らなくて困っています
windows7環境で遅延関数について調べているのですが
なんで値が入らないのかわからず。 %%Pをechoすると中身が表示されるのですが
それをSETするときに何をやっても入りません。。。助けてください
:GET_PARENTDIR
setlocal enabledelayedexpansion
SET PathLF=%1
SET PathLF=%PathLF:~0,-1%
SET PathLF=!PathLF:\=^
!
for /F %%P in ("!PathLF!") do SET DEST_DIR = %%P
endlocal && set DEST_DIR = %DEST_DIR%
echo %DEST_DIR%
exit /b
152デフォルトの名無しさん
2017/08/14(月) 22:39:38.44ID:3xlVGOet ああああ遅延変数でした
もうやだああぁ
もうやだああぁ
153デフォルトの名無しさん
2017/08/14(月) 23:55:08.58ID:pZiLFUe+154デフォルトの名無しさん
2017/08/15(火) 02:10:26.85ID:F71LHla5 >>151
まずは
SET DEST_DIR = %%P
endlocal && set DEST_DIR = %DEST_DIR%
の空白がいけないのでは?
SET DEST_DIR=%%P
endlocal && set DEST_DIR=%DEST_DIR%
まずは
SET DEST_DIR = %%P
endlocal && set DEST_DIR = %DEST_DIR%
の空白がいけないのでは?
SET DEST_DIR=%%P
endlocal && set DEST_DIR=%DEST_DIR%
155デフォルトの名無しさん
2017/08/15(火) 08:22:11.69ID:ltV5IdSe >>154
後輩にその空白を入れられたことがある
「可読性を良くしようと思って…」って言ってたな
普通の高級言語やってる奴は=の前後に空白入れただけで不具合起こるなんて考えもしないわな
コマンドプロンプトはホント昔の仕様を引きずり過ぎだわ
後輩にその空白を入れられたことがある
「可読性を良くしようと思って…」って言ってたな
普通の高級言語やってる奴は=の前後に空白入れただけで不具合起こるなんて考えもしないわな
コマンドプロンプトはホント昔の仕様を引きずり過ぎだわ
156デフォルトの名無しさん
2017/08/15(火) 08:51:21.42ID:J2u+qflL setlocal enabledelayedexpansion使うとファイル名に!が入ってるとめんどくさいから極力使わないようにしてるんだけど俺だけ?みんなはどうしてる?
157デフォルトの名無しさん
2017/08/15(火) 08:55:13.27ID:GzAS59pw158デフォルトの名無しさん
2017/08/15(火) 10:13:39.94ID:x5EZUuTK 名前ソートで上に持ってきたいフォルダには名前の頭に!をつけてる
159デフォルトの名無しさん
2017/08/17(木) 23:34:26.73ID:jGLnJoZN スペースが入ったファイル名からスペースを取り除くには一行では無理ですか?
160デフォルトの名無しさん
2017/08/18(金) 00:59:25.98ID:Oq4EZT3J こんな感じ?
set "File=%~1" & ren "%File%" "remove=%File: =%"
set "File=%~1" & ren "%File%" "remove=%File: =%"
161デフォルトの名無しさん
2017/08/18(金) 01:00:23.41ID:Oq4EZT3J 間違えた
set "File=%~1" & ren "%File%" "%File: =%"
set "File=%~1" & ren "%File%" "%File: =%"
162デフォルトの名無しさん
2017/08/20(日) 03:39:45.42ID:w/lVOYHU バッチでよく使う pslist.exe はプロセス名が日本語だと間違える
pslist v1.4 sysonternals
pslist v1.4 sysonternals
163デフォルトの名無しさん
2017/08/20(日) 16:32:29.32ID:7nn0chG1 フォルダD:\XXXX直下の、
AAAA、BBBB、CCCCの3つの隠しファイル(拡張子なし)を、
定期的にE:\backupフォルダにバックアップするためのバッチファイルを作りたい
フォルダXXXX以下には、YYYY、ZZZZというフォルダがあり、
この下にもAAAA、BBBB、CCCCと同名のファイルが存在するが、
それはバックアップしなくていい
copyコマンドでは隠しファイルはコピーできない
xcopyコマンドではサブディレクトリ以下の同名ファイルもコピーされてしまう
バッチファイルで処理するためにはどうすればいいのでしょうか?
できればアトリビュートはいじりたくないです
よろしくお願いいたします
AAAA、BBBB、CCCCの3つの隠しファイル(拡張子なし)を、
定期的にE:\backupフォルダにバックアップするためのバッチファイルを作りたい
フォルダXXXX以下には、YYYY、ZZZZというフォルダがあり、
この下にもAAAA、BBBB、CCCCと同名のファイルが存在するが、
それはバックアップしなくていい
copyコマンドでは隠しファイルはコピーできない
xcopyコマンドではサブディレクトリ以下の同名ファイルもコピーされてしまう
バッチファイルで処理するためにはどうすればいいのでしょうか?
できればアトリビュートはいじりたくないです
よろしくお願いいたします
164デフォルトの名無しさん
2017/08/20(日) 16:35:22.92ID:T95gEh5X >>161
誰もツッコミ無しなの?
誰もツッコミ無しなの?
165デフォルトの名無しさん
2017/08/20(日) 16:53:03.09ID:vBwVL8I3 >>163
xcopyでAAAAなどのファイルを一つずつ指定してコピーするというのは?
xcopyでAAAAなどのファイルを一つずつ指定してコピーするというのは?
166デフォルトの名無しさん
2017/08/20(日) 17:25:05.34ID:7nn0chG1 >>165
実験してみたんですが、
xcopy D:\XXXX\AAAA E:\backup\
とすると、backupフォルダには、
AAAA
\YYYY\AAAA
\ZZZZ\AAAA
の3ファイルがコピーされちゃうんですよ
\YYYYと\ZZZZのはいらないのでどうしたもんかなと質問させていただきました
実験してみたんですが、
xcopy D:\XXXX\AAAA E:\backup\
とすると、backupフォルダには、
AAAA
\YYYY\AAAA
\ZZZZ\AAAA
の3ファイルがコピーされちゃうんですよ
\YYYYと\ZZZZのはいらないのでどうしたもんかなと質問させていただきました
167デフォルトの名無しさん
2017/08/20(日) 17:36:31.70ID:vBwVL8I3168デフォルトの名無しさん
2017/08/20(日) 17:43:47.57ID:7nn0chG1169デフォルトの名無しさん
2017/08/20(日) 19:15:30.58ID:T95gEh5X170デフォルトの名無しさん
2017/08/22(火) 19:19:28.49ID:rIu52qT/ 以前こちらで聞いて試行錯誤しているのですが、何分初心者で四苦八苦しております。
そこでご教授願いたいのですが、
@rem 引数有無と引数名チェック
if "%USR_INPUT_STR1%"=="" goto ERROR
echo;%USR_INPUT_STR1%|findstr /R /C:"^http" /C:"openrec" >NUL||(echo "%1" を処理できません) && goto ERROR
@rem URLのアドレスとHTMLを環境変数へ設定
set ADDR=%USR_INPUT_STR1%
for %%I in (%USR_INPUT_STR1%) do set HTML=%%~nxI
@rem HTMLダウンロード
curl -L --max-redirs 10 -R -O %ADDR%
if not %ERRORLEVEL%==0 goto ERROR
@rem HTMLから文字列抽出
for /F "tokens=2 delims=<>| " %%I in ('type %HTML%^|findstr /R /C:"<title>"') do set TITLE=%%~I
for /F "tokens=3 delims=, " %%I in ('type %HTML%^|find /I "m3u8"') do set TARGET=%%~I
ffmpeg -c copy "%TITLE%" -i "%TARGET%"
pause
exit
:ERROR
echo 引数が無効のため処理できませんでした
pause
exit
このままだと、ファイル名がUTF-8で文字化けしてしまいます。
これを、面倒なのでファイル名で出力したいと思ったのですが、正規表現が弱く全く前に進みません。
丸投げで申し訳ございませんが、どうか手直ししていただけませんでしょうか。
よろしくお願い致します。
そこでご教授願いたいのですが、
@rem 引数有無と引数名チェック
if "%USR_INPUT_STR1%"=="" goto ERROR
echo;%USR_INPUT_STR1%|findstr /R /C:"^http" /C:"openrec" >NUL||(echo "%1" を処理できません) && goto ERROR
@rem URLのアドレスとHTMLを環境変数へ設定
set ADDR=%USR_INPUT_STR1%
for %%I in (%USR_INPUT_STR1%) do set HTML=%%~nxI
@rem HTMLダウンロード
curl -L --max-redirs 10 -R -O %ADDR%
if not %ERRORLEVEL%==0 goto ERROR
@rem HTMLから文字列抽出
for /F "tokens=2 delims=<>| " %%I in ('type %HTML%^|findstr /R /C:"<title>"') do set TITLE=%%~I
for /F "tokens=3 delims=, " %%I in ('type %HTML%^|find /I "m3u8"') do set TARGET=%%~I
ffmpeg -c copy "%TITLE%" -i "%TARGET%"
pause
exit
:ERROR
echo 引数が無効のため処理できませんでした
pause
exit
このままだと、ファイル名がUTF-8で文字化けしてしまいます。
これを、面倒なのでファイル名で出力したいと思ったのですが、正規表現が弱く全く前に進みません。
丸投げで申し訳ございませんが、どうか手直ししていただけませんでしょうか。
よろしくお願い致します。
171デフォルトの名無しさん
2017/08/22(火) 20:10:25.50ID:uGuLhv+Q powershellに切り替えたら?
172デフォルトの名無しさん
2017/08/22(火) 20:50:12.77ID:1dHyDD35 >>170
よく分からないけどbat自体をUTF-8で書いてchcp 65001というのは?
よく分からないけどbat自体をUTF-8で書いてchcp 65001というのは?
173デフォルトの名無しさん
2017/08/22(火) 20:52:58.84ID:rIu52qT/ >>172
それも考えたのですが、不特定多数のPCで使う機会があるので手間が増えてしまうなと思い諦めました。
そこで、URLからIDとなる文字列を抽出してそれをファイル名に使おうと考えました。
参考URL:https://www.openrec.tv/live/7cuVKOAY3lv
この末尾の7cuVKOAY3lvの部分だけを、TITLEに代入したいと思ったのですが、思うようにいかなくて・・・。
それも考えたのですが、不特定多数のPCで使う機会があるので手間が増えてしまうなと思い諦めました。
そこで、URLからIDとなる文字列を抽出してそれをファイル名に使おうと考えました。
参考URL:https://www.openrec.tv/live/7cuVKOAY3lv
この末尾の7cuVKOAY3lvの部分だけを、TITLEに代入したいと思ったのですが、思うようにいかなくて・・・。
174デフォルトの名無しさん
2017/08/22(火) 21:10:23.56ID:rIu52qT/ 結局、実行batのディレクトリ内にnkf32を導入し、
nkf -s --overwrite %HTML%
と書き加えて対処致しました
nkf -s --overwrite %HTML%
と書き加えて対処致しました
175デフォルトの名無しさん
2017/08/29(火) 14:35:48.67ID:91TLAHUR フォルダの中に、あああ_1.flv あああ_2.flv … あああ_100.flvのようなファイルがあるときに、あああ_1.flvをあああ_001.flvのようにリネームしたりできないんでしょうか
176デフォルトの名無しさん
2017/08/29(火) 15:34:02.29ID:ZSKrJS0x >>175
Flexible Renamer
Flexible Renamer
177デフォルトの名無しさん
2017/08/29(火) 16:50:10.59ID:iDduY4Qi お〜瑠璃ね〜むで十分やぞ
D&D用のショトカも作れるしな
D&D用のショトカも作れるしな
178デフォルトの名無しさん
2017/08/29(火) 17:11:24.47ID:1aRkt9bd179デフォルトの名無しさん
2017/08/29(火) 20:06:42.61ID:KnTCuJQc set "a=あああ_"
set "b=.flv"
setlocal enabledelayedexpansion
for /L %%i in (1,1,99) do set /a c=%%i+1000 & ren "!a!%%i!b!" "!a!!c:~1!!b!"
set "b=.flv"
setlocal enabledelayedexpansion
for /L %%i in (1,1,99) do set /a c=%%i+1000 & ren "!a!%%i!b!" "!a!!c:~1!!b!"
180デフォルトの名無しさん
2017/08/31(木) 16:38:58.30ID:omILiWW+ >>175
pushd "%~dp1"
:LOOP
for /f "tokens=1,2 delims=_" %%a in ("%~n1") do (
set FNAME=%%a
set /a FN=%%b+1000
)
ren "%~1" "%FNAME%_%FN:~-3%%~x1"
shift
if not "%~1"=="" goto :LOOP
pushd "%~dp1"
:LOOP
for /f "tokens=1,2 delims=_" %%a in ("%~n1") do (
set FNAME=%%a
set /a FN=%%b+1000
)
ren "%~1" "%FNAME%_%FN:~-3%%~x1"
shift
if not "%~1"=="" goto :LOOP
181デフォルトの名無しさん
2017/08/31(木) 17:02:31.64ID:KsdTyPQv182デフォルトの名無しさん
2017/08/31(木) 17:53:19.91ID:Vr+Gp9oD どのスレでも一緒だが質問の要件が分かりにくいのはめんどうだな
183デフォルトの名無しさん
2017/08/31(木) 18:00:47.56ID:kMuf1wHV なんでか知らないけど他人に勝手にマルチポストされたけど>>175の質問は元のスレで解決したのでもういいです
184デフォルトの名無しさん
2017/09/03(日) 22:03:48.56ID:BJjXydYg cd \
pushd D:\abc
setlocal
popd
としても元の \ に戻らなかった
pushd D:\abc
setlocal
popd
としても元の \ に戻らなかった
185デフォルトの名無しさん
2017/09/04(月) 00:02:37.80ID:pBY/MKIa >>184
そうならなきゃ逆にダメでしょ
setlocalでは(親の環境を引き継いだ)別の環境の上で実行されている
カレントを移動しようが環境変数を操作しようが元の環境には影響しない
pushd D:\abc
setlocal
endlocal
popd
または
setlocal
pushd D:\abc
endlocal
そうならなきゃ逆にダメでしょ
setlocalでは(親の環境を引き継いだ)別の環境の上で実行されている
カレントを移動しようが環境変数を操作しようが元の環境には影響しない
pushd D:\abc
setlocal
endlocal
popd
または
setlocal
pushd D:\abc
endlocal
186デフォルトの名無しさん
2017/09/04(月) 01:15:44.81ID:24unggVp187デフォルトの名無しさん
2017/09/16(土) 05:02:43.18ID:cRJ1WDqm 今さらバッチファイル入門て…
余計な被害者増やさずPowerShellにしろよ
これだからIT後進国は
超入門コマンドプロンプト:バッチコマンドで定型処理を行う (1/3) - @IT
http://www.atmarkit.co.jp/ait/articles/1709/15/news034.html
017年09月15日 05時00分 公開
余計な被害者増やさずPowerShellにしろよ
これだからIT後進国は
超入門コマンドプロンプト:バッチコマンドで定型処理を行う (1/3) - @IT
http://www.atmarkit.co.jp/ait/articles/1709/15/news034.html
017年09月15日 05時00分 公開
188デフォルトの名無しさん
2017/09/16(土) 05:59:12.53ID:TbhIjs8j189デフォルトの名無しさん
2017/09/16(土) 06:09:12.67ID:NzFbxZfY PowerShellに移行しようと思ったこともあるけどファイルをD&D出来ないから断念した
あと他人の環境で動くのか分からないから渡しにくいし
あと他人の環境で動くのか分からないから渡しにくいし
190デフォルトの名無しさん
2017/09/16(土) 06:11:20.82ID:NzFbxZfY まあbatに面倒臭いとこがあるのも理解できるけど
せめて正規表現と小数の計算くらいはあればよかったんだが
せめて正規表現と小数の計算くらいはあればよかったんだが
191デフォルトの名無しさん
2017/09/16(土) 11:00:27.02ID:Nvo3nRRv 自分で使うにはPoweShellはめちゃめちゃ便利だけど
一般的に定着してるかというとそうじゃないし
一般的に定着してるかというとそうじゃないし
192デフォルトの名無しさん
2017/09/17(日) 11:17:50.05ID:jtG62g+O PowerShell は起動が遅いから小さいバッチをループで呼び出すのには向いてないんじゃないかな。
いったんロードしたオブジェクトを関数形式で呼び出せばいいんだろうけどよくわからなくてめんどくさいし。
いったんロードしたオブジェクトを関数形式で呼び出せばいいんだろうけどよくわからなくてめんどくさいし。
193デフォルトの名無しさん
2017/09/17(日) 11:23:06.30ID:jtG62g+O 最近、フリーソフトとかの小さいやつの管理がめんどくさくなって
メニュー代わりにバッチファイルを使うことにしたんですよ。
全部をVHDに入れてマウントなんで、持ち運びは仮想ディスクファイル1個をコピーするだけ。
起動が素早いのがメリット。
アイコンが出ないのがデメリット。
アイコン出そうと思ったら全環境で共通のドライブ名に固定してショートカットを使ったらいいと思うけど。
プログラムの入ったフォルダ
Program Files 3
バッチファイルの入ったフォルダ
Program Link
[FirefoxPortable.bat]
set pathname1=%~d0\Program Files 3\FireFoxPortable52.0.2\FirefoxPortable\FirefoxPortable.exe
start "" "%pathname1%"
メニュー代わりにバッチファイルを使うことにしたんですよ。
全部をVHDに入れてマウントなんで、持ち運びは仮想ディスクファイル1個をコピーするだけ。
起動が素早いのがメリット。
アイコンが出ないのがデメリット。
アイコン出そうと思ったら全環境で共通のドライブ名に固定してショートカットを使ったらいいと思うけど。
プログラムの入ったフォルダ
Program Files 3
バッチファイルの入ったフォルダ
Program Link
[FirefoxPortable.bat]
set pathname1=%~d0\Program Files 3\FireFoxPortable52.0.2\FirefoxPortable\FirefoxPortable.exe
start "" "%pathname1%"
194デフォルトの名無しさん
2017/09/17(日) 12:31:00.83ID:z++LvPT9 それだけならバッチ作るまでもなくハードリンクにすればアイコン問題も解決では
195デフォルトの名無しさん
2017/09/17(日) 12:37:46.24ID:z++LvPT9 あ、すまんそれだと実行ファイルと同じフォルダのDLL読めないからダメか
196デフォルトの名無しさん
2017/09/18(月) 00:06:56.51ID:AVBMNnfo 短いファイル名に関していくつか質問
1 短いファイル名はダブルクオーテーションで囲まなくても実行可能?
2 短いファイル名は取得して一ヶ月経っても変動せずにそのパスを実行出来る?
1 短いファイル名はダブルクオーテーションで囲まなくても実行可能?
2 短いファイル名は取得して一ヶ月経っても変動せずにそのパスを実行出来る?
197デフォルトの名無しさん
2017/09/18(月) 23:50:36.04ID:2dThcY7y198デフォルトの名無しさん
2017/09/19(火) 00:09:36.87ID:I5t298fo 少なくともNTFSではファイルの情報としてショートファイルネームも格納されるから
ファイルが存在したままある日突然名前が変わることはないはず
そのファイルを削除して似たようなロングファイルネームの別のファイルを作った時
同名だけど別のファイルが出来てしまう事はありえる
ファイルが存在したままある日突然名前が変わることはないはず
そのファイルを削除して似たようなロングファイルネームの別のファイルを作った時
同名だけど別のファイルが出来てしまう事はありえる
199196
2017/09/19(火) 01:33:17.50ID:FIGNw+kF レスありがとうございます。
ちなみに自分がやりたかったのは↓と同じケースで自作のbatをタスクスケジューラに登録したいというものでした。
schtasksで半角スペースを含むパスを実行させたい (DOSプロンプト活用相談室LOG)
http://fpcu.on.coocan.jp/dosvcmd/bbs/log/taskkillstart/at/4-0842.html
"を\"と書いてエスケープさせるやり方もあるようですがそちらではbatにダブルクォーテーションで囲った引数を渡すと不可解な動作をすることがあり上手くいきせんでした。
batのパスにスペースを含んだ場合 起動しない
batのパスにスペースを含まない場合 %~dp0を実行したときにbatのフォルダパスの頭にカレントディレクトリの文字列も追加される
ちなみに自分がやりたかったのは↓と同じケースで自作のbatをタスクスケジューラに登録したいというものでした。
schtasksで半角スペースを含むパスを実行させたい (DOSプロンプト活用相談室LOG)
http://fpcu.on.coocan.jp/dosvcmd/bbs/log/taskkillstart/at/4-0842.html
"を\"と書いてエスケープさせるやり方もあるようですがそちらではbatにダブルクォーテーションで囲った引数を渡すと不可解な動作をすることがあり上手くいきせんでした。
batのパスにスペースを含んだ場合 起動しない
batのパスにスペースを含まない場合 %~dp0を実行したときにbatのフォルダパスの頭にカレントディレクトリの文字列も追加される
200デフォルトの名無しさん
2017/09/19(火) 02:17:59.79ID:Lhe/hdFe mklinkやsubstを使って違う名前でアクセスするのはどうなのでしょう
うまくいくかどうかわかりませんが
ファイル名フォルダ名に空白や%^!みたいな記号があると困ることが多いですね
うまくいくかどうかわかりませんが
ファイル名フォルダ名に空白や%^!みたいな記号があると困ることが多いですね
201デフォルトの名無しさん
2017/09/20(水) 03:12:37.88ID:aIPv0JYK >>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
この書き方に準じていないだけでは?
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
202196
2017/09/20(水) 06:44:59.65ID:w13Y3qRA >>201
自分の説明が下手で伝わらなかったんだと思いますが、成功例の方の記述でパスにスペースを含むbatは起動できるのですがそのbatにダブルクオーテーションを含む引数を渡すと動作がおかしくなるのです。
引数にダブルクオーテーションを含まない場合は正常に起動できます。
自分の説明が下手で伝わらなかったんだと思いますが、成功例の方の記述でパスにスペースを含むbatは起動できるのですがそのbatにダブルクオーテーションを含む引数を渡すと動作がおかしくなるのです。
引数にダブルクオーテーションを含まない場合は正常に起動できます。
203196
2017/09/20(水) 07:01:29.72ID:w13Y3qRA 一応追記しておくと、おかしくなるのはタスクスケジューラから起動した場合限定で通常の起動では問題ありません。
呼び出すbat内の記述にミスがあるとかそういうのではないと思います。
呼び出すbat内の記述にミスがあるとかそういうのではないと思います。
204デフォルトの名無しさん
2017/09/21(木) 11:18:59.39ID:WXZB4PjF %CMDCMDLINE%はどうなってる?
205デフォルトの名無しさん
2017/09/21(木) 18:15:09.28ID:X0F1M9Qy argumentにダブルクォーテションがある場合もパスと同様に\"してる?
206デフォルトの名無しさん
2017/09/21(木) 18:35:03.44ID:uKBRYTKY test
207196
2017/09/21(木) 18:38:58.99ID:uKBRYTKY NGワードが含まれていたようなので他所に書きました
https://pastebin.com/9yMQfC37
https://pastebin.com/9yMQfC37
208デフォルトの名無しさん
2017/09/24(日) 20:04:30.28ID:0vysq0yQ 基本的に引数の中の半角スペースはデリミタであり
そこより左に " が奇数個あればデリミタじゃなくなる
それに関しては \" とか ^" とかあっても関係ないんじゃね
そこより左に " が奇数個あればデリミタじゃなくなる
それに関しては \" とか ^" とかあっても関係ないんじゃね
209デフォルトの名無しさん
2017/09/25(月) 14:27:46.65ID:aNTDK6ge >>207
もう見てないかも知れないけど
schtasks /create /tn "test\test" /sc once /st 23:00 /tr "cmd /s /c \"\"C:\schtasks test\schtaskstest.bat\" hoge1 hoge2 \"ho ge3\" \"h oge4\"\""
これだと実行ファイルのパスにスペースがあっても問題ない
もう見てないかも知れないけど
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\"\""
これだと実行ファイルのパスにスペースがあっても問題ない
210196
2017/09/26(火) 15:58:12.82ID:dvSxVtoZ211デフォルトの名無しさん
2017/10/10(火) 23:43:05.86ID:Z33TeZgR 文字コードがUTF8のテキストファイルが2つあるのですが
FCコマンドで差分を出力したところ文字化けしてしまいました。
何か良い方法はないでしょうか?
FCコマンドで差分を出力したところ文字化けしてしまいました。
何か良い方法はないでしょうか?
212デフォルトの名無しさん
2017/10/11(水) 07:47:52.42ID:S/IKnpLv メモ帳でSJISで保存する
213デフォルトの名無しさん
2017/10/12(木) 16:57:41.08ID:c/LUECgg なんでSJISなんだよ、unicodeにすればいいじゃん(Windows2000,XPは除く)
@echo off
set f1=%1
set f2=%2
if not defined f2 echo 引数1.2に比較するファイルパスを指定してください& goto :eof
if not exist %f1% echo ファイル %1 がありません& goto :eof
if not exist %f2% echo ファイル %2 がありません& goto :eof
start "" /min /wait cmd /u /c "chcp 65001 & type %1>u_%1 & type %2>u_%2"
chcp 932>nul
fc /u /n u_%1 u_%2
del u_%1 u_%2
@echo off
set f1=%1
set f2=%2
if not defined f2 echo 引数1.2に比較するファイルパスを指定してください& goto :eof
if not exist %f1% echo ファイル %1 がありません& goto :eof
if not exist %f2% echo ファイル %2 がありません& goto :eof
start "" /min /wait cmd /u /c "chcp 65001 & type %1>u_%1 & type %2>u_%2"
chcp 932>nul
fc /u /n u_%1 u_%2
del u_%1 u_%2
214デフォルトの名無しさん
2017/10/12(木) 18:25:29.18ID:c/LUECgg start付けるとうまくいかないな
訂正
start "" /min /wait cmd /c "chcp 65001&cmd /u /c type %1>u_%1&cmd /u /c type %2>u_%2"
fc /u /n u_%1 u_%2
訂正
start "" /min /wait cmd /c "chcp 65001&cmd /u /c type %1>u_%1&cmd /u /c type %2>u_%2"
fc /u /n u_%1 u_%2
215デフォルトの名無しさん
2017/10/16(月) 01:07:49.23ID:rrtzmh2c バッチファイル作っておいて以下のようなフォルダの名前の変更を毎回ダブルクリック一発で済ませたいのですが
いろいろやってみたのですが、というほどの力もなく
お知恵お貸し下さい
処理前のフォルダ名一覧
1008安住紳一郎の日曜天国
10月15日安住紳一郎の日曜天国
10月15日爆笑問題の日曜サンデー (1)
10月15日爆笑問題の日曜サンデー (2)
処理後のフォルダ名
1008安住紳一郎の日曜天国
1015安住紳一郎の日曜天国
1015爆笑問題の日曜サンデー (1)
1015爆笑問題の日曜サンデー (2)
いろいろやってみたのですが、というほどの力もなく
お知恵お貸し下さい
処理前のフォルダ名一覧
1008安住紳一郎の日曜天国
10月15日安住紳一郎の日曜天国
10月15日爆笑問題の日曜サンデー (1)
10月15日爆笑問題の日曜サンデー (2)
処理後のフォルダ名
1008安住紳一郎の日曜天国
1015安住紳一郎の日曜天国
1015爆笑問題の日曜サンデー (1)
1015爆笑問題の日曜サンデー (2)
216デフォルトの名無しさん
2017/10/16(月) 04:34:03.61ID:3Tj/cKOj vbs 正規表現置換 ファイルリネーム
217デフォルトの名無しさん
2017/10/16(月) 08:11:27.58ID:GL/w6Jlo >>215
for /f "delims=" %%a in ('dir /ad /b ^| findstr /b /r "[0-9][0-9]月[0-9][0-9]日"') do call :SUB "%%~a"
exit /b
:SUB
set s=%~1
ren %1 "%s:~0,2%%s:~3,2%%s:~6%"
for /f "delims=" %%a in ('dir /ad /b ^| findstr /b /r "[0-9][0-9]月[0-9][0-9]日"') do call :SUB "%%~a"
exit /b
:SUB
set s=%~1
ren %1 "%s:~0,2%%s:~3,2%%s:~6%"
218デフォルトの名無しさん
2017/10/16(月) 23:00:12.58ID:rrtzmh2c >>216
ヒント下さったようでありがとうございます。でも、ゼロから書き始めることが出来ないんです。
>>217
私の求めていた動作です。これで完璧、ありがとうございます
ひと安心して解析に移ったわけです。。。
1.
"[0-9][0-9]月[0-9][0-9]日"
↑これでは22月33日にも対応というわけか、こやつめハハハ
フォルダ名の行頭部分は日付として機械的に生成される予想できる値ですので[0-9]で何の問題もないです。
勉強の為に、ここをいじってみました。
Month部分は、1 2 3...10 11 12、なら[1-12]で済むのかな。
ところが0埋めなので、01 02 03...10 11 12、となると、0[1-9]|1[0-2]、かな。
Day部分は、01 02 03...29 30 31、うーん0[1-9]|[1-2][0-9]|3[0-1]、となる。
これらを書き換えてみて、はい、動きませんでした。
今回のような自分用プログラムは動けばよいわけで、教えて下さった[0-9]で何の問題もない。
これ以上無駄な時間を掛けても&シンプルな方が可読性がよい
ヒント下さったようでありがとうございます。でも、ゼロから書き始めることが出来ないんです。
>>217
私の求めていた動作です。これで完璧、ありがとうございます
ひと安心して解析に移ったわけです。。。
1.
"[0-9][0-9]月[0-9][0-9]日"
↑これでは22月33日にも対応というわけか、こやつめハハハ
フォルダ名の行頭部分は日付として機械的に生成される予想できる値ですので[0-9]で何の問題もないです。
勉強の為に、ここをいじってみました。
Month部分は、1 2 3...10 11 12、なら[1-12]で済むのかな。
ところが0埋めなので、01 02 03...10 11 12、となると、0[1-9]|1[0-2]、かな。
Day部分は、01 02 03...29 30 31、うーん0[1-9]|[1-2][0-9]|3[0-1]、となる。
これらを書き換えてみて、はい、動きませんでした。
今回のような自分用プログラムは動けばよいわけで、教えて下さった[0-9]で何の問題もない。
これ以上無駄な時間を掛けても&シンプルな方が可読性がよい
219デフォルトの名無しさん
2017/10/16(月) 23:01:09.80ID:rrtzmh2c 2.
for a in ('標準出力 パイプ 標準入力') do
この部分、パイプの縦棒の左にくっついてる^は何者なのでしょう。。。初めて見ました。
アッ、日付部分が行頭だからか?いやfindstrに行頭オプションの/Bが付いてるし、そもそもパイプの左になぜ?
検索してみたのですがわからずここで冷や汗が出てきて
ウーンこれはなんなんだろう。そもそもメタ文字なのか銅貨さえわからない。
3.
そもそも何をしているのかというとradikoというプログラムでお気に入りのラジオ番組を録音しています。
AMラジオ番組ではCMのほとんどが過払い金のCMで聞きたくないのでスキップしたいのです。
ウォークマンで右ボタンを長押しすると早送り再生になるのですが、突然入るCMにイラッときて
長押しではなく短く押してしまって次のmp3ファイルに飛んでしまうのです。イライラッ!
そこで1分ごとに分割してしまうことにしました。mp3directcutというソフトを使って切り出すことが出来ることを
知りました。そのうち、切り出し作業が面倒になって調べていくうちにコマンドラインでの実行も可能と分かり、
バッチファイル化の作業に掛かりました。出来上がったのは以下のような4行のバッチファイルです。
@echo on
echo %*
for /D %%a in (%*) do (mkdir "%%~na")&(copy 1min.mpd "%%~na".mpd)&(mp3directcut "%%~fa" /autocue "%~dp1%%~na")&(del "%%~fa")&(del "%%~na".mpd)
pause
1min.mpdというのは1分ごとに切る指定が記述されているキューファイルです。同名の.mpdファイルがあるとそれを使ってくれるみたいなので、最初に元ファイルとして作っておきます。
1分ごとに切り分けられたものを再生してもけっこう大丈夫で、音楽だと気付く程度です。
いろいろ書いてしまいましたが頭が精一杯なのでとりあえずお礼申し上げ失礼ます
for a in ('標準出力 パイプ 標準入力') do
この部分、パイプの縦棒の左にくっついてる^は何者なのでしょう。。。初めて見ました。
アッ、日付部分が行頭だからか?いやfindstrに行頭オプションの/Bが付いてるし、そもそもパイプの左になぜ?
検索してみたのですがわからずここで冷や汗が出てきて
ウーンこれはなんなんだろう。そもそもメタ文字なのか銅貨さえわからない。
3.
そもそも何をしているのかというとradikoというプログラムでお気に入りのラジオ番組を録音しています。
AMラジオ番組ではCMのほとんどが過払い金のCMで聞きたくないのでスキップしたいのです。
ウォークマンで右ボタンを長押しすると早送り再生になるのですが、突然入るCMにイラッときて
長押しではなく短く押してしまって次のmp3ファイルに飛んでしまうのです。イライラッ!
そこで1分ごとに分割してしまうことにしました。mp3directcutというソフトを使って切り出すことが出来ることを
知りました。そのうち、切り出し作業が面倒になって調べていくうちにコマンドラインでの実行も可能と分かり、
バッチファイル化の作業に掛かりました。出来上がったのは以下のような4行のバッチファイルです。
@echo on
echo %*
for /D %%a in (%*) do (mkdir "%%~na")&(copy 1min.mpd "%%~na".mpd)&(mp3directcut "%%~fa" /autocue "%~dp1%%~na")&(del "%%~fa")&(del "%%~na".mpd)
pause
1min.mpdというのは1分ごとに切る指定が記述されているキューファイルです。同名の.mpdファイルがあるとそれを使ってくれるみたいなので、最初に元ファイルとして作っておきます。
1分ごとに切り分けられたものを再生してもけっこう大丈夫で、音楽だと気付く程度です。
いろいろ書いてしまいましたが頭が精一杯なのでとりあえずお礼申し上げ失礼ます
220デフォルトの名無しさん
2017/10/16(月) 23:34:41.57ID:1IRdIkAf >>219
^(キャレット)はエスケープ文字
これを付けずに実行すると、コマンドラインパーサで式評価時にパイプとして機能しちゃう
つまりfor文の途中にパイプが現れてそこで途切れちゃうことになる
やりたいことは、この行の最初の評価時には単なる|の文字として取り扱ってもらい
次の''で括ったコマンドの評価時にはパイプとして機能してほしいってわけ
1回の評価を→で表すとすると、
^| → |
^^| → ^| → |
^^^^| → ^^| → ^| → |
って感じに展開されていく(俺は3回まで使ったことがある)
%a%とかの環境変数の評価も似たようなもんだね
%%a%% → %a%
^(キャレット)はエスケープ文字
これを付けずに実行すると、コマンドラインパーサで式評価時にパイプとして機能しちゃう
つまりfor文の途中にパイプが現れてそこで途切れちゃうことになる
やりたいことは、この行の最初の評価時には単なる|の文字として取り扱ってもらい
次の''で括ったコマンドの評価時にはパイプとして機能してほしいってわけ
1回の評価を→で表すとすると、
^| → |
^^| → ^| → |
^^^^| → ^^| → ^| → |
って感じに展開されていく(俺は3回まで使ったことがある)
%a%とかの環境変数の評価も似たようなもんだね
%%a%% → %a%
221デフォルトの名無しさん
2017/10/16(月) 23:49:53.08ID:1IRdIkAf 環境変数の評価を遅延させる方法はつまり
%%temp%%と%^temp%との2通り書けるわけだ
(結果的に同じになるけど動作は違う)
%%temp%%と%^temp%との2通り書けるわけだ
(結果的に同じになるけど動作は違う)
222デフォルトの名無しさん
2017/10/16(月) 23:57:55.48ID:1IRdIkAf >>221
これはコマンドプロンプトでのことでbatに書くときはダメだね
これはコマンドプロンプトでのことでbatに書くときはダメだね
223デフォルトの名無しさん
2017/10/17(火) 00:03:17.05ID:bWF1v8hX 評価と展開がごっちゃになってる
俺の理解が浅い(忘れっぽい)せいだな
俺の理解が浅い(忘れっぽい)せいだな
224デフォルトの名無しさん
2017/10/17(火) 07:18:41.23ID:3NFRyYoM ここで言ってる遅延と、いわゆる「遅延展開」は別物ですか?
225デフォルトの名無しさん
2017/10/17(火) 09:05:40.81ID:fpIKg5e5 >>218
>Month部分は、1 2 3...10 11 12、なら[1-12]
[]は文字集合。[]内の文字のうち何れか1文字という意味。文字列は扱えない
[1-12]だと"1-1"と"2"という意味で1か2になる
01-12月、01-31日を表すのなら [01][0-9]月[0-3][0-9]日
[01]が0か1で十の位、[0-9]が0から9で一の位
桁の揃っている01なら可能だが1-12月はfindstrの貧弱な正規表現では1度に表すのは無理なので
1桁の場合と2桁の場合とを別けて検索文字列に設定する必要がある
ちょ、誰か
findstr /r "検索文字列" とfindstr /r /c:"検索文字列" の違いを教えてくれ。忘れた
>Month部分は、1 2 3...10 11 12、なら[1-12]
[]は文字集合。[]内の文字のうち何れか1文字という意味。文字列は扱えない
[1-12]だと"1-1"と"2"という意味で1か2になる
01-12月、01-31日を表すのなら [01][0-9]月[0-3][0-9]日
[01]が0か1で十の位、[0-9]が0から9で一の位
桁の揃っている01なら可能だが1-12月はfindstrの貧弱な正規表現では1度に表すのは無理なので
1桁の場合と2桁の場合とを別けて検索文字列に設定する必要がある
ちょ、誰か
findstr /r "検索文字列" とfindstr /r /c:"検索文字列" の違いを教えてくれ。忘れた
226デフォルトの名無しさん
2017/10/17(火) 10:39:26.27ID:AWu3veoe >>225
解説ありがとうございます
とりあえず日付の所いろいろやってみてるのですがうまく行かないままです。
正規表現といわず直接文字列を指定して | が有効になるかどうかというところから実験してます。
for /f "delims=" %%a in ('dir /ad /b ^| findstr /b /r ""10月15日"|"10月16日""') do call :SUB "%%~a"
pause
exit /b
:SUB
rem set s=%~1
rem ren %1 "%s:~0,2%%s:~3,2%%s:~6%"
findstrについての解説は検索で出てきた
http://www.atmarkit.co.jp/ait/articles/0412/18/news018.html
を読みました。読んだだけです。頑張ります
解説ありがとうございます
とりあえず日付の所いろいろやってみてるのですがうまく行かないままです。
正規表現といわず直接文字列を指定して | が有効になるかどうかというところから実験してます。
for /f "delims=" %%a in ('dir /ad /b ^| findstr /b /r ""10月15日"|"10月16日""') do call :SUB "%%~a"
pause
exit /b
:SUB
rem set s=%~1
rem ren %1 "%s:~0,2%%s:~3,2%%s:~6%"
findstrについての解説は検索で出てきた
http://www.atmarkit.co.jp/ait/articles/0412/18/news018.html
を読みました。読んだだけです。頑張ります
227デフォルトの名無しさん
2017/10/17(火) 11:38:46.09ID:fpIKg5e5 >""10月15日"|"10月16日""
"で""を囲えないしfindstrの正規表現で|は使えない
findstr /?
まともな正規表現を使いたければvbsやPowerShell、Perlとか別のスクリプトに行ったほうがいい
バッチだと"&"や"%"とかダメ文字があるし凝った事をやろうとするといずれ行き詰まる
急がば回れ
"で""を囲えないしfindstrの正規表現で|は使えない
findstr /?
まともな正規表現を使いたければvbsやPowerShell、Perlとか別のスクリプトに行ったほうがいい
バッチだと"&"や"%"とかダメ文字があるし凝った事をやろうとするといずれ行き詰まる
急がば回れ
228デフォルトの名無しさん
2017/10/17(火) 22:45:54.56ID:bWF1v8hX 参考にWSHでもどうぞ(hoge.jsファイルとして作成)、コマンドプロンプトから
hoge "フォルダ名" (又は cscript //nologo hoge.js "フォルダ名")
又は、エクスプローラ等からフォルダをこのjsファイル(又はショートカット)にドロップして実行
var fso = new ActiveXObject("Scripting.FileSystemObject");
var args = WScript.Arguments;
if(args.length<1) throw Error("引数にフォルダを指定してください");
if(!fso.FolderExists(args(0))) throw Error("指定のフォルダが存在しません");
var folder = fso.GetFolder(args(0)), s = "", success = [], fail = [], name, name2, em, i, r;
var re = /^(\d{1,2})月(\d{1,2})日(.*)$/;
var func_new_name = function(all,mm,dd,ss) {
if(mm<1 || mm>12 || dd<1 || dd>31) return "";
return ("0"+mm).substr(mm.length-1) + ("0"+dd).substr(dd.length-1) + ss;
};
em = new Enumerator(folder.SubFolders);
for(em.moveFirst();!em.atEnd();em.moveNext()) {
name = em.item().Name;
if(re.test(name)) {
name2 = name.replace(re,func_new_name);
if(name2) {
try{em.item().Name = name2; success.push(" "+name+" -> "+name2);}
catch(e) {fail.push(" "+name+" -> "+name2);}
}
}
}
if(success.length>0) s = "リネーム成功\n"+success.join("\n");
if(fail.length>0) s += "\nリネーム失敗\n"+fail.join("\n");
WScript.Echo(s || "対象フォルダなし");
hoge "フォルダ名" (又は cscript //nologo hoge.js "フォルダ名")
又は、エクスプローラ等からフォルダをこのjsファイル(又はショートカット)にドロップして実行
var fso = new ActiveXObject("Scripting.FileSystemObject");
var args = WScript.Arguments;
if(args.length<1) throw Error("引数にフォルダを指定してください");
if(!fso.FolderExists(args(0))) throw Error("指定のフォルダが存在しません");
var folder = fso.GetFolder(args(0)), s = "", success = [], fail = [], name, name2, em, i, r;
var re = /^(\d{1,2})月(\d{1,2})日(.*)$/;
var func_new_name = function(all,mm,dd,ss) {
if(mm<1 || mm>12 || dd<1 || dd>31) return "";
return ("0"+mm).substr(mm.length-1) + ("0"+dd).substr(dd.length-1) + ss;
};
em = new Enumerator(folder.SubFolders);
for(em.moveFirst();!em.atEnd();em.moveNext()) {
name = em.item().Name;
if(re.test(name)) {
name2 = name.replace(re,func_new_name);
if(name2) {
try{em.item().Name = name2; success.push(" "+name+" -> "+name2);}
catch(e) {fail.push(" "+name+" -> "+name2);}
}
}
}
if(success.length>0) s = "リネーム成功\n"+success.join("\n");
if(fail.length>0) s += "\nリネーム失敗\n"+fail.join("\n");
WScript.Echo(s || "対象フォルダなし");
229デフォルトの名無しさん
2017/10/17(火) 23:49:36.84ID:G9wCIPXR もうPowerShellのRename-Item使おうぜ
個人用途だろうし制約ないでしょ
個人用途だろうし制約ないでしょ
230デフォルトの名無しさん
2017/10/18(水) 02:49:24.30ID:nuzaMfIv 覚えたてによく居るよね
要件無視した勝手な仕様でエラー判定とか結果ダイアログとかゴテゴテ実装してドヤ顔で持ってきちゃう子
要件無視した勝手な仕様でエラー判定とか結果ダイアログとかゴテゴテ実装してドヤ顔で持ってきちゃう子
231デフォルトの名無しさん
2017/10/18(水) 02:57:26.06ID:O0s7d+Fx まあダブルクリックで不意に実行されちゃうようなのは作りたくないよな
232デフォルトの名無しさん
2017/10/18(水) 07:04:24.46ID:G1+K6kx+ >>215 無理やりバッチファイルの例
for /d %%i in (*) do set "a=%%~nxi" & call :w
goto :eof
:w
setlocal enabledelayedexpansion
set "e=m" & set /a b=0,m=0,d=0
:x
set "c=!a:~%b%,1!"
if not defined c goto :eof
for /L %%j in (0,1,9) do if "!c!"=="%%j" set /a !e!=!e!*10+c & goto y
if not "!c!"=="月" goto z
if not "!e!"=="m" goto :eof
if !m! gtr 12 goto :eof
set "e=d"
:y
set /a b+=1 & goto x
:z
if not "!c!"=="日" goto :eof
if not "!e!"=="d" goto :eof
if !d! gtr 31 goto :eof
set /a f=m*d,m+=100,d+=100,b+=1
if !f! gtr 0 ren "!a!" "!m:~1!!d:~1!!a:~%b%!"
for /d %%i in (*) do set "a=%%~nxi" & call :w
goto :eof
:w
setlocal enabledelayedexpansion
set "e=m" & set /a b=0,m=0,d=0
:x
set "c=!a:~%b%,1!"
if not defined c goto :eof
for /L %%j in (0,1,9) do if "!c!"=="%%j" set /a !e!=!e!*10+c & goto y
if not "!c!"=="月" goto z
if not "!e!"=="m" goto :eof
if !m! gtr 12 goto :eof
set "e=d"
:y
set /a b+=1 & goto x
:z
if not "!c!"=="日" goto :eof
if not "!e!"=="d" goto :eof
if !d! gtr 31 goto :eof
set /a f=m*d,m+=100,d+=100,b+=1
if !f! gtr 0 ren "!a!" "!m:~1!!d:~1!!a:~%b%!"
233デフォルトの名無しさん
2017/10/18(水) 22:17:20.50ID:on6I0HDV >>231
うちの現場のバッチは例え内部で使わなかろうが最低1つは必ず引数を渡す仕様になってる。
そしてそれが渡されなかった場合は処理せずに終了する作りになっている。
理由は誤ってダブクリしちゃった場合の対策なんだってさ。
うちの現場のバッチは例え内部で使わなかろうが最低1つは必ず引数を渡す仕様になってる。
そしてそれが渡されなかった場合は処理せずに終了する作りになっている。
理由は誤ってダブクリしちゃった場合の対策なんだってさ。
234デフォルトの名無しさん
2017/10/18(水) 22:23:22.61ID:hY2xT5yc batって大体はD&Dして使うようなの書いてるな
235デフォルトの名無しさん
2017/10/19(木) 01:03:03.64ID:cgLUQcTs >>230
なんか癇に障ったみたいだけど、言い訳すると
俺は、質問者によって回答内容を変えてる
今回の質問者は初心者だと感じたし、さらには細かい拘りを持っているように見受けられた
(13月32日なんて作らないだろうし、もしあったって1332に変換されて悪いことはないと思う)
色々と手を加えて試行錯誤することが好きなんだろうなって思ったから
役に立ちそうな追加部分を記述した
それに1レスで書く分には、数行増えようが関係ないだろうと思ったしね
なんか癇に障ったみたいだけど、言い訳すると
俺は、質問者によって回答内容を変えてる
今回の質問者は初心者だと感じたし、さらには細かい拘りを持っているように見受けられた
(13月32日なんて作らないだろうし、もしあったって1332に変換されて悪いことはないと思う)
色々と手を加えて試行錯誤することが好きなんだろうなって思ったから
役に立ちそうな追加部分を記述した
それに1レスで書く分には、数行増えようが関係ないだろうと思ったしね
236デフォルトの名無しさん
2017/10/19(木) 08:32:22.21ID:ny4cf+Vz >>233
なるほど
なるほど
237デフォルトの名無しさん
2017/10/19(木) 22:12:55.60ID:JROgBEvY ザ・ワールド、時よ止まれ。
238デフォルトの名無しさん
2017/10/20(金) 03:00:35.66ID:1Na2h1P4 キッティングの自動化をしたいんだが、参考になるサイトない?
239デフォルトの名無しさん
2017/10/20(金) 03:00:59.71ID:1Na2h1P4 対象のレジストリ見つけるとかめんどい
240デフォルトの名無しさん
2017/10/20(金) 23:41:00.84ID:aZN6SiIl どの程度の自動化?
241デフォルトの名無しさん
2017/10/21(土) 08:56:40.19ID:Nsvn2WYb >>238
何を自動化するん?
何を自動化するん?
242デフォルトの名無しさん
2017/10/21(土) 16:42:48.10ID:DofUW9OG そんなんツールが出てるんだからその説明でも読めよ
243デフォルトの名無しさん
2017/10/21(土) 18:43:14.12ID:TBS9tbdH 一発で、ファイアウォールの受信規則とかインターネットオプションとか
244名無しさん@そうだ選挙に行こう! Go to vote!
2017/10/22(日) 07:51:26.89ID:eb/3UN8i >>215
$before = ls -Directory | Where-Object { $_ -match "^\d+月\d+日" }
$after = $before | foreach { $_.Name -replace '^(\d+)月(\d+)日', '$1$2' }
$idx = 0;
$before | foreach {
Rename-Item -WhatIf $_.FullName $after[$idx];
$idx++;
}
PowerShell で書いたので、cd で、そのフォルダへ移動して実行して。
-WhatIf が付いているので、本当には実行せずに、結果だけを見れる。
本当に実行する際は、-WhatIf を削除して実行して
配列 $before には「02月03日」などで始まるフォルダだけを、入れる。
配列 $after には「02月03日」の部分だけを「0203」に変換した、フォルダ名を入れる
Rename-Item で、該当する全フォルダ名を変換する
$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 で、該当する全フォルダ名を変換する
2017/10/22(日) 14:53:59.01ID:1YRZU7Jo
問題は、月を01〜12まで、日を01〜31までのチェックを入れることだけどね
2017/10/22(日) 16:29:48.93ID:rLFHcAK9
>>244
ls <directory-name> -directory | ren -newname {$_.name -replace '^(¥d+)月(¥d+)日', '$1$2' }
lsの-filterやwhere-object使ってもいいけど
この例の場合は不要だと思うよ
ls <directory-name> -directory | ren -newname {$_.name -replace '^(¥d+)月(¥d+)日', '$1$2' }
lsの-filterやwhere-object使ってもいいけど
この例の場合は不要だと思うよ
247デフォルトの名無しさん
2017/10/23(月) 07:20:31.59ID:A3jhOkfm ls -directory | ren -WhatIf -newname {$_.name -replace '^(\d+)月(\d+)日', '$1$2' }
上記で、where-object が無いと、
変更されないフォルダまで、表示されるのが気持ち悪い
上記で、where-object が無いと、
変更されないフォルダまで、表示されるのが気持ち悪い
248デフォルトの名無しさん
2017/10/23(月) 22:30:10.89ID:TV21zs/8 Windows7SP1では、Get-ChildItemに-directoryオプションは無いんでエラーが表示された
調べたら、3.0以降でこのオプションが付いた模様
この際なので、5.0,5.1をインストールした
Windows7の人の参考まで
調べたら、3.0以降でこのオプションが付いた模様
この際なので、5.0,5.1をインストールした
Windows7の人の参考まで
249デフォルトの名無しさん
2017/10/24(火) 18:41:12.61ID:QQrV41zo PowerShellのスクリプトファイルの拡張子は普通.ps1を使うが
デフォルトではファイルの実行を許可してないし、
また許可後もダイレクトにファイル名を指定しても実行できない
って保険かけすぎで入門者には敷居が高いだろと思わないでもないなあ
>>247
where-objectを入れてみた
(まだ2時間ぐらいしかやってないんでもっといい書き方があるかも)
$re='^(\d+)月(\d+)日';ls -directory|? name -match $re|ren -whatif -newname {$_.name -replace $re,'$1$2'}
このスレ的にはアリアス使うなら、lsよりもdirが合ってる気もするけど
デフォルトではファイルの実行を許可してないし、
また許可後もダイレクトにファイル名を指定しても実行できない
って保険かけすぎで入門者には敷居が高いだろと思わないでもないなあ
>>247
where-objectを入れてみた
(まだ2時間ぐらいしかやってないんでもっといい書き方があるかも)
$re='^(\d+)月(\d+)日';ls -directory|? name -match $re|ren -whatif -newname {$_.name -replace $re,'$1$2'}
このスレ的にはアリアス使うなら、lsよりもdirが合ってる気もするけど
250デフォルトの名無しさん
2017/11/03(金) 20:22:18.43ID:+gpl8JNW ここで聞くべきか迷ったのですが…
自分のマシンからリモートデスクトップで接続できるサーバー(確かWin2008R2)があって
そのサーバーと同じネットワーク内にクライアント端末(Win7)があります。
そのクライアント端末のプロセスをリモートデスクトップで接続したサーバーから確認することは可能でしょうか?
(サーバーには管理者権限で接続しています)
要はクライアント端末でtasklistコマンドを打った結果が見たいのですが。
ちなみにクライアント端末はDHCP設定なので起動のたびにIPアドレスが変わります…
今は1日に何度も遠くにあるクライアント端末まで行ってプロセスを確認しています。
1回だけ行ってIPアドレスをメモるぐらいなら全然構わないので何か方法があれば教えて下さい。
自分のマシンからリモートデスクトップで接続できるサーバー(確かWin2008R2)があって
そのサーバーと同じネットワーク内にクライアント端末(Win7)があります。
そのクライアント端末のプロセスをリモートデスクトップで接続したサーバーから確認することは可能でしょうか?
(サーバーには管理者権限で接続しています)
要はクライアント端末でtasklistコマンドを打った結果が見たいのですが。
ちなみにクライアント端末はDHCP設定なので起動のたびにIPアドレスが変わります…
今は1日に何度も遠くにあるクライアント端末まで行ってプロセスを確認しています。
1回だけ行ってIPアドレスをメモるぐらいなら全然構わないので何か方法があれば教えて下さい。
251デフォルトの名無しさん
2017/11/03(金) 21:42:45.24ID:91m0YuAi クライアントに自分のタスクリストをファイルを記録する周期ジョブを作成しておく
必要であれば暗号化しておく
そのファイルをメールで自動送付するようにしておくか、
クライアントにwebエリアがあればそこに置きこちらから見にいく
必要であれば暗号化しておく
そのファイルをメールで自動送付するようにしておくか、
クライアントにwebエリアがあればそこに置きこちらから見にいく
252デフォルトの名無しさん
2017/11/03(金) 21:52:08.46ID:z1gogpom253デフォルトの名無しさん
2017/11/03(金) 22:47:57.34ID:+QQUmgGP >>250
1) 他のPCのプロセス状態を知りたい
2) DHCPで設定されているPCのIPアドレスを知りたい
ってことでいいかな
1) はtasklist の /s オプションで知りたいPCのIPアドレスを指定すれば行けるはず
ただし事前にPC側に設定が必要
かつPCにログインできる情報が必要
2) は
2-1) 直接見に行ってipconfigで確認する
2-2) MACアドレスわかってるならサーバーからそのネットワークアドレス全体にpingを打ちつつarpコマンドで相手のMACアドレス確認していけばいい
2-3) DHCPサーバーを管理してるならPCのIPアドレスを確認する方法があるかも、まあそれならPCのIPアドレスを固定した方がいいかも
2-4) >>251みたいな方法で定期的にIPアドレスを通知してもらう
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アドレスを通知してもらう
254250
2017/11/04(土) 18:18:26.62ID:HSP2f8JH みなさん情報ありがとうございます。
来週になったらとりあえず>>252さんの方法を試してみます。(一番手軽なので…汗)
それでダメな場合は一日一回直接IPアドレスを確認しにいく方式にします。
というのもpingのブロードキャストは現場のルールで禁止されてるっぽいので。
クライアント端末も特別な用途のためのものなのでタスク作ったり何かを仕掛けるのは厳しそうです。
仕掛けられれば業務はすごく楽になるんですけど「セキュリティ上問題が…」とか言われて突っぱねられる可能性大です。><
尚、pingブロードキャスト以外の方法でIPを知る方法については自分でも調べてみます。
どうもありがとうございます。助かりました!
来週になったらとりあえず>>252さんの方法を試してみます。(一番手軽なので…汗)
それでダメな場合は一日一回直接IPアドレスを確認しにいく方式にします。
というのもpingのブロードキャストは現場のルールで禁止されてるっぽいので。
クライアント端末も特別な用途のためのものなのでタスク作ったり何かを仕掛けるのは厳しそうです。
仕掛けられれば業務はすごく楽になるんですけど「セキュリティ上問題が…」とか言われて突っぱねられる可能性大です。><
尚、pingブロードキャスト以外の方法でIPを知る方法については自分でも調べてみます。
どうもありがとうございます。助かりました!
255デフォルトの名無しさん
2017/11/04(土) 18:30:41.27ID:sTeHaJ1X256デフォルトの名無しさん
2017/11/05(日) 10:20:45.02ID:rFS24mxQ set infilenm=001.txt
set outfilenm=002.txt
set beforestr=""""
set afterstr=""
type nul >%outfilenm%
setlocal enabledelayedexpansion
for /f "delims=" %%A in (%infilenm%) do (
set line=%%A
echo !line:%beforestr%=%afterstr%!>>%outfilenm%
)
endlocal
001.txtからダブルクォーテーションを削除して002.txtに保存したいだけなんですが、
3行目と4行目の表記がわからず、考えられる限り書き直して、うまくいきません。
あるいは別のBATでもいいのですが教えてください。
set outfilenm=002.txt
set beforestr=""""
set afterstr=""
type nul >%outfilenm%
setlocal enabledelayedexpansion
for /f "delims=" %%A in (%infilenm%) do (
set line=%%A
echo !line:%beforestr%=%afterstr%!>>%outfilenm%
)
endlocal
001.txtからダブルクォーテーションを削除して002.txtに保存したいだけなんですが、
3行目と4行目の表記がわからず、考えられる限り書き直して、うまくいきません。
あるいは別のBATでもいいのですが教えてください。
257デフォルトの名無しさん
2017/11/05(日) 11:42:01.62ID:vm51NJQ8258デフォルトの名無しさん
2017/11/05(日) 11:56:26.30ID:vm51NJQ8 ただ001.txtのデータ次第でうまくいかない場合があるんで
別のスクリプト言語(PowerShellやWSH等)で書いたほうがいい
別のスクリプト言語(PowerShellやWSH等)で書いたほうがいい
259256
2017/11/05(日) 12:18:29.39ID:rFS24mxQ260デフォルトの名無しさん
2017/11/05(日) 13:20:27.79ID:vm51NJQ8261デフォルトの名無しさん
2017/11/05(日) 13:40:33.57ID:rFS24mxQ >>260
ご心配ありがとうございます。
大丈夫です。ものは、<a href とかのhtmlタグで作成したリンクリストで、
正規表現とかエスケープっぽい記号等はなく、
そもそもプライベートファイルなので、これで素早くリストができて万々歳です。
ご心配ありがとうございます。
大丈夫です。ものは、<a href とかのhtmlタグで作成したリンクリストで、
正規表現とかエスケープっぽい記号等はなく、
そもそもプライベートファイルなので、これで素早くリストができて万々歳です。
262デフォルトの名無しさん
2017/11/06(月) 15:18:34.73ID:K1roLwuw263デフォルトの名無しさん
2017/11/06(月) 15:59:22.60ID:K1roLwuw 半角スペースだけの行は化けるな
264デフォルトの名無しさん
2017/11/06(月) 19:12:27.47ID:Mdq5cGE3 echo,とか、echo;とかで
265デフォルトの名無しさん
2017/11/06(月) 23:15:25.56ID:RrRem/45 バッチファイルに渡された引数が1つなのか2つなのかを判定したいのですが
どのように記述すれば良いのでしょうか?
以下ではダメでした。
if defined %2 echo 引数は2つです else echo 引数は1つです
どのように記述すれば良いのでしょうか?
以下ではダメでした。
if defined %2 echo 引数は2つです else echo 引数は1つです
266デフォルトの名無しさん
2017/11/07(火) 01:14:40.14ID:xsgE2wk0 if not '%2=='
267デフォルトの名無しさん
2017/11/07(火) 07:09:27.79ID:4pg/kk0r >>264 ありがとう
for /f "delims=" %%i in (001.txt) do (
set "a=%%i"
setlocal enabledelayedexpansion
set "a=!a:"=!"
echo.!a!>>002.txt
endlocal
)
これで空行以外は完璧かな?
for /f "delims=" %%i in (001.txt) do (
set "a=%%i"
setlocal enabledelayedexpansion
set "a=!a:"=!"
echo.!a!>>002.txt
endlocal
)
これで空行以外は完璧かな?
268デフォルトの名無しさん
2017/11/07(火) 10:05:04.55ID:1287flJj >>262の奴で
"echo "を"echo."にするとダメなのに"echo,"にするとOKなのは何故なんだぜ?
今まで、ピリオドとカンマ、セミコロンに違いがあるとは思ってなかったから
ずっとピリオド使ってたのに
"echo "を"echo."にするとダメなのに"echo,"にするとOKなのは何故なんだぜ?
今まで、ピリオドとカンマ、セミコロンに違いがあるとは思ってなかったから
ずっとピリオド使ってたのに
269デフォルトの名無しさん
2017/11/07(火) 22:51:26.28ID:4pg/kk0r270デフォルトの名無しさん
2017/11/08(水) 00:22:28.07ID:X1Aytah6 for /f delims^=^ eol^=
272デフォルトの名無しさん
2017/11/08(水) 19:40:30.74ID:VTzaN0jn >>268
「,」「;」「=」は特別区切り文字だから。
例えば、C:\直下に「a」ってフォルダ作って
「b.cmd」
for /f %%a in ('echo,b') do echo,%%a
「b b.cmd」
echo;c %1
pause
のバッチ作成して、コマンドプロンプトで「C:\a」に移動してから
「b.cmd」を実行すると、()の中の「,」が消えた状態で表示される
「b b.cmd」を実行すると、「b.cmd」が実行される
「"b b.cmd"」を実行すると、「b b.cmd」が実行される
今度はファイル名を指定して実行で
cmd /c "C:\a\b b.cmd"
cmd /c "C:\a\b b.cmd" dを実行すると、pauseで止まるけど
cmd /c "C:\a\b b.cmd" "d"を実行すると、一瞬で終わる
cmd /c,"C:\a\b b.cmd" "d"なら動く
結構知られていないんだよね。
「,」「;」「=」は特別区切り文字だから。
例えば、C:\直下に「a」ってフォルダ作って
「b.cmd」
for /f %%a in ('echo,b') do echo,%%a
「b b.cmd」
echo;c %1
pause
のバッチ作成して、コマンドプロンプトで「C:\a」に移動してから
「b.cmd」を実行すると、()の中の「,」が消えた状態で表示される
「b b.cmd」を実行すると、「b.cmd」が実行される
「"b b.cmd"」を実行すると、「b b.cmd」が実行される
今度はファイル名を指定して実行で
cmd /c "C:\a\b b.cmd"
cmd /c "C:\a\b b.cmd" dを実行すると、pauseで止まるけど
cmd /c "C:\a\b b.cmd" "d"を実行すると、一瞬で終わる
cmd /c,"C:\a\b b.cmd" "d"なら動く
結構知られていないんだよね。
273デフォルトの名無しさん
2017/11/08(水) 22:40:59.50ID:ZHWfUJ7q >>270 ありがとう。完全に動作しました
そもそも eol の既定値が ; だとかヘルプに書いてないぞ
ちなみに "eol=" とすると eol が空になるのかと思ったら
今度は行頭に " があると読み飛ばすようです
何なんだ、これは。for 文のバグですかね
そもそも eol の既定値が ; だとかヘルプに書いてないぞ
ちなみに "eol=" とすると eol が空になるのかと思ったら
今度は行頭に " があると読み飛ばすようです
何なんだ、これは。for 文のバグですかね
274デフォルトの名無しさん
2017/11/09(木) 12:26:56.09ID:NEfZ8eBs @echo off
prompt $g
set a=/?
set b=exe
set c= off
echo on
echo,%a%
echo;%a%
echo.%a%
echo.%b%
echo.%c%
echo
pause
prompt $g
set a=/?
set b=exe
set c= off
echo on
echo,%a%
echo;%a%
echo.%a%
echo.%b%
echo.%c%
echo
pause
275デフォルトの名無しさん
2017/11/10(金) 12:50:53.03ID:5BeFn7Xg 一時的なwindows資格情報の付与
付与→(再起動)→ポップアップを閉じるまで作業→(再起動)
の流れをバッチ実行一発で済ませたいと思ってる。
(○.bat)
cmdkey 書き込み
copy **.batを配置
schtasks 再起動後のタスク登録(**.bat実行)
shutdown 再起動
↓ (ログイン)
(**.bat)
echoでmsgbox表示(閉じるまで待つ)
cmdkey /delete ←ここで資格情報が消えない
schtasks /Delete タスク消去
del /f "%~dp0 自己消去
タスクは一応highest
タスク実行だとcmdkey通らないとかある?
bat素人で何が原因で消えないのかわからない・・・
ポップアップ表示中にcmd開いてcmdkey打つとちゃんと消える
付与→(再起動)→ポップアップを閉じるまで作業→(再起動)
の流れをバッチ実行一発で済ませたいと思ってる。
(○.bat)
cmdkey 書き込み
copy **.batを配置
schtasks 再起動後のタスク登録(**.bat実行)
shutdown 再起動
↓ (ログイン)
(**.bat)
echoでmsgbox表示(閉じるまで待つ)
cmdkey /delete ←ここで資格情報が消えない
schtasks /Delete タスク消去
del /f "%~dp0 自己消去
タスクは一応highest
タスク実行だとcmdkey通らないとかある?
bat素人で何が原因で消えないのかわからない・・・
ポップアップ表示中にcmd開いてcmdkey打つとちゃんと消える
276275
2017/11/10(金) 18:22:22.05ID:5BeFn7Xg 回りくどい方法ですが自己解決できました。
.vbsにcmdkey /deleteを入れ
cmdの管理者権限起動用ショートカットを作成
schtasks からhighestをぬいて、管理者権限でcmdを再起動
vbsを実行で資格情報を消すことができました。
.vbsにcmdkey /deleteを入れ
cmdの管理者権限起動用ショートカットを作成
schtasks からhighestをぬいて、管理者権限でcmdを再起動
vbsを実行で資格情報を消すことができました。
277デフォルトの名無しさん
2017/11/11(土) 23:58:13.74ID:Smy5DbHD copy /b 1.mp4+2.mp4 3.mp4
上記で結合した3.mp4の動画に2.mp4の内容が追加されないのですがなぜかわかりますか?
3.mp4のファイルサイズだけは1.mp4+2.mp4の容量になっています
すぐ出来ると思ったのにつまづいた泣
上記で結合した3.mp4の動画に2.mp4の内容が追加されないのですがなぜかわかりますか?
3.mp4のファイルサイズだけは1.mp4+2.mp4の容量になっています
すぐ出来ると思ったのにつまづいた泣
278デフォルトの名無しさん
2017/11/12(日) 01:15:27.00ID:1rXZudmc279デフォルトの名無しさん
2017/11/12(日) 01:38:03.29ID:/fk063EO280デフォルトの名無しさん
2017/11/12(日) 14:54:34.48ID:GpB3XqQ3 動画形式の勉強など、自分でやるものじゃない
動画編集アプリを使うべき
動画編集アプリを使うべき
281デフォルトの名無しさん
2017/11/12(日) 14:57:17.00ID:43gC7oaU 今の編集アプリだとmp4再エンコしなくてもそのまま繋げられるのかな?
282デフォルトの名無しさん
2017/11/12(日) 15:08:29.51ID:MOg5phwx >>280
バッチから結合を指示できる動画編集アプリよろしくね
バッチから結合を指示できる動画編集アプリよろしくね
283デフォルトの名無しさん
2017/11/12(日) 15:14:20.67ID:Xj6DjuPw ffmpegでええやん
284デフォルトの名無しさん
2017/11/20(月) 14:42:11.56ID:rhJshzCP 64bitOS環境
バッチ1つでWOW64内のcmdで実行する方法ってありますか?
バッチ1つでWOW64内のcmdで実行する方法ってありますか?
285デフォルトの名無しさん
2017/11/20(月) 15:06:54.45ID:rhJshzCP すみません普通にSTARTで呼んでできました…
286デフォルトの名無しさん
2017/11/22(水) 13:08:53.67ID:i4qRIFe0 呼び出し元バッチに戻る終了方法を追加してほしい
exit /B だとcmdを終わるだけ戻らない
call で呼び出さなくても戻る機能をつけてほしい
exit /r や return文で
exit /B だとcmdを終わるだけ戻らない
call で呼び出さなくても戻る機能をつけてほしい
exit /r や return文で
287デフォルトの名無しさん
2017/11/23(木) 17:36:40.78ID:cAVsYuht startに待つオプションあるだろ
288デフォルトの名無しさん
2017/12/06(水) 10:57:13.74ID:RImq1PQL >>281
昔から無劣化で繋げられるけど??
昔から無劣化で繋げられるけど??
289ファイルアクセス監視
2017/12/23(土) 19:00:05.09ID:Jw1Bivzx ダウンロードしたローカルアプリ(Jane Styleなど)が
重要な場所のローカルファイルから情報を盗もうとしてないかどうか念のため監視したいのですが、
https://technet.microsoft.com/ja-jp/sysinternals/handle.aspx
このdosで使える handle は出力ファイル名の日本語が文字化けするんですが、何かいい方法ないですか?
文字化け以外に関しては非常に便利です
出力をdosで加工してエクスプローラーのログを除外して、ユーザー+プロセス+ファイル名が初登場の時だけ出力してます
これでもし見慣れないファイルアクセスがあったら目立ちます(GUI系はリアルタイムで消えるので)
重要な場所のローカルファイルから情報を盗もうとしてないかどうか念のため監視したいのですが、
https://technet.microsoft.com/ja-jp/sysinternals/handle.aspx
このdosで使える handle は出力ファイル名の日本語が文字化けするんですが、何かいい方法ないですか?
文字化け以外に関しては非常に便利です
出力をdosで加工してエクスプローラーのログを除外して、ユーザー+プロセス+ファイル名が初登場の時だけ出力してます
これでもし見慣れないファイルアクセスがあったら目立ちます(GUI系はリアルタイムで消えるので)
290デフォルトの名無しさん
2017/12/23(土) 22:54:57.75ID:FPRjmoIB ファイル名のようなシステム要件には、半角英数字だけを使う。
半角空白も使うな。Mac でバグる
すべてのアプリの開発者が、多国語のファイル名では、テストしていないから、
多くのアプリでバグる
特に、書庫を使う、圧縮解凍アプリでバグる
半角空白も使うな。Mac でバグる
すべてのアプリの開発者が、多国語のファイル名では、テストしていないから、
多くのアプリでバグる
特に、書庫を使う、圧縮解凍アプリでバグる
291デフォルトの名無しさん
2017/12/24(日) 08:43:36.04ID:WeE5WMFr echo.
で空行を表示できると知りましたが
この「.」には何の意味があるのでしょうか?
で空行を表示できると知りましたが
この「.」には何の意味があるのでしょうか?
292デフォルトの名無しさん
2017/12/24(日) 15:38:49.19ID:9EARh1KB >>291
意味を考えてはいけません。調べてませんが、英語のピリオドなので文字列なしで終わりという意味合いからそうしたのでしょう。
意味を考えてはいけません。調べてませんが、英語のピリオドなので文字列なしで終わりという意味合いからそうしたのでしょう。
293デフォルトの名無しさん
2017/12/24(日) 15:51:26.20ID:nsKMF0PM echoの直後の文字列は出力されないんだっけ?
「.」の以外の文字列でも空行になるけど1番問題が起きにくいとかそんなのかな
「.」の以外の文字列でも空行になるけど1番問題が起きにくいとかそんなのかな
294デフォルトの名無しさん
2017/12/24(日) 18:22:33.52ID:T/PAdelQ ちょっと前にその辺の話が出てた
>>264-274
>>264-274
295デフォルトの名無しさん
2017/12/26(火) 01:03:48.59ID:9+DFjrUc 特別区切り文字というものがあるなんてここで初めて知ったんだけど…(本当かどうかはまだ確かめていない)。
もはや紙媒体で信用できる会社からの体形的な出版物が無いのよね。
…ある??
もはや紙媒体で信用できる会社からの体形的な出版物が無いのよね。
…ある??
296デフォルトの名無しさん
2017/12/26(火) 01:08:10.71ID:NGPwifm5 こんなのは仕様じゃなくて実装上の結果にすぎない
undocumennt specと言ってもいいが、正式な本に仕様として載るようなもんじゃないと思う
undocumennt specと言ってもいいが、正式な本に仕様として載るようなもんじゃないと思う
297デフォルトの名無しさん
2017/12/26(火) 01:23:11.58ID:9+DFjrUc >>296
そりゃ分かるんだけど…。
UNIX の bash だっておかしいところが結構あってさ。
でも「構文解析が未熟な時代、全てを(記号ですら)コマンドだと置いた結果」という説明の仕方ができるそうな。
C言語の仕様だっていい加減後付けが多い。でも説明を試みた結果がANSI。無理が多いけど。
Windows界隈ってそういうのが貧しいと思う。
スレ違いだけど、PowerShell も Core とか言い出してからなんかおかしくないか?
そりゃ分かるんだけど…。
UNIX の bash だっておかしいところが結構あってさ。
でも「構文解析が未熟な時代、全てを(記号ですら)コマンドだと置いた結果」という説明の仕方ができるそうな。
C言語の仕様だっていい加減後付けが多い。でも説明を試みた結果がANSI。無理が多いけど。
Windows界隈ってそういうのが貧しいと思う。
スレ違いだけど、PowerShell も Core とか言い出してからなんかおかしくないか?
298デフォルトの名無しさん
2017/12/27(水) 01:13:01.79ID:1X8kZn43 bashはかなーり最近のプロダクトだと思うのだが
299デフォルトの名無しさん
2017/12/27(水) 19:45:46.24ID:8XzWQMmb300デフォルトの名無しさん
2017/12/28(木) 06:04:09.70ID:HvFHYdEd >>297
要はさんざん検証して挙動を確認しないと恐くて使えないってこったなw
要はさんざん検証して挙動を確認しないと恐くて使えないってこったなw
301デフォルトの名無しさん
2017/12/28(木) 07:32:44.10ID:psxJdr/O 関係ない話ですまんが
いまだに cmd /? の表示が変だな、一部重複してる
マイクロソフトは直す気が無いのか
たぶんNTの頃から変なんだが
いまだに cmd /? の表示が変だな、一部重複してる
マイクロソフトは直す気が無いのか
たぶんNTの頃から変なんだが
302デフォルトの名無しさん
2017/12/28(木) 08:43:15.72ID:V28V958v バグレポートに誰も上げていないか、
あるいは上げられていても優先順位がものすごく低いのでしょう。
あるいは上げられていても優先順位がものすごく低いのでしょう。
303デフォルトの名無しさん
2017/12/28(木) 18:35:17.03ID:QlD4+lUL304デフォルトの名無しさん
2017/12/28(木) 19:17:17.28ID:uuf5XAZw 優秀な奴はさらっと変更して賞賛されるけど、
そうじゃない奴がさらっと変更すると、
勝手なことすんなって怒られるんだよな。
そうじゃない奴がさらっと変更すると、
勝手なことすんなって怒られるんだよな。
305デフォルトの名無しさん
2017/12/28(木) 22:46:38.96ID:8hIgR6GI bash が最近のプロダクトだとか…ヨボヨボの痴呆が入ったおじいちゃんか?
UNIX で bash が出たのって 20世紀なんだが。
>>299
これのことか?明らかに違う。
> 引用符が必要な特別な文字は次のとおりです:
> <スペース>
> &()[]{}^=;!'+,`~
>>300
自分が新規で書けるなら VBScript でいい。
「これは例外、あれも例外、それも例外」なブツなんか触りたくない。
そんな時間があるなら生産的な言語に費やしたい。
触らざるを得ないからイラつく。阿呆か。
PowerShell は Windows の自動化から管理系を抜き出した方向に行こうとしているので何だかねぇ…
UNIX で bash が出たのって 20世紀なんだが。
>>299
これのことか?明らかに違う。
> 引用符が必要な特別な文字は次のとおりです:
> <スペース>
> &()[]{}^=;!'+,`~
>>300
自分が新規で書けるなら VBScript でいい。
「これは例外、あれも例外、それも例外」なブツなんか触りたくない。
そんな時間があるなら生産的な言語に費やしたい。
触らざるを得ないからイラつく。阿呆か。
PowerShell は Windows の自動化から管理系を抜き出した方向に行こうとしているので何だかねぇ…
306デフォルトの名無しさん
2017/12/29(金) 00:43:01.22ID:oAr+Y8wr307デフォルトの名無しさん
2017/12/29(金) 07:36:55.45ID:kfbFSvw+ 今時VBScriptとか言ってる老害の相手するなよ...
308デフォルトの名無しさん
2017/12/29(金) 08:54:48.93ID:oAr+Y8wr 年寄りのくせにGNU前を知らないんだとしたら、死んだ方がいいね。
309デフォルトの名無しさん
2017/12/29(金) 10:58:34.56ID:dNvcaBYU VBScriptは依然として結構イケると思うけどな
310デフォルトの名無しさん
2017/12/29(金) 14:50:59.06ID:Xr0syokO 真面目にそう思ってるならちょっとヤバイぞ
311デフォルトの名無しさん
2017/12/29(金) 17:11:52.20ID:oAr+Y8wr VBAと混同してる人がいるようだ
312デフォルトの名無しさん
2017/12/29(金) 23:12:55.18ID:1POkgVP3 >>298
はあ?
はあ?
313デフォルトの名無しさん
2017/12/30(土) 17:45:48.22ID:RVllgMXp バッチファイルなのになんでVBの話になるのん
314デフォルトの名無しさん
2018/01/01(月) 14:25:38.32ID:TmlLnuaw >>301-302
コマンドのバグ ⇒ 全世界のユーザーに影響出るから下手に直せない
コマンドのヘルプの文言誤り ⇒ 優先度低いのでなかなか直さない
ってことかなるほど。
コマンドのバグ ⇒ 全世界のユーザーに影響出るから下手に直せない
コマンドのヘルプの文言誤り ⇒ 優先度低いのでなかなか直さない
ってことかなるほど。
315デフォルトの名無しさん
2018/01/03(水) 18:47:59.00ID:G1jkbehM >>313
cscriptで自身を実行する外見バッチ中身WSHみたいなんもあるにはあるし…
cscriptで自身を実行する外見バッチ中身WSHみたいなんもあるにはあるし…
316デフォルトの名無しさん
2018/01/03(水) 20:04:05.34ID:NAv6VFfd317デフォルトの名無しさん
2018/01/03(水) 20:12:05.39ID:lLEkaf6s318デフォルトの名無しさん
2018/01/03(水) 21:17:45.06ID:NAv6VFfd >>317
wsfの手があったか、あとjsでもスクリプトエンコードで書けばなんとかなるね
wsfの手があったか、あとjsでもスクリプトエンコードで書けばなんとかなるね
319デフォルトの名無しさん
2018/01/13(土) 16:23:41.90ID:t3TbTPGI powershellで似たような事はできませんか?
1ファイルにしたくて
1ファイルにしたくて
320デフォルトの名無しさん
2018/01/13(土) 16:32:17.66ID:9pJBMU57 >>319
【最強CUI】PowerShell -Part 2 [無断転載禁止]©2ch.net
https://mevius.5ch.net/test/read.cgi/tech/1480109402/
【最強CUI】PowerShell -Part 2 [無断転載禁止]©2ch.net
https://mevius.5ch.net/test/read.cgi/tech/1480109402/
321デフォルトの名無しさん
2018/01/18(木) 18:41:19.43ID:lAsosfYH どうしても分からないので質問致します。
@echo off
@rem バッチファイルのディレクトリに移動
cd /d %~d0%~p0
set USR_INPUT_STR1=https://www.openrec.tv/live/fKGMub0cd6j
@rem 引数有無と引数名チェック
if "%USR_INPUT_STR1%"=="" goto ERROR
echo;%USR_INPUT_STR1%|findstr /R /C:"^http" /C:"openrec" >NUL||(echo "%1" を処理できません) && goto ERROR
@rem URLのアドレスとHTMLを環境変数へ設定
set ADDR=%USR_INPUT_STR1%
for %%I in (%USR_INPUT_STR1%) do set HTML=%%~nxI
@rem HTMLダウンロード
curl -L --max-redirs 10 -R -O %ADDR%
if not %ERRORLEVEL%==0 goto ERROR
@rem Shift-JISに文字コード変換
nkf -s --overwrite %HTML%
@echo off
@rem バッチファイルのディレクトリに移動
cd /d %~d0%~p0
set USR_INPUT_STR1=https://www.openrec.tv/live/fKGMub0cd6j
@rem 引数有無と引数名チェック
if "%USR_INPUT_STR1%"=="" goto ERROR
echo;%USR_INPUT_STR1%|findstr /R /C:"^http" /C:"openrec" >NUL||(echo "%1" を処理できません) && goto ERROR
@rem URLのアドレスとHTMLを環境変数へ設定
set ADDR=%USR_INPUT_STR1%
for %%I in (%USR_INPUT_STR1%) do set HTML=%%~nxI
@rem HTMLダウンロード
curl -L --max-redirs 10 -R -O %ADDR%
if not %ERRORLEVEL%==0 goto ERROR
@rem Shift-JISに文字コード変換
nkf -s --overwrite %HTML%
322デフォルトの名無しさん
2018/01/18(木) 18:41:39.14ID:lAsosfYH set TARGET=%TARGET:playlist=chunklist%
@rem ffmpegで動画吸い出し
ffmpeg -c copy "%TITLE%.ts" -i "%TARGET%"
@rem 最後にcurlで出力したソースファイルを削除
@rem for /R %%f in (*.) do del /Q "%%f"
pause
exit
:ERROR
echo 引数が無効のため処理できませんでした
pause
exit
このようなbatファイルを作ったのですが、どうしても最後に
sourcefile=https://station303.openrec.tv/live1/667d4bef5cb4af8db6b9198cab7b3148e957e477/chunklist.m3u8: Invalid argument
と無効な引数と言われてしまい動画の吸い出しが出来ません
完全に手詰まりなため、丸投げにはなってしまいますがご教授いただければと思います
よろしくお願いします
@rem ffmpegで動画吸い出し
ffmpeg -c copy "%TITLE%.ts" -i "%TARGET%"
@rem 最後にcurlで出力したソースファイルを削除
@rem for /R %%f in (*.) do del /Q "%%f"
pause
exit
:ERROR
echo 引数が無効のため処理できませんでした
pause
exit
このようなbatファイルを作ったのですが、どうしても最後に
sourcefile=https://station303.openrec.tv/live1/667d4bef5cb4af8db6b9198cab7b3148e957e477/chunklist.m3u8: Invalid argument
と無効な引数と言われてしまい動画の吸い出しが出来ません
完全に手詰まりなため、丸投げにはなってしまいますがご教授いただければと思います
よろしくお願いします
323デフォルトの名無しさん
2018/01/18(木) 19:11:35.69ID:r+5+UL4/324デフォルトの名無しさん
2018/01/18(木) 19:15:53.38ID:pm/tv2ru325デフォルトの名無しさん
2018/01/18(木) 19:34:30.33ID:pm/tv2ru 170のやつを適当に書き直したら動いたよ
for /F tokens^=2^ delims^=^" %%I in ('type %HTML%^|find /I "data-sourcefile"') do set "TARGET=%%~I"
for /F tokens^=2^ delims^=^" %%I in ('type %HTML%^|find /I "data-sourcefile"') do set "TARGET=%%~I"
326デフォルトの名無しさん
2018/01/18(木) 19:58:03.19ID:lAsosfYH >>322の最初が抜けてました・・・
@rem HTMLから文字列抽出
for /F "tokens=2 delims=<>| " %%I in ('type %HTML%^|findstr /R /C:"<title>"') do set TITLE=%%~I
for /F "tokens=* delims=data-file= " %%I in ('type %HTML%^|find /I "playlist.m3u8"') do set TARGET=%%~I
@rem HTMLから文字列抽出
for /F "tokens=2 delims=<>| " %%I in ('type %HTML%^|findstr /R /C:"<title>"') do set TITLE=%%~I
for /F "tokens=* delims=data-file= " %%I in ('type %HTML%^|find /I "playlist.m3u8"') do set TARGET=%%~I
327デフォルトの名無しさん
2018/01/18(木) 20:06:19.33ID:lAsosfYH328デフォルトの名無しさん
2018/01/29(月) 01:16:37.30ID:s5lQXlw3 echo abc 1>x1 1>x11 2>x2 3>x3
とするとDOS窓が応答しなくなった
x11 x2 x3 ファイルができるが x1ファイルはできない
とするとDOS窓が応答しなくなった
x11 x2 x3 ファイルができるが x1ファイルはできない
329デフォルトの名無しさん
2018/01/29(月) 14:21:26.57ID:e8Iu9+Yp compフォルダ配下にはa,b,c,…ってフォルダがあって、
そのフォルダの中にはzipとrarの圧縮ファイルがある
compopenってフォルダを作って、compの中のフォルダ階層は変えないで、compopenフォルダ内のaやb,cのフォルダにそれぞれすべて展開させたいときってどうするの?
zipやrar毎にフォルダ作って展開させたい
D:/
├comp/
│ └ a/
│ └ 111.zip
│ └ 222.zip
│ └ b/
│ └ xx1.rar
│ └ xx2.rar
│ └ c/
│ └ ttt.zip
│ └ rrr.rar
D:/
├compopen/
│ └ a/
│ └ 111/
│ └ 222/
│ └ b/
│ └ xx1/
│ └ xx2/
│ └ c/
│ └ ttt/
│ └ rrr/
そのフォルダの中にはzipとrarの圧縮ファイルがある
compopenってフォルダを作って、compの中のフォルダ階層は変えないで、compopenフォルダ内のaやb,cのフォルダにそれぞれすべて展開させたいときってどうするの?
zipやrar毎にフォルダ作って展開させたい
D:/
├comp/
│ └ a/
│ └ 111.zip
│ └ 222.zip
│ └ b/
│ └ xx1.rar
│ └ xx2.rar
│ └ c/
│ └ ttt.zip
│ └ rrr.rar
D:/
├compopen/
│ └ a/
│ └ 111/
│ └ 222/
│ └ b/
│ └ xx1/
│ └ xx2/
│ └ c/
│ └ ttt/
│ └ rrr/
330デフォルトの名無しさん
2018/01/29(月) 15:15:09.99ID:LZ9wDs2K331デフォルトの名無しさん
2018/01/29(月) 16:22:04.20ID:LZ9wDs2K332デフォルトの名無しさん
2018/01/30(火) 00:28:24.66ID:fZrZLUfh >>329
set "a=D:\comp" & set "b=D:\compopen"
setlocal enabledelayedexpansion
for /L %%i in (4,1,1000) do if "!a:~%%i,1!"=="" set "c=%%i" & goto x
:x
endlocal & set "c=%c%"
for /r "%a%" %%i in (*.zip *.rar) do set "d=%%~dpni" & set "e=%%~i" & call :y
goto :eof
:y
setlocal enabledelayedexpansion
7z x -o"!b!!d:~%c%!" "!e!"
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!"
334デフォルトの名無しさん
2018/01/30(火) 16:28:50.07ID:/nodnUUg >>329
使い回しあんまり考えなければ
-------- ここから
set path=C:\Program Files\7-Zip;%path%
cd /d D:\comp
for /f "usebackq delims=" %%i in (`dir /ad /s /b`) do (
echo,"%%~i"
set "tmppath0=%%~i"
call set "tmppath1=D:\compopen%%tmppath0:~7%%"
pushd "%%~i"
call 7z.exe x *.* -spe -bso0 -o"%%tmppath1%%\*" 2>>D:\compopen\errlog.txt
popd
)
-------- ここまで
マズいフォルダ(パス)名が無いことを前提に、もろもろ 7-Zip に良きにはからってもらう
使い回しあんまり考えなければ
-------- ここから
set path=C:\Program Files\7-Zip;%path%
cd /d D:\comp
for /f "usebackq delims=" %%i in (`dir /ad /s /b`) do (
echo,"%%~i"
set "tmppath0=%%~i"
call set "tmppath1=D:\compopen%%tmppath0:~7%%"
pushd "%%~i"
call 7z.exe x *.* -spe -bso0 -o"%%tmppath1%%\*" 2>>D:\compopen\errlog.txt
popd
)
-------- ここまで
マズいフォルダ(パス)名が無いことを前提に、もろもろ 7-Zip に良きにはからってもらう
335デフォルトの名無しさん
2018/01/30(火) 17:10:39.08ID:25OUwAYA >>332
>>334
ありがとうございます!
150GBくらいあるから、まだ展開し終えてないけど、
動き出しました。
実際のcompの中のa,b,c,・・・フォルダの中のzipやrarの名前は、
今のところ、下記みたいにフォルダの文字列含んでて、階層を上にしてもよかったかなと思いつつ、
例外も出てくるかもしれないので、このまま走らせてみます。
しっかり解凍しだしてフォルダ生成してくれてます。
D:/
├comp/
│ └ a/
│ └ a111.zip
│ └ a222.zip
│ └ b/
│ └ xx1b.rar
│ └ xx2b.rar
│ └ c/
│ └ cttt.zip
│ └ crrr.rar
>>334
ありがとうございます!
150GBくらいあるから、まだ展開し終えてないけど、
動き出しました。
実際のcompの中のa,b,c,・・・フォルダの中のzipやrarの名前は、
今のところ、下記みたいにフォルダの文字列含んでて、階層を上にしてもよかったかなと思いつつ、
例外も出てくるかもしれないので、このまま走らせてみます。
しっかり解凍しだしてフォルダ生成してくれてます。
D:/
├comp/
│ └ a/
│ └ a111.zip
│ └ a222.zip
│ └ b/
│ └ xx1b.rar
│ └ xx2b.rar
│ └ c/
│ └ cttt.zip
│ └ crrr.rar
336デフォルトの名無しさん
2018/01/31(水) 00:35:03.40ID:ah9e2u9N そもそも、そんな複雑な手続きには、PowerShell, Ruby などを使えw
337デフォルトの名無しさん
2018/02/03(土) 09:54:54.05ID:y+J4EMEq コマンドプロンプトの仕様についてだけど、遅延展開ってデフォでONじゃダメだったのかな?
あれ打ち込むのマンドクサ('A`)
あれ打ち込むのマンドクサ('A`)
338デフォルトの名無しさん
2018/02/05(月) 04:53:11.12ID:j3KUW6ez 1.test.exeという実行ファイルがある。
2.test.exeのフルパスは必要に応じて「test.exeをShift+右クリック」→「パスをコピー」して変数testExeに格納してもらう。
このフルパスには"D:\a bc\test.exe"のように空白が含まれることがあるとする。
3.FOR文でこのtest.exeを--helpオプションつきで実行し、結果からfindstr&setしたい。
---作成バッチ---
@echo off
cd /d %~dp0
set testExe="D:\a bc\test.exe"
FOR /F "tokens=3" %%a IN ('%testExe% --help ^| findstr "TargetStr"') DO (
set kekka=%%a
)
@echo %kekka%
pause
---実行結果---
'D:\a' は、内部コマンドまたは外部コマン ド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。
---解1---
testExeを設定する際、全体をダブルクォートで囲むのではなく、
空白を含むフォルダだけをダブルクォートで囲むようにする。
set testExe=D:\"a bc"\test.exe
解1はtestExeの設定が地味に面倒になってしまうので回避したいのですが、何か良い方法はないでしょうか?
2.test.exeのフルパスは必要に応じて「test.exeをShift+右クリック」→「パスをコピー」して変数testExeに格納してもらう。
このフルパスには"D:\a bc\test.exe"のように空白が含まれることがあるとする。
3.FOR文でこのtest.exeを--helpオプションつきで実行し、結果からfindstr&setしたい。
---作成バッチ---
@echo off
cd /d %~dp0
set testExe="D:\a bc\test.exe"
FOR /F "tokens=3" %%a IN ('%testExe% --help ^| findstr "TargetStr"') DO (
set kekka=%%a
)
@echo %kekka%
pause
---実行結果---
'D:\a' は、内部コマンドまたは外部コマン ド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。
---解1---
testExeを設定する際、全体をダブルクォートで囲むのではなく、
空白を含むフォルダだけをダブルクォートで囲むようにする。
set testExe=D:\"a bc"\test.exe
解1はtestExeの設定が地味に面倒になってしまうので回避したいのですが、何か良い方法はないでしょうか?
339デフォルトの名無しさん
2018/02/05(月) 05:04:15.80ID:j3KUW6ez >>338 追記
パスに空白を含む場合も問題ですが、
set testExe="D:\abc\test.exe"
のように空白を含まない場合には
ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っています。
と言われてエラーになるので、それも含めてなんとかしたいという点を書き忘れていました。
「FOR文でフルパスでコマンドを実行したい場合、どうすればよいのでしょう」というのが根本的な質問です。
パスに空白を含む場合も問題ですが、
set testExe="D:\abc\test.exe"
のように空白を含まない場合には
ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っています。
と言われてエラーになるので、それも含めてなんとかしたいという点を書き忘れていました。
「FOR文でフルパスでコマンドを実行したい場合、どうすればよいのでしょう」というのが根本的な質問です。
340デフォルトの名無しさん
2018/02/05(月) 05:55:25.28ID:j3KUW6ez すみません。>>338-339ですが、直接フルパスで実行するのではなくフォルダに移動して実行することで一応解決しました。
---
@echo off
cd /d %~dp0
set testExe="D:\a bc\test.exe"
FOR /F "tokens=1 delims=" %%I IN (%testExe%) DO (
IF "%%~nxI"=="test.exe" (
pushd "%%~dpI"
FOR /F "tokens=3" %%M IN ('.\%%~nxI --help ^| findstr "TargetStr"') DO (
set kekka=%%M
)
popd
)
)
@echo %kekka%
pause
---
問題点や、もっとスマートな方法があれば、教えていただけると助かります。
---
@echo off
cd /d %~dp0
set testExe="D:\a bc\test.exe"
FOR /F "tokens=1 delims=" %%I IN (%testExe%) DO (
IF "%%~nxI"=="test.exe" (
pushd "%%~dpI"
FOR /F "tokens=3" %%M IN ('.\%%~nxI --help ^| findstr "TargetStr"') DO (
set kekka=%%M
)
popd
)
)
@echo %kekka%
pause
---
問題点や、もっとスマートな方法があれば、教えていただけると助かります。
341デフォルトの名無しさん
2018/02/05(月) 08:19:13.38ID:ETXmgzVd >>338
@echo off
cd /d %~dp0
set testExe="D:\a bc\test.exe"
for /f "tokens=3" %%a in ('start /wait /b "" %testExe% --help ^| findstr "TargetStr"') DO (
set kekka=%%a
)
@echo %kekka%
pause
@echo off
cd /d %~dp0
set testExe="D:\a bc\test.exe"
for /f "tokens=3" %%a in ('start /wait /b "" %testExe% --help ^| findstr "TargetStr"') DO (
set kekka=%%a
)
@echo %kekka%
pause
342デフォルトの名無しさん
2018/02/05(月) 08:24:05.58ID:chwOG0ZE >>338
自分もこの問題に直面して同じ解決策とったんだけどこれって何が原因でこうなるの?
自分もこの問題に直面して同じ解決策とったんだけどこれって何が原因でこうなるの?
343デフォルトの名無しさん
2018/02/05(月) 10:47:37.64ID:ETXmgzVd こっちのがいいかも
前に似たようなネタがあったような
set testExe="D:\a bc\test.exe"
for /f "tokens=3" %%a in ('cmd /s /c "%testExe% --help | findstr "TargetStr""') do (
前に似たようなネタがあったような
set testExe="D:\a bc\test.exe"
for /f "tokens=3" %%a in ('cmd /s /c "%testExe% --help | findstr "TargetStr""') do (
344デフォルトの名無しさん
2018/02/05(月) 11:16:40.07ID:j3KUW6ez345デフォルトの名無しさん
2018/02/05(月) 11:23:08.71ID:ETXmgzVd346デフォルトの名無しさん
2018/02/05(月) 11:37:48.40ID:j3KUW6ez347デフォルトの名無しさん
2018/02/05(月) 13:08:35.91ID:Emu9UBTE 括弧の中の最初と最後の引用符が削除される?
348デフォルトの名無しさん
2018/02/05(月) 14:11:13.29ID:ETXmgzVd やっと思い出したぞ裏技w
前後の端にダミーの二重引用符 ^" を付けるんだった
>>347 のおかげで思い出したぜ
set testExe="D:\a bc\test.exe"
for /f "tokens=3" %%a in ('^"%testexe% --help ^| findstr "targetstr"^"') do (
前後の端にダミーの二重引用符 ^" を付けるんだった
>>347 のおかげで思い出したぜ
set testExe="D:\a bc\test.exe"
for /f "tokens=3" %%a in ('^"%testexe% --help ^| findstr "targetstr"^"') do (
349デフォルトの名無しさん
2018/02/06(火) 13:18:25.70ID:m2OYikdE350デフォルトの名無しさん
2018/02/07(水) 10:59:47.18ID:fDqCQtuz VBでプログラムを作っているのですが、行き詰ってしまったので質問させていただきます。
バッチでiniファイルを読み込み、iniから取得したデータを格納した変数をVBのソース内で使いたいのですが可能ですか?
exe形式での納品となるのでiniファイルの読み込みはどうしてもバッチ内で行いたいのです。
ちなみに処理の流れとしては、iniファイル読み込み→exeファイル実行となっています。
どなたかご教授ください。よろしくお願いいたします。
バッチでiniファイルを読み込み、iniから取得したデータを格納した変数をVBのソース内で使いたいのですが可能ですか?
exe形式での納品となるのでiniファイルの読み込みはどうしてもバッチ内で行いたいのです。
ちなみに処理の流れとしては、iniファイル読み込み→exeファイル実行となっています。
どなたかご教授ください。よろしくお願いいたします。
351デフォルトの名無しさん
2018/02/07(水) 11:12:08.68ID:fDqCQtuz 申し訳ございません。
バッチでiniファイルを読み込み、iniから取得したデータを
格納した変数をVBのソース内で使いたいのですが可能ですか? ×
VBのソース内の変数に格納したいのですが可能ですか? ○
でした。
バッチでiniファイルを読み込み、iniから取得したデータを
格納した変数をVBのソース内で使いたいのですが可能ですか? ×
VBのソース内の変数に格納したいのですが可能ですか? ○
でした。
352デフォルトの名無しさん
2018/02/07(水) 11:43:25.21ID:LQaGrglb バッチで、ini ファイルを読み込み、必要な値を取り出して、
それらを引数にして、exe を起動する
そして、exe 内では、引数から読み込んだ値を使う
それらを引数にして、exe を起動する
そして、exe 内では、引数から読み込んだ値を使う
353デフォルトの名無しさん
2018/02/07(水) 12:00:38.62ID:fDqCQtuz354デフォルトの名無しさん
2018/02/07(水) 16:46:31.34ID:EyPJd6fI バッチだと for文を使います
複雑なことをするのであればVBで直接読み込む方法もあります
複雑なことをするのであればVBで直接読み込む方法もあります
355デフォルトの名無しさん
2018/02/10(土) 12:18:28.89ID:/lSv2IRR バッチでiniファイルなんて読み込めるの?
VBとかからGetPrivateProfileStringとかのAPIを使うんじゃないの?
まあ力技で出来ないことはないんだろうけど自分が知らないだけで一般的なやり方というのがあるのかな?
VBとかからGetPrivateProfileStringとかのAPIを使うんじゃないの?
まあ力技で出来ないことはないんだろうけど自分が知らないだけで一般的なやり方というのがあるのかな?
356デフォルトの名無しさん
2018/02/10(土) 15:32:33.27ID:K6TfvilX ググればふつうに出てくるようだが。(内容まではちゃんと見てない)
357デフォルトの名無しさん
2018/02/10(土) 16:29:19.90ID:Sj+J5yD3358デフォルトの名無しさん
2018/02/11(日) 19:16:43.96ID:l1W9SMIH バッチファイルでファイル操作って一見ちゃんと動いてるように見えて穴だらけって場合が多いからやりたくないな
wshで実装したりps辺りで既存のAPI呼び出す方がいい
wshで実装したりps辺りで既存のAPI呼び出す方がいい
359デフォルトの名無しさん
2018/02/11(日) 19:44:19.46ID:+WWL4Di4 batで設定呼び出したい時はiniじゃなくてsetting.batに変数を直接記述してcallしてるわ
このやり方も良いやり方なのかどうか分からんけど
このやり方も良いやり方なのかどうか分からんけど
360デフォルトの名無しさん
2018/02/12(月) 12:02:40.25ID:OYWjTvif http://ascii.jp/elem/000/001/630/1630041/
Windows 10 RS4に追加された「curl」と「tar」コマンド
って curl と tar が追加されるんだ
PowerShell にも curl コマンド(エイリアス)があってややこしさが増すな
でも、標準で使えるようになるのはバッチファイル使ってる身とすれば
嬉しくはある
Windows 10 RS4に追加された「curl」と「tar」コマンド
って curl と tar が追加されるんだ
PowerShell にも curl コマンド(エイリアス)があってややこしさが増すな
でも、標準で使えるようになるのはバッチファイル使ってる身とすれば
嬉しくはある
361デフォルトの名無しさん
2018/02/12(月) 15:53:42.90ID:BbO5lIMB もうRS4か
RS3の不具合なんとかしてくれよ
RS3の不具合なんとかしてくれよ
362デフォルトの名無しさん
2018/02/18(日) 16:07:03.48ID:OqSvNe2j ファイル圧縮バッチを
hta の画面にドロップするだけで実行するやつ作った
https://medaka.5ch.net/test/read.cgi/csaloon/1518353191/843-846
ファイルをバッチファイルにドロップして引数受け取りは普通にあるけど
ファイル名の一部を文字列としてドロップしても起動されないのでこういう方法を取った。
hta の画面にドロップするだけで実行するやつ作った
https://medaka.5ch.net/test/read.cgi/csaloon/1518353191/843-846
ファイルをバッチファイルにドロップして引数受け取りは普通にあるけど
ファイル名の一部を文字列としてドロップしても起動されないのでこういう方法を取った。
363デフォルトの名無しさん
2018/02/18(日) 16:25:37.39ID:ZqWPhgUg >>360
Windows10 なら、WSL で、MS Store から、Ubuntu 16.04 LTS をダウンロードすれば、
curl, tar も入っている
他のLinux のコマンドも、一杯ある
Windows10 なら、WSL で、MS Store から、Ubuntu 16.04 LTS をダウンロードすれば、
curl, tar も入っている
他のLinux のコマンドも、一杯ある
364デフォルトの名無しさん
2018/02/18(日) 19:16:35.61ID:yvQzNzLN >>363
それはバッチから使えるの?
それはバッチから使えるの?
365デフォルトの名無しさん
2018/02/18(日) 19:20:27.56ID:F2O3xW/S 普通に使える
ubuntu run curl --help
ubuntu run curl --help
366デフォルトの名無しさん
2018/02/19(月) 04:53:30.17ID:xIEc0S27 Linux(Ubuntu)側のbash、Windows側のPowerShell・コマンドプロンプトから、
相互のアプリ・コマンドを実行できる
相互のパイプも、つなげられる
つまり、Linux側のbashは、Windows10 の1つのアプリになっている
相互のアプリ・コマンドを実行できる
相互のパイプも、つなげられる
つまり、Linux側のbashは、Windows10 の1つのアプリになっている
367デフォルトの名無しさん
2018/02/19(月) 08:14:36.88ID:2cNNs3G6 > Ubuntu 16.04 LTS をダウンロードすれば、
この手の前提条件が無いことがバッチのメリットなのに...
この手の前提条件が無いことがバッチのメリットなのに...
368デフォルトの名無しさん
2018/02/19(月) 22:58:00.92ID:oh22XJYs369デフォルトの名無しさん
2018/02/19(月) 23:41:31.81ID:9tX9GnHd なんでこの人「運用」とか言い出してんの?
370デフォルトの名無しさん
2018/02/19(月) 23:44:41.90ID:uhfYTKrf >>368
WSLはウェブサービス開発で使って、
実際にそのウェブサービスを動かす(=運用)するのは
ネイティブなLinuxの上だぞ。例えばAzure上のLinuxとか
運用に使ってくれるなっていうのは、WSL上でウェブサービスを動かして
実際に不特定の人にサービスを提供するなっていう意味だ
WSLはウェブサービス開発で使って、
実際にそのウェブサービスを動かす(=運用)するのは
ネイティブなLinuxの上だぞ。例えばAzure上のLinuxとか
運用に使ってくれるなっていうのは、WSL上でウェブサービスを動かして
実際に不特定の人にサービスを提供するなっていう意味だ
371デフォルトの名無しさん
2018/02/20(火) 00:06:58.45ID:amqSspGZ WSL 上で、Webサーバーとかを常時接続させて運用できない
まあ最初から、自分のデスクトップPC を外部につなげて、
そんなサービスをする奴は、居ないだろ
まあ最初から、自分のデスクトップPC を外部につなげて、
そんなサービスをする奴は、居ないだろ
372デフォルトの名無しさん
2018/02/20(火) 00:08:38.09ID:ZtM0s1po バッチで使うのは運用ではないと?
373デフォルトの名無しさん
2018/02/20(火) 00:13:22.58ID:XC4KsyV/374デフォルトの名無しさん
2018/02/20(火) 00:40:00.47ID:wdwe47Ke375デフォルトの名無しさん
2018/02/20(火) 00:43:54.06ID:wdwe47Ke うん、ちゃんとFAQに書いてあったね
https://docs.microsoft.com/en-us/windows/wsl/faq
> Also, even though you will be able to run many popular server applications (e.g. Redis),
> we do not recommend WSL for server scenarios ? Microsoft offers a
> variety of solutions for running production Ubuntu workloads in Azure, Hyper-V, and Docker.
サーバーアプリケーションを実行できるが、サーバーとしてのシナリオは推奨してないと
https://docs.microsoft.com/en-us/windows/wsl/faq
> Also, even though you will be able to run many popular server applications (e.g. Redis),
> we do not recommend WSL for server scenarios ? Microsoft offers a
> variety of solutions for running production Ubuntu workloads in Azure, Hyper-V, and Docker.
サーバーアプリケーションを実行できるが、サーバーとしてのシナリオは推奨してないと
376デフォルトの名無しさん
2018/02/20(火) 00:46:37.66ID:wdwe47Ke もう一つ、誰のためのものですか?という質問には
> 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ツールや言語を使いたい人のためのものと
> 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ツールや言語を使いたい人のためのものと
377デフォルトの名無しさん
2018/02/20(火) 00:57:48.56ID:amqSspGZ Windows のコマンドプロンプトから、
wsl bash -c "echo 'hello'"
出力結果 : hello
これぐらいのLinux の起動・実行・終了は、1秒!
定時処理ぐらい楽勝
サーバーみたいに常時実行しなければ大丈夫
wsl bash -c "echo 'hello'"
出力結果 : hello
これぐらいのLinux の起動・実行・終了は、1秒!
定時処理ぐらい楽勝
サーバーみたいに常時実行しなければ大丈夫
378デフォルトの名無しさん
2018/02/20(火) 01:27:38.14ID:wdwe47Ke >>377
wsl.exeを使うなら bash -c はいらないぞ
wsl echo hello でよい
wsl echo --help と wsl /bin/echo --help の実行結果が違うから
wslの中ではbash上で動いているっぽい
wsl ps axfu やってもbashいないんだけどな
まあ詳しい人に聞けば、そこら辺の動きは知ってるだろう。
あと、別にLinuxは起動してるわけじゃないのでLinuxの起動と書かれると違和感がある。
WSLはLinuxカーネルを模したサブシステム
wsl.exeを使うなら bash -c はいらないぞ
wsl echo hello でよい
wsl echo --help と wsl /bin/echo --help の実行結果が違うから
wslの中ではbash上で動いているっぽい
wsl ps axfu やってもbashいないんだけどな
まあ詳しい人に聞けば、そこら辺の動きは知ってるだろう。
あと、別にLinuxは起動してるわけじゃないのでLinuxの起動と書かれると違和感がある。
WSLはLinuxカーネルを模したサブシステム
379377
2018/02/20(火) 01:41:53.13ID:amqSspGZ Windows のコマンドプロンプトで、
>where wsl
C:\Windows\System32\wsl.exe
>where ubuntu
C:\Users\ユーザー名\AppData\Local\Microsoft\WindowsApps\ubuntu.exe
wsl, ubuntu(Linux), bash の関係がよくわからない
漏れのノートPC は、i3、メモリ8GB、SSD だけど、
Windows10 の単なるアプリだから、起動・実行・終了で、1秒ほど
WSLは、もう正規版だし、単なるアプリとして使う分には、問題ないだろ
>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は、もう正規版だし、単なるアプリとして使う分には、問題ないだろ
380377
2018/02/20(火) 01:44:26.24ID:amqSspGZ 書き忘れた
Windows のコマンドプロンプトで、
>where bash
C:\Windows\System32\bash.exe
Windows のコマンドプロンプトで、
>where bash
C:\Windows\System32\bash.exe
381377
2018/02/20(火) 01:53:46.64ID:amqSspGZ Windows のコマンドプロンプトで、
>wsl echo hello
>ubuntu -c "echo hello"
>bash -c "echo hello"
これらは皆、hello が出力されるけど、書き方が異なる
wsl では、echo がサブコマンドになっているのかも
>wsl echo hello
>ubuntu -c "echo hello"
>bash -c "echo hello"
これらは皆、hello が出力されるけど、書き方が異なる
wsl では、echo がサブコマンドになっているのかも
382デフォルトの名無しさん
2018/02/20(火) 01:58:14.32ID:wdwe47Ke >>379
俺もちゃんと調べたわけじゃないけど、
開発の歴史からすると、
最初はbash on ubuntu on windowsという扱いで
bash.exeでUbuntu上のbashが起動できる(おまけでLinuxコマンドも使えるよ!)という扱いだった。
このbashが起動できるという仕組みを提供しているものの名前がWindows Subsystem for Linuxだったわけだが
開発が継続しLinuxカーネルとの互換性があがってもうbashだけが起動するもんじゃないよねってことで
Windows Subsystem for Linuxの略であるwslと呼ばれるようになり。
wsl.exeができた(おそらくbash -c "コマンド" と面倒な書き方をしなくて良いラッパー)
それと前後して、ubuntuだけじゃなくopenSUSEやFedoraも動くよ!(いやFedoraまだリリースされてないんだが)
ということになり、bash.exeやwsl.exeで起動するのはどっちのディストリよ?
ってことでそれを切り替えることができるwslconfig.exeができた。
また直接wslconfig.exeの設定によらず、ubuntuやopensuseを直接起動するための
ubuntu.exe やopensuse-42.exe が出来た。
こんな所だと思う
俺もちゃんと調べたわけじゃないけど、
開発の歴史からすると、
最初はbash on ubuntu on windowsという扱いで
bash.exeでUbuntu上のbashが起動できる(おまけでLinuxコマンドも使えるよ!)という扱いだった。
このbashが起動できるという仕組みを提供しているものの名前がWindows Subsystem for Linuxだったわけだが
開発が継続しLinuxカーネルとの互換性があがってもうbashだけが起動するもんじゃないよねってことで
Windows Subsystem for Linuxの略であるwslと呼ばれるようになり。
wsl.exeができた(おそらくbash -c "コマンド" と面倒な書き方をしなくて良いラッパー)
それと前後して、ubuntuだけじゃなくopenSUSEやFedoraも動くよ!(いやFedoraまだリリースされてないんだが)
ということになり、bash.exeやwsl.exeで起動するのはどっちのディストリよ?
ってことでそれを切り替えることができるwslconfig.exeができた。
また直接wslconfig.exeの設定によらず、ubuntuやopensuseを直接起動するための
ubuntu.exe やopensuse-42.exe が出来た。
こんな所だと思う
383デフォルトの名無しさん
2018/02/20(火) 02:00:13.61ID:ZtM0s1po なんでバッチスレでパソコン博士がWSLでイキってるの?
384デフォルトの名無しさん
2018/02/20(火) 02:01:02.04ID:wdwe47Ke >>381
ubuntu /?をするとわかるが、
ubuntu run echo helloが正しい
ubuntu.exeもwsl.exeもbash.exeもパラメータの扱いが違うだけで
ディストリ上のbashを実行していることは確かなようだ
ubuntu /?をするとわかるが、
ubuntu run echo helloが正しい
ubuntu.exeもwsl.exeもbash.exeもパラメータの扱いが違うだけで
ディストリ上のbashを実行していることは確かなようだ
385デフォルトの名無しさん
2018/02/20(火) 02:01:43.71ID:wdwe47Ke386デフォルトの名無しさん
2018/02/20(火) 02:04:18.90ID:wdwe47Ke ubuntuは
Usage:
<no args>
- Launches the distro's default behavior. By default, this launches your default shell.
と書いてあるから、bashじゃなくてデフォルトシェルが呼び出されるのかも。
うーん、どれを使うのが良い(汎用的)なのだろう?
Usage:
<no args>
- Launches the distro's default behavior. By default, this launches your default shell.
と書いてあるから、bashじゃなくてデフォルトシェルが呼び出されるのかも。
うーん、どれを使うのが良い(汎用的)なのだろう?
387377
2018/02/20(火) 02:51:43.01ID:amqSspGZ wsl(Linux のbash)・PowerShell・コマンドプロンプトの3つが、
パイプでもつなげられるし、シームレスになってきて、CUI が統合されてきているから、
個別の話よりも、3つのCUI をパイプでどうつなげるかの方に、
話の焦点が移ってきている
パイプでもつなげられるし、シームレスになってきて、CUI が統合されてきているから、
個別の話よりも、3つのCUI をパイプでどうつなげるかの方に、
話の焦点が移ってきている
388377
2018/02/20(火) 03:10:41.01ID:amqSspGZ bash は、C:\Windows\System32\bash.exe を起動する
ubuntu は、bash, zsh など、自分がデフォルトに設定した、シェルを起動する。
環境変数、$SHELL
>wsl echo $SHELL
/bin/bash
wsl コマンドが、ubuntu, open suse など、
自分がデフォルトに設定した、Linux を起動
>wslconfig /list
Windows Subsystem for Linux ディストリビューション:
Ubuntu (既定)
推測で書いたけど、普段は、wsl を使うと良いかも
ubuntu は、bash, zsh など、自分がデフォルトに設定した、シェルを起動する。
環境変数、$SHELL
>wsl echo $SHELL
/bin/bash
wsl コマンドが、ubuntu, open suse など、
自分がデフォルトに設定した、Linux を起動
>wslconfig /list
Windows Subsystem for Linux ディストリビューション:
Ubuntu (既定)
推測で書いたけど、普段は、wsl を使うと良いかも
389デフォルトの名無しさん
2018/02/20(火) 06:46:25.63ID:+0IlbXev390デフォルトの名無しさん
2018/02/20(火) 12:42:35.46ID:ZtM0s1po391デフォルトの名無しさん
2018/02/20(火) 19:54:28.42ID:+0IlbXev へへーん、ぼくなんてまえからもってるもんねー
それはすごいねー w
それはすごいねー w
392デフォルトの名無しさん
2018/02/20(火) 21:48:42.53ID:BI5N21qv さすがにスレチだからもうやめとけと思うけど、WSLについて少し調べてみようと思うきっかけにはなったわ。
393デフォルトの名無しさん
2018/02/20(火) 22:56:06.68ID:wdwe47Ke パソコン先生に恨みでもあるのかな?
そんな話をしてもバッチファイルを書く上で
何の意味もないと思うんだが、話をしたいのだろうね
そんな話をしてもバッチファイルを書く上で
何の意味もないと思うんだが、話をしたいのだろうね
394デフォルトの名無しさん
2018/02/20(火) 23:00:35.05ID:wdwe47Ke >>390
Bash on Ubuntu on Windowsは、早く使いたかったんで
Inside Previewに変えてまで使ったよ。
GUIアプリには対応していないって書いてあったが仕組み上
GUIアプリ動くんじゃね?ってそこの頃はまだ情報が少なかったけど
実際に自分で試してxeyes は動いたーって2ちゃんねるに書いた記憶がある
Bash on Ubuntu on Windowsは、早く使いたかったんで
Inside Previewに変えてまで使ったよ。
GUIアプリには対応していないって書いてあったが仕組み上
GUIアプリ動くんじゃね?ってそこの頃はまだ情報が少なかったけど
実際に自分で試してxeyes は動いたーって2ちゃんねるに書いた記憶がある
395デフォルトの名無しさん
2018/02/20(火) 23:11:12.21ID:BI5N21qv 自分語りとか余計なことをダラダラ書き連ねるから嫌われるんだよ。
396デフォルトの名無しさん
2018/02/20(火) 23:20:45.61ID:wdwe47Ke 嫌うのは相手の問題だからどうしようもない
俺に対する勘違いは、俺の問題だから解決する必要がある
俺に対する勘違いは、俺の問題だから解決する必要がある
397デフォルトの名無しさん
2018/02/21(水) 02:19:50.48ID:PXpce9sQ パソコン先生、怒りの連投きたー
398デフォルトの名無しさん
2018/02/21(水) 02:50:21.44ID:1KGQWp4x 連続してね〜じゃんw
399デフォルトの名無しさん
2018/02/25(日) 16:07:21.04ID:97AlcoLv 例えば「aaa」という名前のODBCの設定は以下のコマンド
reg query HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\aaa
を実行すると
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\aaa
Driver REG_SZ C:\WINDOWS\system32\SQLSRV32.dll
Server REG_SZ aaa
Database REG_SZ aaaDB
LastUser REG_SZ *****
Trusted_Connection REG_SZ Yes
のように表示できますが
この設定の接続先データベース(上記ではaaaDB)をコマンドで変更することは出来るのでしょうか?
reg query HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\aaa
を実行すると
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\aaa
Driver REG_SZ C:\WINDOWS\system32\SQLSRV32.dll
Server REG_SZ aaa
Database REG_SZ aaaDB
LastUser REG_SZ *****
Trusted_Connection REG_SZ Yes
のように表示できますが
この設定の接続先データベース(上記ではaaaDB)をコマンドで変更することは出来るのでしょうか?
400デフォルトの名無しさん
2018/02/25(日) 17:44:24.52ID:f0GbsyKa reg add HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\aaa /v Server /t REG_SZ /d bbbDB
とかでだめなん
とかでだめなん
401399
2018/02/25(日) 19:41:52.11ID:97AlcoLv402デフォルトの名無しさん
2018/02/28(水) 10:04:11.85ID:xTKxXp1v windows10 のコマンドプロンプトの、文字色を変えるエスケープシーケンスで、
prompt ^[[1;36m[$d$s$t$h$h$h] ^[[1;33m%USERNAME% ^[[37m$p$_$g$s
prompt $e[1;36m[$d$s$t$h$h$h] $e[1;33m%COMPUTERNAME% $e[37m$p$_$g$s
echo ^[[1;36mバッチファイル^[[37m
は動作しますが
echo $e[1;36mスクリプト$e[37m
だと駄目でず。
( ^[ は、CTRL+[ で入力する制御文字(\x1B))
echo で有効な「$e」の様な入力方法は有りますか?
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」の様な入力方法は有りますか?
404デフォルトの名無しさん
2018/03/16(金) 22:05:15.90ID:HEHaQcsS バッチファイルで
空行を除く最終行にhogeって文字がなかったら追加して改行
-- hogeとかになってたら削除してhoge追記して改行
って事をやりたいんですけどどうやったらできるかおせーてください
空行を除く最終行にhogeって文字がなかったら追加して改行
-- hogeとかになってたら削除してhoge追記して改行
って事をやりたいんですけどどうやったらできるかおせーてください
405デフォルトの名無しさん
2018/03/17(土) 05:37:29.93ID:nxO/ldT7 Ruby で作った
require 'stringio'
ary = []
File.open(ARGV[0]) do |io|
text = io.read
text.rstrip! # 末尾の連続した空白を、すべて削除する
sio = StringIO.new text
ary = sio.readlines # 全行を配列に読み込む
if ary[-1] == '-- hoge'
ary[-1] = "hoge\n"
elsif /hoge/ !~ ary[-1] # hoge を含まない
ary[-1] += "hoge\n"
else
return
end
end
# 一旦ファイルを削除してから、書き込む
File.open(ARGV[0], 'w') { |io| io.write ary.join }
require 'stringio'
ary = []
File.open(ARGV[0]) do |io|
text = io.read
text.rstrip! # 末尾の連続した空白を、すべて削除する
sio = StringIO.new text
ary = sio.readlines # 全行を配列に読み込む
if ary[-1] == '-- hoge'
ary[-1] = "hoge\n"
elsif /hoge/ !~ ary[-1] # hoge を含まない
ary[-1] += "hoge\n"
else
return
end
end
# 一旦ファイルを削除してから、書き込む
File.open(ARGV[0], 'w') { |io| io.write ary.join }
406デフォルトの名無しさん
2018/03/17(土) 12:51:31.78ID:HNxDhnRb >>405
あのーバッチって聞いてるのにrubyのスクリプト出されても困るんですけど
あのーバッチって聞いてるのにrubyのスクリプト出されても困るんですけど
407デフォルトの名無しさん
2018/03/17(土) 13:17:48.14ID:FI/uI0vX やらなくても言い余計なことをして場を混乱させる人って必ずいるよね
408デフォルトの名無しさん
2018/03/17(土) 13:29:47.44ID:Y0/A+N6A ルビ厨の相手するなよ...
409デフォルトの名無しさん
2018/03/17(土) 13:33:32.46ID:T/uji2Bj ロジック真似すればいいだけじゃん
作ってくれじゃなくて教えてくれなんだから
Lispで回答されて読めないのは理解できるが
上のRubyくらいなら何の問題もないだろ
作ってくれじゃなくて教えてくれなんだから
Lispで回答されて読めないのは理解できるが
上のRubyくらいなら何の問題もないだろ
410デフォルトの名無しさん
2018/03/17(土) 15:03:38.07ID:RY7g5/8I 聞かれてるのはバッチでの実現手段なのにロジックとか言い出してどうすんだよ
411デフォルトの名無しさん
2018/03/17(土) 15:06:43.59ID:9hc/1qQU 文字列の比較も削除も面倒だから
バッチではやらないほうがいい
バッチではやらないほうがいい
412デフォルトの名無しさん
2018/03/17(土) 17:30:52.69ID:4x6FsbbS vbscript版作ったけどバッチ限定なら貼らなくいい?
413デフォルトの名無しさん
2018/03/17(土) 18:08:03.98ID:RY7g5/8I >>404
一応無理矢理ここまで作ってみたけど、ファイルの中身や指定文字列に特殊文字が入ってると
容赦なくコケるという地獄仕様のままなんで、限定的にしか使えないと思う。
有意な最終行の内容にあわせて結果ファイルを出力するバッチ
https://pastebin.com/mh9BZDCv
コケないようにやるにはどうすればいいのかな・・・。誰かうまいやり方があれば教えてくれ。
一応無理矢理ここまで作ってみたけど、ファイルの中身や指定文字列に特殊文字が入ってると
容赦なくコケるという地獄仕様のままなんで、限定的にしか使えないと思う。
有意な最終行の内容にあわせて結果ファイルを出力するバッチ
https://pastebin.com/mh9BZDCv
コケないようにやるにはどうすればいいのかな・・・。誰かうまいやり方があれば教えてくれ。
414デフォルトの名無しさん
2018/03/17(土) 18:14:53.08ID:4x6FsbbS 読んでてなんか泣けてきた
415デフォルトの名無しさん
2018/03/17(土) 18:22:19.25ID:RY7g5/8I416デフォルトの名無しさん
2018/03/17(土) 18:29:59.15ID:71uTBaAx417デフォルトの名無しさん
2018/03/17(土) 18:38:49.28ID:RY7g5/8I 「バッチ JScript」とかでググればいいんじゃないか
418デフォルトの名無しさん
2018/03/17(土) 19:54:28.64ID:HNxDhnRb >>413
ありがとうございますとても参考になりました
ありがとうございますとても参考になりました
419デフォルトの名無しさん
2018/03/17(土) 21:16:57.69ID:Eknm4yJC @echo off
set n0=0
set n1=0
set n2=0
set file="xxx.txt"
set newfile="new.txt"
set word=xxx
type nul>new.txt
for /f "tokens=1* delims=:" %%i in ('findstr /n "." %file%') do set n0=%%i
for /f "tokens=1* delims=:" %%i in ('findstr /n /c:"%word%" %file%') do set n1=%%i
for /f "tokens=1* delims=:" %%i in ('findstr /n /c:"-- %word%" %file%') do set n2=%%i
if %n0% equ %n1% if %n1% neq %n2% goto :eof
if %n0% equ %n2% (call :del-line %n2%) else (copy /y %file% %newfile%>nul)
call :add-line
move /y %newfile% %file%>nul
goto :eof
:del-line
for /f "tokens=1* delims=:" %%i in ('findstr /n ".*" %file%') do if %%i neq %1 echo;%%j>>%newfile%
goto :eof
:add-line
echo;%word%>>%newfile%
goto :eof
set n0=0
set n1=0
set n2=0
set file="xxx.txt"
set newfile="new.txt"
set word=xxx
type nul>new.txt
for /f "tokens=1* delims=:" %%i in ('findstr /n "." %file%') do set n0=%%i
for /f "tokens=1* delims=:" %%i in ('findstr /n /c:"%word%" %file%') do set n1=%%i
for /f "tokens=1* delims=:" %%i in ('findstr /n /c:"-- %word%" %file%') do set n2=%%i
if %n0% equ %n1% if %n1% neq %n2% goto :eof
if %n0% equ %n2% (call :del-line %n2%) else (copy /y %file% %newfile%>nul)
call :add-line
move /y %newfile% %file%>nul
goto :eof
:del-line
for /f "tokens=1* delims=:" %%i in ('findstr /n ".*" %file%') do if %%i neq %1 echo;%%j>>%newfile%
goto :eof
:add-line
echo;%word%>>%newfile%
goto :eof
420デフォルトの名無しさん
2018/03/18(日) 00:33:29.96ID:Sr1iY1Ai ループ回しすぎじゃね?
小さいファイルならいいだろうけど
でかいログファイルとかだと辛いかも
小さいファイルならいいだろうけど
でかいログファイルとかだと辛いかも
421デフォルトの名無しさん
2018/03/18(日) 01:44:49.36ID:WKBkcipr バッチのfor /f 〜 in (ファイル)って1行ずつシーケンシャルにメモリに読んでるって考えていいのかな?
422デフォルトの名無しさん
2018/03/18(日) 04:17:33.81ID:Cc3+LG/u >>420
wordってのがどれだけの頻度で出現するかで違ってくる
もし殆ど書かれてないのなら、最後が
--hogeならforループはほぼ2回分(wordが各行当たり前にあるのなら4回分)
hogeやなしならforループはほぼ1回分(wordが各行当たり前にあるのなら3回分)
wordと--wordの検索は一緒のループでできそうだけど
あと、データ中に、&|^%"'\や%date%を入れてみたけど問題ないみたいだ(win7)
wordってのがどれだけの頻度で出現するかで違ってくる
もし殆ど書かれてないのなら、最後が
--hogeならforループはほぼ2回分(wordが各行当たり前にあるのなら4回分)
hogeやなしならforループはほぼ1回分(wordが各行当たり前にあるのなら3回分)
wordと--wordの検索は一緒のループでできそうだけど
あと、データ中に、&|^%"'\や%date%を入れてみたけど問題ないみたいだ(win7)
423デフォルトの名無しさん
2018/03/18(日) 04:26:44.33ID:Cc3+LG/u いや各行にwordと--wordのどっちかしか無いとするなら--wordの場合で最大でも3回分か
424デフォルトの名無しさん
2018/03/18(日) 05:31:06.94ID:5/8yH4g6 set /a a0=0,b=0,c=1,e=1
for /f "delims=: tokens=1*" %%i in ('findstr /n .* in.txt') do (
set "a%%i=%%j"
if defined a%%i set /a b=%%i
set /a c=%%i+1
)
setlocal enabledelayedexpansion
if not "!a%b%!"=="!a%b%:hoge=!" set /a c=b
set "a%c%=hoge"
del out.txt
:y
echo.!a%e%!>>out.txt
set /a e+=1 & if !e! leq !c! goto y
for /f "delims=: tokens=1*" %%i in ('findstr /n .* in.txt') do (
set "a%%i=%%j"
if defined a%%i set /a b=%%i
set /a c=%%i+1
)
setlocal enabledelayedexpansion
if not "!a%b%!"=="!a%b%:hoge=!" set /a c=b
set "a%c%=hoge"
del out.txt
:y
echo.!a%e%!>>out.txt
set /a e+=1 & if !e! leq !c! goto y
425デフォルトの名無しさん
2018/03/18(日) 07:42:25.76ID:Cc3+LG/u426デフォルトの名無しさん
2018/03/18(日) 16:56:47.62ID:93ta1lhd Oh...ワタシ findstr /n ノキョドウカンチガイシテタネ...
427デフォルトの名無しさん
2018/03/18(日) 20:22:40.18ID:93ta1lhd428デフォルトの名無しさん
2018/03/18(日) 22:13:27.07ID:WKBkcipr そういう後から判明するバグが紛れ込むからバッチで文字列処理は嫌なんだよな
429デフォルトの名無しさん
2018/03/18(日) 22:14:36.65ID:5/8yH4g6430デフォルトの名無しさん
2018/03/18(日) 22:17:56.90ID:5/8yH4g6 /? は >>419 の方がダメだった
431デフォルトの名無しさん
2018/03/18(日) 22:45:10.52ID:WKBkcipr 俺が仮組みしてみたやつもforの変な仕様で空行削除されてた
バッチだけで手軽には無理だな
素直に適当なスクリプト使った方がいい
バッチだけで手軽には無理だな
素直に適当なスクリプト使った方がいい
432デフォルトの名無しさん
2018/03/18(日) 22:59:27.55ID:Cc3+LG/u433デフォルトの名無しさん
2018/03/18(日) 23:05:58.69ID:Sr1iY1Ai434デフォルトの名無しさん
2018/03/18(日) 23:09:22.00ID:WKBkcipr435デフォルトの名無しさん
2018/03/19(月) 02:29:30.41ID:VE4HgUIn ×デミリタ
○デリミタ
○デリミタ
436デフォルトの名無しさん
2018/03/19(月) 06:32:04.04ID:UCUeI8NE UTF8扱えない時点で限界を感じる
437デフォルトの名無しさん
2018/03/19(月) 09:11:01.79ID:cAxnz/N1 set /a a=0,b=0,c=0,d=1 & del out.txt 2> nul
for /f "delims=:" %%i in ('findstr /n . in.txt') do set /a a=%%i
for /f "delims=:" %%i in ('findstr /n hoge in.txt') do set /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
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
438デフォルトの名無しさん
2018/03/20(火) 06:19:09.67ID:5rDh/omp439デフォルトの名無しさん
2018/03/20(火) 08:03:38.21ID:BuzmWDFp >>438
終端に改行があろうがなかろうが、echoで出力すれば改行は付加されるよ
あとは参考になるかわからんが
set LF=^
setlocal EnableDelayedExpansion
findstr /n .* in.txt
findstr /n $ in.txt
findstr /n !LF! in.txt
の出力の差で終端改行のありなしの見分けがつくかも
(setとsetlocal行の間の空行は省略しないこと)
改行コードが、CR/LF、LF、CRで違った結果が出るところが面白いよ
終端に改行があろうがなかろうが、echoで出力すれば改行は付加されるよ
あとは参考になるかわからんが
set LF=^
setlocal EnableDelayedExpansion
findstr /n .* in.txt
findstr /n $ in.txt
findstr /n !LF! in.txt
の出力の差で終端改行のありなしの見分けがつくかも
(setとsetlocal行の間の空行は省略しないこと)
改行コードが、CR/LF、LF、CRで違った結果が出るところが面白いよ
440デフォルトの名無しさん
2018/03/20(火) 19:42:04.51ID:5rDh/omp441デフォルトの名無しさん
2018/03/20(火) 20:10:53.11ID:to9q6Sr+ コマンドプロンプトの画面で以下の<コマンド@>を入力すると現在の年月日時分秒が表示されるのですが
これを変数に入れるにはどうすれば良いのでしょうか?
以下の<コマンドA>ではうまく入りませんでした・・・
<コマンド@>
powershell -command "date -f yyyyMMddHHmmss"
<コマンドA>
set NICHIJI=powershell -command "date -f yyyyMMddHHmmss"
これを変数に入れるにはどうすれば良いのでしょうか?
以下の<コマンドA>ではうまく入りませんでした・・・
<コマンド@>
powershell -command "date -f yyyyMMddHHmmss"
<コマンドA>
set NICHIJI=powershell -command "date -f yyyyMMddHHmmss"
442デフォルトの名無しさん
2018/03/20(火) 23:06:27.49ID:BuzmWDFp443デフォルトの名無しさん
2018/03/20(火) 23:18:51.64ID:aHaiWzOW >>441
for /f "delims=" %%G in (‘powershell -command “date …”’) do set “NICHIJI=%%G"
for /f "delims=" %%G in (‘powershell -command “date …”’) do set “NICHIJI=%%G"
444デフォルトの名無しさん
2018/03/20(火) 23:52:48.01ID:BuzmWDFp >>441
外部プログラムの標準出力を取り込むのが目的ではなくて、単に現在日時をセットするだけならバッチのみで済むけど
set NICHIJI=%date:/=%%time::=%
set NICHIJI=%NICHIJI:~0,-3%
外部プログラムの標準出力を取り込むのが目的ではなくて、単に現在日時をセットするだけならバッチのみで済むけど
set NICHIJI=%date:/=%%time::=%
set NICHIJI=%NICHIJI:~0,-3%
445デフォルトの名無しさん
2018/03/21(水) 01:09:02.52ID:UBrEBSgZ446デフォルトの名無しさん
2018/03/21(水) 01:15:45.86ID:UBrEBSgZ あ、for /f "delims=" かな
447デフォルトの名無しさん
2018/03/22(木) 16:25:40.46ID:pbBa6R9F echo と同じ行で何か実行すると空白が入る
echo.>a
echo.>b & rem
dir a b
echo.>a
echo.>b & rem
dir a b
448デフォルトの名無しさん
2018/03/22(木) 17:04:47.92ID:pbBa6R9F 豆知識その2
echo と同じ行でパイプ実行すると表示が変わることがある
set a=%%b%%
set b=xxx
echo %a%
echo %a% | more
echo と同じ行でパイプ実行すると表示が変わることがある
set a=%%b%%
set b=xxx
echo %a%
echo %a% | more
449デフォルトの名無しさん
2018/03/22(木) 17:12:47.60ID:pbBa6R9F 豆知識その3
文字化け嫌なら遅延展開で
@echo off
set "a=a > nul"
set "b=b & rem"
echo %a%
echo %b%
echo ------
setlocal enabledelayedexpansion
echo !a!
echo !b!
pause
文字化け嫌なら遅延展開で
@echo off
set "a=a > nul"
set "b=b & rem"
echo %a%
echo %b%
echo ------
setlocal enabledelayedexpansion
echo !a!
echo !b!
pause
450デフォルトの名無しさん
2018/03/22(木) 21:50:43.44ID:TJWufbYh プログラムからファイルの追加・削除・変更などを行っている最中のフォルダに対して「dir /s」のコマンドを実行した場合
そのせいでプログラムからの処理を邪魔してしまうことってあるのでしょうか?
そのせいでプログラムからの処理を邪魔してしまうことってあるのでしょうか?
451デフォルトの名無しさん
2018/03/24(土) 19:48:05.05ID:pj5y8nH5 絶対に邪魔をしないと言い切るのは難しいな。悪魔の証明
452デフォルトの名無しさん
2018/03/25(日) 01:41:58.87ID:cTYVl2v9 普通は影響しないと思ってていいだろう
そのプログラムがシビアな待ち時間を気にするような造りにさえなってなければね
そのプログラムがシビアな待ち時間を気にするような造りにさえなってなければね
453デフォルトの名無しさん
2018/03/25(日) 14:43:32.24ID:8LXGoh28 dirはファイル自体を見に往くわけじゃないから
454デフォルトの名無しさん
2018/04/03(火) 02:29:58.94ID:yDWDpnwx ちょっとハマってしまったのでアドバイスをいただきたく。
@echo off
cd /d %~dp0
setlocal ENABLEDELAYEDEXPANSION
FOR /f "delims=" %%i IN ('cmd /u /c ECHO;名') DO (
SET CR=%%i
SET CR=!CR:~0,1!
)
SET LF=^
set CRLF=!CR!!LF!
set DATA=alpha beta gamma
set DATA2=%DATA: =!CRLF!%
@echo ----------------------------------------------
@echo !DATA2!
@echo ----------------------------------------------
(@echo !DATA2!) > testdata2.txt
@echo -------------FOR開始---------------
FOR /F "tokens=*" %%a in ('echo !DATA2! ^| findstr /C:"be"') DO (
@echo FORに入った
@echo %%a
)
@echo -------------FOR終了---------------
:last
pause
@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
455454
2018/04/03(火) 02:42:57.22ID:yDWDpnwx >>454でやりたいこと
・空白区切りの文字列群が入っている環境変数DATAがある。
・ここから、特定の文字列(ここでは"be")を含む文字列だけを取り出したい。
・空白を改行(CRLF)に置換してfindstrすればいいかと思ったが、
@echo !DATA2! > testdata2.txt では確かに改行されたファイルができるものの、
@echo !DATA2! | findstr /C:"be" だと、そもそも @echo !DATA2! が
"alphaCRLFbetaCRLFgamma"のような単一行扱いでfindstrに渡されるらしく(?)、うまくいかない。
出力結果は
-------------FOR開始---------------
FORに入った
alpha
-------------FOR終了---------------
となってしまう。
(echo alphaCRLFbetaCRLFgamma をやろうとして、CRLFのとこまでしか出力してないということ?)
・type testdata2.txt | findstr /C:"be" にすればいいのだが、できれば一時ファイルへの出力は行いたくない。
何か良い方法はないでしょうか。
・空白区切りの文字列群が入っている環境変数DATAがある。
・ここから、特定の文字列(ここでは"be")を含む文字列だけを取り出したい。
・空白を改行(CRLF)に置換してfindstrすればいいかと思ったが、
@echo !DATA2! > testdata2.txt では確かに改行されたファイルができるものの、
@echo !DATA2! | findstr /C:"be" だと、そもそも @echo !DATA2! が
"alphaCRLFbetaCRLFgamma"のような単一行扱いでfindstrに渡されるらしく(?)、うまくいかない。
出力結果は
-------------FOR開始---------------
FORに入った
alpha
-------------FOR終了---------------
となってしまう。
(echo alphaCRLFbetaCRLFgamma をやろうとして、CRLFのとこまでしか出力してないということ?)
・type testdata2.txt | findstr /C:"be" にすればいいのだが、できれば一時ファイルへの出力は行いたくない。
何か良い方法はないでしょうか。
456デフォルトの名無しさん
2018/04/03(火) 18:08:30.38ID:dFuhrusg 日立だな
457デフォルトの名無しさん
2018/04/03(火) 21:08:04.29ID:NTm1Ga+l 空白区切りならcallとshiftで回せばいいのでは
@echo off
set DATA=alpha beta gamma
call :SEARCH %DATA%
goto :eof
:SEARCH
if "%1" == "" goto :eof
echo %1 | findstr be
shift
goto SEARCH
@echo off
set DATA=alpha beta gamma
call :SEARCH %DATA%
goto :eof
:SEARCH
if "%1" == "" goto :eof
echo %1 | findstr be
shift
goto SEARCH
458デフォルトの名無しさん
2018/04/05(木) 19:45:55.97ID:9RkYEovX とあるプロンプトを表示して確認画面でyes/no入れてyesが表示されたら処理を続けるnoが入れられたらgoto ENDって事がワンライナー(一行)でやりたいんですけど良い方法ありませんか?
459デフォルトの名無しさん
2018/04/05(木) 19:54:59.74ID:9RkYEovX >>458は例えば↓なのを一行でやりたいんです
setlocal
set /p answer="実行しますか(y/n)? : %answer%"
if "%answer%"=="y" (
echo "start"
) else if "%answer%"=="n" (
echo "cancel"
exit /b 1
)else (
echo "other key"
exit /b 1
)
endlocal
setlocal
set /p answer="実行しますか(y/n)? : %answer%"
if "%answer%"=="y" (
echo "start"
) else if "%answer%"=="n" (
echo "cancel"
exit /b 1
)else (
echo "other key"
exit /b 1
)
endlocal
460デフォルトの名無しさん
2018/04/05(木) 21:02:59.97ID:KYHgmfzR ワンライナー云々抜きに choice.exe は使ったらダメ?
461デフォルトの名無しさん
2018/04/05(木) 21:10:59.87ID:vXFo65tf >>460
環境的にツールの導入は認められません
環境的にツールの導入は認められません
462デフォルトの名無しさん
2018/04/05(木) 22:30:55.38ID:ivnu80TE choiceはWindowsに標準搭載されてるが
https://docs.microsoft.com/ja-jp/windows-server/administration/windows-commands/choice
https://docs.microsoft.com/ja-jp/windows-server/administration/windows-commands/choice
463デフォルトの名無しさん
2018/04/05(木) 22:40:55.26ID:BdFdoEej database.txt にある複数の文字列を delete.txt の内容で消去したいと考えているのですが
「複数の文字列 削除」でぐぐっても複数ファイルから単一の文字列を削除するtipsしかヒットせず迷子の状態になってしまいました。
調べ方を教えていただけないでしょうか、よろしくお願いします。
[database.txt]
りんご,ごりら,らっぱ,ぱんだ,だちょう,うし,しお,おにぎり,りす,
[delete.txt]
ごりら
ぱんだ
うし
りす
[output.txt]
りんご,らっぱ,だちょう,しお,おにぎり,
「複数の文字列 削除」でぐぐっても複数ファイルから単一の文字列を削除するtipsしかヒットせず迷子の状態になってしまいました。
調べ方を教えていただけないでしょうか、よろしくお願いします。
[database.txt]
りんご,ごりら,らっぱ,ぱんだ,だちょう,うし,しお,おにぎり,りす,
[delete.txt]
ごりら
ぱんだ
うし
りす
[output.txt]
りんご,らっぱ,だちょう,しお,おにぎり,
464デフォルトの名無しさん
2018/04/05(木) 23:13:44.90ID:KYHgmfzR465デフォルトの名無しさん
2018/04/06(金) 01:14:00.52ID:fUXQxuPE466デフォルトの名無しさん
2018/04/06(金) 01:53:25.80ID:eal1pYjS >>463
Ruby で作った
# 行区切りのキーワードファイル
text_kw = File.read 'keyword.txt'
keywords = { }
text_kw.each_line do |line| # 1行ずつ処理する
line.chomp! # 末尾の改行を削除する
# 0文字でなければ、ハッシュに追加する
keywords[line] = true unless line.length == 0
end
text = File.read 'data.txt'
# 末尾の改行を削除して、カンマ区切りで配列に入れる
words = text.chomp!.split(',')
# その単語がハッシュにあれば、配列から削除する
words.delete_if { |word| keywords.has_key? word }
# カンマで連結して、ファイルに上書きする
File.write('out.txt', words.join(','))
Ruby で作った
# 行区切りのキーワードファイル
text_kw = File.read 'keyword.txt'
keywords = { }
text_kw.each_line do |line| # 1行ずつ処理する
line.chomp! # 末尾の改行を削除する
# 0文字でなければ、ハッシュに追加する
keywords[line] = true unless line.length == 0
end
text = File.read 'data.txt'
# 末尾の改行を削除して、カンマ区切りで配列に入れる
words = text.chomp!.split(',')
# その単語がハッシュにあれば、配列から削除する
words.delete_if { |word| keywords.has_key? word }
# カンマで連結して、ファイルに上書きする
File.write('out.txt', words.join(','))
467デフォルトの名無しさん
2018/04/06(金) 03:19:39.27ID:Jw59w3Z9 このrubyガイジはバッチスレにも住みついてんのか
468デフォルトの名無しさん
2018/04/06(金) 07:06:54.89ID:1XYxdGEK ↓ガイジのおともだち
667 名前:ピラフ ◆9Jro6YFwm650 [sage] 投稿日:2018/04/05(木) 22:04:35.89 ID:SYfKFmGc
>>666
* *
* + グッジョブ!
n ∧_∧ n
+ (ヨ(* ´∀`)E)
Y Y *
667 名前:ピラフ ◆9Jro6YFwm650 [sage] 投稿日:2018/04/05(木) 22:04:35.89 ID:SYfKFmGc
>>666
* *
* + グッジョブ!
n ∧_∧ n
+ (ヨ(* ´∀`)E)
Y Y *
469デフォルトの名無しさん
2018/04/06(金) 07:12:37.58ID:n8Wm7bZP rubyマンワロタ
本スレでやれよw
本スレでやれよw
470デフォルトの名無しさん
2018/04/06(金) 10:00:35.29ID:fQXPpScw471デフォルトの名無しさん
2018/04/06(金) 23:57:01.63ID:LzrMMW4f >>462
何故かWindowsPEに入っていない不思議
何故かWindowsPEに入っていない不思議
472デフォルトの名無しさん
2018/04/07(土) 09:33:59.62ID:QDDx5b92 日立マンワロタ
日立スレでやれよw
日立スレでやれよw
473デフォルトの名無しさん
2018/04/07(土) 13:50:49.47ID:VdZT6mQb >>470
回答者でもないお前が質問者の態度を問うな
回答者でもないお前が質問者の態度を問うな
474デフォルトの名無しさん
2018/04/07(土) 15:41:13.15ID:1zm7m+j1 >>473
おれは日本人としての道徳を説いてるんだが
おれは日本人としての道徳を説いてるんだが
475デフォルトの名無しさん
2018/04/07(土) 21:08:07.97ID:dWk4eLw8 >>474
あそこは日本人じゃなく山猿が結構いるよ
あそこは日本人じゃなく山猿が結構いるよ
476デフォルトの名無しさん
2018/04/07(土) 23:31:37.19ID:pb/9IsOI for /l %%n in (1,1,10) do (
477デフォルトの名無しさん
2018/04/11(水) 23:23:30.97ID:sp32so0L 質問させてください。
プログラムの標準出力を変数に代入する方法を調べ、以下のような方法を見つけて動作を確認しました。
FOR /f "DELIMS=" %%A IN ('ECHO ABC') DO SET ABC=%%A
しかし、'ECHO ABC' の部分にダブルコーテーションが含まれているとうまく動作しませんでした。
何らかの方法でダブルコーテーションをエスケープする必要があると思うのですが、
その方法をご存知の方がいらっしゃれば教えていただけないでしょうか。
よろしくお願いします。
プログラムの標準出力を変数に代入する方法を調べ、以下のような方法を見つけて動作を確認しました。
FOR /f "DELIMS=" %%A IN ('ECHO ABC') DO SET ABC=%%A
しかし、'ECHO ABC' の部分にダブルコーテーションが含まれているとうまく動作しませんでした。
何らかの方法でダブルコーテーションをエスケープする必要があると思うのですが、
その方法をご存知の方がいらっしゃれば教えていただけないでしょうか。
よろしくお願いします。
478デフォルトの名無しさん
2018/04/12(木) 05:05:32.49ID:8z3G53ms >>338-348と同じ話かな
479デフォルトの名無しさん
2018/04/12(木) 07:05:02.54ID:UI16Z2bS @echo off
FOR /f "delims=" %%A IN ('ECHO hoge^"hoge') DO SET "ABC=%%A"
echo %ABC%
pause
FOR /f "delims=" %%A IN ('ECHO hoge^"hoge') DO SET "ABC=%%A"
echo %ABC%
pause
480デフォルトの名無しさん
2018/04/21(土) 16:41:01.08ID:x8Crqpim こんなファイルがありまして
2018/04/21 09:30:00
count
10
2018/04/21 10:00:00
count
20
↓のように変換出力したいです
2018/04/21 09:30:00<tab>10
2018/04/21 10:00:00<tab>20
どのようにしたらいいでしょうか
2018/04/21 09:30:00
count
10
2018/04/21 10:00:00
count
20
↓のように変換出力したいです
2018/04/21 09:30:00<tab>10
2018/04/21 10:00:00<tab>20
どのようにしたらいいでしょうか
481デフォルトの名無しさん
2018/04/21(土) 18:30:43.44ID:9o1T2SLn >>480
<tab>はTABコードだと判断したが、もし単なる文字列ならその部分は修正してくれ
@echo off
setlocal EnableDelayedExpansion
type nul>out.txt
for /f "delims=N" %%I in ('cmd /u /c echo 三') do set TAB=%%I
set n=0
for /f "tokens=* delims=" %%i in (in.txt) do (
set d!n!=%%i
set /a n+=1
if !n! geq 3 set n=0&echo.!d0!%TAB%!d2!>>out.txt
)
endlocal
<tab>はTABコードだと判断したが、もし単なる文字列ならその部分は修正してくれ
@echo off
setlocal EnableDelayedExpansion
type nul>out.txt
for /f "delims=N" %%I in ('cmd /u /c echo 三') do set TAB=%%I
set n=0
for /f "tokens=* delims=" %%i in (in.txt) do (
set d!n!=%%i
set /a n+=1
if !n! geq 3 set n=0&echo.!d0!%TAB%!d2!>>out.txt
)
endlocal
482デフォルトの名無しさん
2018/04/21(土) 20:19:07.52ID:kVqs7sc1 下手にバッチでやるよりエディタ等で
\ncount\nをtabに一発置換するだけのような
\ncount\nをtabに一発置換するだけのような
483デフォルトの名無しさん
2018/04/21(土) 20:38:40.63ID:6+H6buOa >'cmd /u /c echo 三'
ナニコレ
ナニコレ
484デフォルトの名無しさん
2018/04/21(土) 21:33:42.67ID:x8Crqpim485デフォルトの名無しさん
2018/04/21(土) 21:41:42.48ID:9o1T2SLn >>483
今まで何度か出てたはずだけど覚えてないかな?
漢字の三は、SJISでは8E4Fだが、Unicodeでは、U+4E09
英字Nは、ASCII(SJIS)で、4E
HT(水平タブ)文字は、ASCII(SJIS)で、09
今まで何度か出てたはずだけど覚えてないかな?
漢字の三は、SJISでは8E4Fだが、Unicodeでは、U+4E09
英字Nは、ASCII(SJIS)で、4E
HT(水平タブ)文字は、ASCII(SJIS)で、09
486デフォルトの名無しさん
2018/04/22(日) 03:16:01.56ID:HWr0EbfP487デフォルトの名無しさん
2018/04/22(日) 06:56:22.77ID:Lev+VBnm @echo off
type nul>out.txt
setlocal enabledelayedexpansion
set n=0
for /f "delims=" %%i in (in.txt) do (
set "d!n!=%%i" & set /a "n=(n+1)%%3"
if !n! equ 2 if not "%%i"=="count" echo.!d0!>>out.txt&set n=1& set "d0=%%i"
if !n! equ 0 echo.!d0! !d2!>>out.txt
)
!d0!と!d2!の間は普通にtab入力
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入力
488デフォルトの名無しさん
2018/04/22(日) 07:14:11.56ID:H/AU6k7y だからなに?
489デフォルトの名無しさん
2018/04/22(日) 19:58:53.86ID:Ai4JHVEf バッチは不特定多数に提供するんでなければ、やっつけでいいんだよ
取り合えず用が足せればいい
ああいう場合にどうだとか余計なことはそういう場面に遭遇してから対処すればいい
まあ違う考えを持ってる人もいるだろうから俺の考えではと限定しての意見だが
取り合えず用が足せればいい
ああいう場合にどうだとか余計なことはそういう場面に遭遇してから対処すればいい
まあ違う考えを持ってる人もいるだろうから俺の考えではと限定しての意見だが
490デフォルトの名無しさん
2018/04/22(日) 21:50:25.52ID:Lev+VBnm >>487もやっつけだよ
不具合だらけ
不具合だらけ
491デフォルトの名無しさん
2018/04/23(月) 00:48:13.86ID:+coOi68A 元となったデータを見てると、何かのプログラムで出力した結果のようだから
イレギュラーなデータはそもそもあり得ないのかもしれない
それをイレギュラーなデータがあったらと考えていろいろ対処するのどんなもんなのかな
イレギュラーなデータはそもそもあり得ないのかもしれない
それをイレギュラーなデータがあったらと考えていろいろ対処するのどんなもんなのかな
492デフォルトの名無しさん
2018/04/23(月) 01:49:13.44ID:+coOi68A493486
2018/04/23(月) 16:55:05.27ID:75V+260b494デフォルトの名無しさん
2018/04/26(木) 21:33:25.10ID:iUADfoHj バッチファイルを直接ダブルクリックした時は処理の最後にpauseをかける(=コマンドプロンプトウインドウを
閉じずにホールドする)条件にして、コマンドプロンプトから呼び出された場合はpauseはかけずに処理を
終了するという実装をしたいんですが、いい方法ありますか?
閉じずにホールドする)条件にして、コマンドプロンプトから呼び出された場合はpauseはかけずに処理を
終了するという実装をしたいんですが、いい方法ありますか?
495デフォルトの名無しさん
2018/04/26(木) 21:43:36.77ID:g7ZPMx3V >>494
引数で処理を分けるか、pause有無でバッチファイルそのものを分ける。
引数で処理を分けるか、pause有無でバッチファイルそのものを分ける。
496デフォルトの名無しさん
2018/04/26(木) 21:50:58.00ID:5PgkCptO 適当でいいなら%CMDCMDLINE%
497デフォルトの名無しさん
2018/04/26(木) 21:57:48.38ID:vlAm5Lzz %0 参照して分岐すれば?
echo %0
pause
echo %0
pause
498デフォルトの名無しさん
2018/04/26(木) 22:30:55.90ID:iUADfoHj レスありがとうございます>各位
すいませんダブルクリックと書いたのでミスリードになってしまったのですが、実際にはD&Dで引数も使用します。
なので>>496の環境変数参照して/Cオプション実行しているかどうかで分岐しようと思います。
すいませんダブルクリックと書いたのでミスリードになってしまったのですが、実際にはD&Dで引数も使用します。
なので>>496の環境変数参照して/Cオプション実行しているかどうかで分岐しようと思います。
499デフォルトの名無しさん
2018/04/27(金) 01:23:21.22ID:XIoO9rX1 ログファイルで確認するようにすればいいのに。
500デフォルトの名無しさん
2018/04/27(金) 19:57:13.14ID:CQ9eqs6l え?
501デフォルトの名無しさん
2018/05/01(火) 06:45:44.95ID:aXoGd7xG 64桁の10進数を16進数に変換する方法、探したけど見つからなくて
バッチファイルだけでやるのは無理があるでしょうか。
javascriptでなら巨大な桁数いけるサイトはあったのですが
バッチファイル内で大量に処理したいのです。
バッチファイルだけでやるのは無理があるでしょうか。
javascriptでなら巨大な桁数いけるサイトはあったのですが
バッチファイル内で大量に処理したいのです。
502デフォルトの名無しさん
2018/05/01(火) 08:40:01.76ID:04a9c6T+ ネットワークカードに複数IPアドレスをバッチファイルで当てる方法教えてください。
netsh interface ipv4 set add name="ローカル エリア接続" static addr1="192.168.15.35" このあと
192.168.1.35も割り当てたい、よろしくお願いいたします。
netsh interface ipv4 set add name="ローカル エリア接続" static addr1="192.168.15.35" このあと
192.168.1.35も割り当てたい、よろしくお願いいたします。
503デフォルトの名無しさん
2018/05/01(火) 08:45:13.16ID:04a9c6T+ 自己解決 netsh interface ip add address name="ローカル エリア接続" addr=192.168.1.35 mask=255.255.255.0
504デフォルトの名無しさん
2018/05/01(火) 17:14:01.70ID:cVB2iu29505デフォルトの名無しさん
2018/05/01(火) 23:59:01.96ID:7h2ZqymN >>501
普通の手段だと無理だと思う。
1. 整数演算はOSのbit数の上限までしかできない
2. 文字列として変換するにしても255⇒0xFFが限界
…。
3. そもそも符号無し16進??有りの16進??
普通の手段だと無理だと思う。
1. 整数演算はOSのbit数の上限までしかできない
2. 文字列として変換するにしても255⇒0xFFが限界
…。
3. そもそも符号無し16進??有りの16進??
506デフォルトの名無しさん
2018/05/02(水) 00:09:36.26ID:bQsnMWtx507505
2018/05/02(水) 00:34:38.73ID:69djG7nz 訂正。64bit環境でも調べたけど、最大2147483647(符号付32bitのMAX)だった。
508デフォルトの名無しさん
2018/05/02(水) 02:01:56.61ID:z5LQTSUi >>504-507
ありがとうございます。hex2decは試行済でした。
1234567890000987654321000000
を渡すと
7766001854005038656 = 0x6BC6618A48FECE40
このように崩れます。
やはり無理がありますか。。。
gawkはlinuxのようですね。windowsで実現する方法を求めていました。
バッチファイルでは出来そうにないのでWSH JScriptあたりを探してみたりしていました。
他手段を探してみたいと思います。ありがとうございました。
ありがとうございます。hex2decは試行済でした。
1234567890000987654321000000
を渡すと
7766001854005038656 = 0x6BC6618A48FECE40
このように崩れます。
やはり無理がありますか。。。
gawkはlinuxのようですね。windowsで実現する方法を求めていました。
バッチファイルでは出来そうにないのでWSH JScriptあたりを探してみたりしていました。
他手段を探してみたいと思います。ありがとうございました。
509デフォルトの名無しさん
2018/05/02(水) 03:07:32.00ID:KFhIKBMV batでも出来るんだけど、実用な時間で出来るかと言われると何ともねえ
@echo off
setlocal
set hex=0123456789ABCDEF
set in=1234567890
set out=
set bin=
:loop
call :div2 in s
set bin=%s%%bin%
if defined in goto :loop
:loop2
set h=000%bin:~-4%
set /a h=("%h:~-4,1%<<3")+("%h:~-3,1%<<2")+("%h:~-2,1%<<1")+%h:~-1%
set bin=%bin:~0,-4%
call set out=%%hex:~%h%,1%%%out%
if defined bin goto :loop2
echo.0x%out%
endlocal
goto :eof
:div2
set dst=
set s=0
:divloop
set d=%in:~0,1%
set in=%in:~1%
set /a s=s*10+d
set /a h="s>>1"
set /a s%%=2
if defined dst (set dst=%dst%%h%) else if %h% gtr 0 set dst=%dst%%h%
if not defined in set in=%dst%&goto :eof
goto :divloop
@echo off
setlocal
set hex=0123456789ABCDEF
set in=1234567890
set out=
set bin=
:loop
call :div2 in s
set bin=%s%%bin%
if defined in goto :loop
:loop2
set h=000%bin:~-4%
set /a h=("%h:~-4,1%<<3")+("%h:~-3,1%<<2")+("%h:~-2,1%<<1")+%h:~-1%
set bin=%bin:~0,-4%
call set out=%%hex:~%h%,1%%%out%
if defined bin goto :loop2
echo.0x%out%
endlocal
goto :eof
:div2
set dst=
set s=0
:divloop
set d=%in:~0,1%
set in=%in:~1%
set /a s=s*10+d
set /a h="s>>1"
set /a s%%=2
if defined dst (set dst=%dst%%h%) else if %h% gtr 0 set dst=%dst%%h%
if not defined in set in=%dst%&goto :eof
goto :divloop
510デフォルトの名無しさん
2018/05/02(水) 03:13:02.96ID:q7DG1Lgj 生きている間に終わらないってこと?
511デフォルトの名無しさん
2018/05/02(水) 03:17:05.83ID:KFhIKBMV これはやっつけで作ったんで、もっとスマートにできるかも知れない
なお、div2ルーチンは最初変数を独立させるためにsetlocalで別環境にしてた名残が呼び出し元の引数に残ってる(無意味だから何で付けてるのって思わないように)
なお、div2ルーチンは最初変数を独立させるためにsetlocalで別環境にしてた名残が呼び出し元の引数に残ってる(無意味だから何で付けてるのって思わないように)
512デフォルトの名無しさん
2018/05/02(水) 03:19:47.60ID:KFhIKBMV513デフォルトの名無しさん
2018/05/02(水) 06:44:11.75ID:D/jExvSh awkなら速くできるの?
514デフォルトの名無しさん
2018/05/02(水) 07:02:56.10ID:ESv7owpX >>509
元の質問者じゃないけど、これ動かすとたまに「プロセスはファイルにアクセスできません。別のプロセスが使用中です。」って出る。
自分で書いたbatもループとかcallが多いとこれが出たりリダイレクトに失敗してたりする事があるんだけど何が原因?
ごくごく稀に飛ぶはずのないラベルに飛んで動作不良起こしたりもする。
元の質問者じゃないけど、これ動かすとたまに「プロセスはファイルにアクセスできません。別のプロセスが使用中です。」って出る。
自分で書いたbatもループとかcallが多いとこれが出たりリダイレクトに失敗してたりする事があるんだけど何が原因?
ごくごく稀に飛ぶはずのないラベルに飛んで動作不良起こしたりもする。
515デフォルトの名無しさん
2018/05/02(水) 18:25:33.72ID:vWDYKqwa >>508
これとかは?
ツール関係の小部屋
http://sky.geocities.jp/hp_gabo200x/room_tool.html
C-style arbitrary precision calculator
http://sky.geocities.jp/hp_gabo200x/mysoft/gcalc.lzh
これとかは?
ツール関係の小部屋
http://sky.geocities.jp/hp_gabo200x/room_tool.html
C-style arbitrary precision calculator
http://sky.geocities.jp/hp_gabo200x/mysoft/gcalc.lzh
516デフォルトの名無しさん
2018/05/02(水) 21:55:01.98ID:KFhIKBMV >>514
OSは何だろう?
こっちは、win7pro 64bit
通常そういう変な動作はワークエリアが残ってない場合なんかに起きる
環境変数をいっぱい定義して領域が残ってないとか
そういう場合、コマンドプロンプトを一旦閉じて再度起動して初期状態にして試してみる
win2000で環境変数領域は2048バイト、winXPでは8192バイト、それ以外はヘルプにコマンドプロンプト関連のの説明が無い
でもまあ大抵はbatに問題がある
>>509のはこっちでは70桁を指定しても正常に動作してるが、
setlocalで子環境を作ってて、サブルーチンから抜けるときにはendlocal無しにgoto :eofしてるので
その辺が問題なのかもしれない
この辺はよく分からないので、一度setlocal,endlocalを削除して試してくれ
OSは何だろう?
こっちは、win7pro 64bit
通常そういう変な動作はワークエリアが残ってない場合なんかに起きる
環境変数をいっぱい定義して領域が残ってないとか
そういう場合、コマンドプロンプトを一旦閉じて再度起動して初期状態にして試してみる
win2000で環境変数領域は2048バイト、winXPでは8192バイト、それ以外はヘルプにコマンドプロンプト関連のの説明が無い
でもまあ大抵はbatに問題がある
>>509のはこっちでは70桁を指定しても正常に動作してるが、
setlocalで子環境を作ってて、サブルーチンから抜けるときにはendlocal無しにgoto :eofしてるので
その辺が問題なのかもしれない
この辺はよく分からないので、一度setlocal,endlocalを削除して試してくれ
517デフォルトの名無しさん
2018/05/02(水) 22:06:46.67ID:KFhIKBMV >>514
そのメッセージがbat実行直後なら(つまりあまりに瞬時で実行してるように思えない場合)、
本当にbatファイルが別プロセスで使用中なのかも知れない
裏で何かのプログラムがbatファイルを握って離さないとか
(インデックスサーチとかセキュリティチェックとかは、俺は作動させてないのでどうなのかは知らない)
そのメッセージがbat実行直後なら(つまりあまりに瞬時で実行してるように思えない場合)、
本当にbatファイルが別プロセスで使用中なのかも知れない
裏で何かのプログラムがbatファイルを握って離さないとか
(インデックスサーチとかセキュリティチェックとかは、俺は作動させてないのでどうなのかは知らない)
518514
2018/05/03(木) 05:58:29.18ID:KZ8lRGiM >>516-517
OSはwin10 64bitです。
セキュリティソフトはWindows Defender、インデックスサーチはWindows Search、Everythingを使ってます。
これらは利用者多いのに同様の不具合は聞いたこと無いから関係無いかも?
環境変数はいくつか自分で追加したけど問題になるほど登録してるとも思えないしよく分からない。
他になにか悪さをしているソフトがあるのかなあ。
OSはwin10 64bitです。
セキュリティソフトはWindows Defender、インデックスサーチはWindows Search、Everythingを使ってます。
これらは利用者多いのに同様の不具合は聞いたこと無いから関係無いかも?
環境変数はいくつか自分で追加したけど問題になるほど登録してるとも思えないしよく分からない。
他になにか悪さをしているソフトがあるのかなあ。
519デフォルトの名無しさん
2018/05/03(木) 11:45:15.41ID:Ox4SBvDu >>501
もう見てないかも知れないが、
俺の古いPCで、64桁で0.4秒ほどの実行時間です
@echo off
setlocal enabledelayedexpansion
set "a=1234567890123456789012345678901234567890123456789012345678901234"
set "g=0123456789ABCDEF"
set "h="
set /a b=8,e=100000000
for /L %%i in (8,8,56) do if not "!a:~%%i,1!"=="" set /a b=%%i+8
set "a=0000000%a%"
set "a=!a:~-%b%!"
for /L %%i in (%b%,-8,8) do set /a "a%%i=1!a:~-%%i,8!-e"
:x
set /a c=0,f=0
for /L %%i in (%b%,-8,8) do set /a "d=a%%i+c*e,a%%i=d>>4,f|=a%%i,c=d&15"
set "h=!g:~%c%,1!%h%"
if %f% neq 0 goto x
for /f "delims=0 tokens=*" %%i in ("%h%") do set h=%%i
echo %h%
pause
もう見てないかも知れないが、
俺の古いPCで、64桁で0.4秒ほどの実行時間です
@echo off
setlocal enabledelayedexpansion
set "a=1234567890123456789012345678901234567890123456789012345678901234"
set "g=0123456789ABCDEF"
set "h="
set /a b=8,e=100000000
for /L %%i in (8,8,56) do if not "!a:~%%i,1!"=="" set /a b=%%i+8
set "a=0000000%a%"
set "a=!a:~-%b%!"
for /L %%i in (%b%,-8,8) do set /a "a%%i=1!a:~-%%i,8!-e"
:x
set /a c=0,f=0
for /L %%i in (%b%,-8,8) do set /a "d=a%%i+c*e,a%%i=d>>4,f|=a%%i,c=d&15"
set "h=!g:~%c%,1!%h%"
if %f% neq 0 goto x
for /f "delims=0 tokens=*" %%i in ("%h%") do set h=%%i
echo %h%
pause
520デフォルトの名無しさん
2018/05/03(木) 18:33:32.97ID:Ox4SBvDu >>515 の gcalcを使用すると簡単
>type a
printf("%x\n", 1234567890123456789012345678901234567890123456789012345678901234)
>gcalc < a > b
>type b
0x30046030f26f462d7ac21a27eb9d53fff233c7acd12d87e96aff2
>type a
printf("%x\n", 1234567890123456789012345678901234567890123456789012345678901234)
>gcalc < a > b
>type b
0x30046030f26f462d7ac21a27eb9d53fff233c7acd12d87e96aff2
521デフォルトの名無しさん
2018/05/03(木) 18:53:18.66ID:Ox4SBvDu すまん、printfの次の行にexitを追加して
522501
2018/05/04(金) 16:14:55.26ID:hkAWCjpW523デフォルトの名無しさん
2018/05/04(金) 23:52:47.93ID:Ry3XO9FI >>501
Ruby では、
num = 9999_1234567890_1234567890_1234567890_1234567890_1234567890_1234567890
num.to_s(16)
#=> "184e78450dd8c1fca3b502d65e4f6fb73c42c47ccff196ce3f0ad2"
Ruby では、
num = 9999_1234567890_1234567890_1234567890_1234567890_1234567890_1234567890
num.to_s(16)
#=> "184e78450dd8c1fca3b502d65e4f6fb73c42c47ccff196ce3f0ad2"
524デフォルトの名無しさん
2018/05/05(土) 00:20:09.03ID:uOR+hZGm dcなら
値1
値2
:
値n
16of
値1
値2
:
値n
16of
525デフォルトの名無しさん
2018/05/05(土) 04:13:57.15ID:nqyvYHZY >>520
gcalc面白いね
こんな書き方が通っちゃうんだー
--bat--
@echo off
gcalc -d config(\"tab\",0), base(16), <in.txt; quit;
rem gcalc -d config(\"tab\",0), base2(16), <in.txt; quit;
--in.txt---
1111111111
2222222222
3333333333
gcalc面白いね
こんな書き方が通っちゃうんだー
--bat--
@echo off
gcalc -d config(\"tab\",0), base(16), <in.txt; quit;
rem gcalc -d config(\"tab\",0), base2(16), <in.txt; quit;
--in.txt---
1111111111
2222222222
3333333333
526デフォルトの名無しさん
2018/05/14(月) 16:02:14.00ID:vCNzBA31 %1や環境変数が数字だけか判定するのが面倒
ぐぐってやりかたはわかったが、もっとすっきりくっきりな方法はないですか
正規表現だと ^\d+$ でおわりなのに
set W=x%1
set W=%W:0=%
set W=%W:1=%
set W=%W:2=%
set W=%W:3=%
set W=%W:4=%
set W=%W:5=%
set W=%W:6=%
set W=%W:7=%
set W=%W:8=%
set W=%W:9=%
if '%W%=='x echo 数字
ぐぐってやりかたはわかったが、もっとすっきりくっきりな方法はないですか
正規表現だと ^\d+$ でおわりなのに
set W=x%1
set W=%W:0=%
set W=%W:1=%
set W=%W:2=%
set W=%W:3=%
set W=%W:4=%
set W=%W:5=%
set W=%W:6=%
set W=%W:7=%
set W=%W:8=%
set W=%W:9=%
if '%W%=='x echo 数字
527デフォルトの名無しさん
2018/05/14(月) 16:37:10.19ID:qPzKX5Gg set X=100
echo %X%|findstr /X "[0-9][0-9]*"&&echo 数字
こうとか
echo %X%|findstr /X "[0-9][0-9]*"&&echo 数字
こうとか
528デフォルトの名無しさん
2018/05/15(火) 01:55:36.53ID:VsPlEm8N @rem 2147483648 以上の数は扱えないため、大きい値が入る条件には不向き。
set "W=%1"
set DUMMY=a
set /A "DUMMY=W*1"
if not "%W%"=="%DUMMY%" (echo 数字以外) else echo 数字のみ
set "W=%1"
set DUMMY=a
set /A "DUMMY=W*1"
if not "%W%"=="%DUMMY%" (echo 数字以外) else echo 数字のみ
529デフォルトの名無しさん
2018/05/15(火) 15:39:31.76ID:Aaz/hbaw >>528
-123 数字のみ
-123 数字のみ
530デフォルトの名無しさん
2018/05/15(火) 15:47:52.58ID:Aaz/hbaw 0001 数字以外
531デフォルトの名無しさん
2018/05/16(水) 00:05:23.47ID:vNnFvDtx532デフォルトの名無しさん
2018/05/16(水) 03:54:43.21ID:Hrg3NbAG @echo off
call :check_num %1 result
echo %result%
pause
goto :eof
:check_num
if "%~1"=="" set "b=FALSE" & goto :eof
for /f "delims=-+0123456789 tokens=* eol=" %%i in ("%~1") do (
set "a=%%i"
if defined a (set "b=FALSE") else set "b=TRUE"
)
endlocal & set "%2=%b%"
call :check_num %1 result
echo %result%
pause
goto :eof
:check_num
if "%~1"=="" set "b=FALSE" & goto :eof
for /f "delims=-+0123456789 tokens=* eol=" %%i in ("%~1") do (
set "a=%%i"
if defined a (set "b=FALSE") else set "b=TRUE"
)
endlocal & set "%2=%b%"
533デフォルトの名無しさん
2018/05/16(水) 04:03:04.73ID:Hrg3NbAG534デフォルトの名無しさん
2018/05/16(水) 04:13:36.97ID:Hrg3NbAG なんか間違ってたので書き直した
@echo off
call :check_num %1 result
echo %result%
pause
goto :eof
:check_num
setlocal
if "%~1"=="" set "b=FALSE" & goto x
for /f "delims=-+0123456789 tokens=* eol=" %%i in ("%~1") do (
set "a=%%i"
if defined a (set "b=FALSE") else set "b=TRUE"
)
:x
endlocal & set "%2=%b%"
@echo off
call :check_num %1 result
echo %result%
pause
goto :eof
:check_num
setlocal
if "%~1"=="" set "b=FALSE" & goto x
for /f "delims=-+0123456789 tokens=* eol=" %%i in ("%~1") do (
set "a=%%i"
if defined a (set "b=FALSE") else set "b=TRUE"
)
:x
endlocal & set "%2=%b%"
535デフォルトの名無しさん
2018/05/16(水) 16:36:26.52ID:VQztSlVV 1"2
result"=="" set "b=FALSE" & goto x の使い方が誤っています。
result"=="" set "b=FALSE" & goto x の使い方が誤っています。
536デフォルトの名無しさん
2018/05/16(水) 16:48:32.10ID:VQztSlVV "1"
TRUE
1"2"
ECHO は <OFF> です。
TRUE
1"2"
ECHO は <OFF> です。
537デフォルトの名無しさん
2018/05/16(水) 21:51:04.87ID:Hrg3NbAG 引数の中の " の対策すると大変なんで、やりたくない
やりたい人、どうぞ
やりたい人、どうぞ
538デフォルトの名無しさん
2018/05/16(水) 22:31:00.96ID:VQztSlVV 1^2
1|2
1&2
1|2
1&2
539デフォルトの名無しさん
2018/05/16(水) 23:12:48.91ID:Hrg3NbAG 引数の中に cmd で特別な意味を持つ文字が有る場合は左に ^ を付けるか
全体を " で囲むしかないよ
全体を " で囲むしかないよ
540デフォルトの名無しさん
2018/05/16(水) 23:15:29.43ID:VQztSlVV541デフォルトの名無しさん
2018/05/16(水) 23:50:08.13ID:Hrg3NbAG FALSE になるようだが何か問題があるの?
542デフォルトの名無しさん
2018/05/17(木) 00:05:45.00ID:TsNh8oQN ああ分かった リテラルが 1^2 の場合ね 失礼
543デフォルトの名無しさん
2018/05/17(木) 00:31:20.52ID:TsNh8oQN call :check_num "%~1" result
にでもすりゃいいのかな
こういうのは考え出すときりが無い様な気がするが
にでもすりゃいいのかな
こういうのは考え出すときりが無い様な気がするが
544デフォルトの名無しさん
2018/05/17(木) 01:18:19.29ID:zVFG07SK 分かってるのかどうか知らないが、
1"2"が、ECHO は <OFF> です。になるのは、eol="が効いてるため
1"2"が、ECHO は <OFF> です。になるのは、eol="が効いてるため
545デフォルトの名無しさん
2018/05/17(木) 06:56:29.62ID:TsNh8oQN eof= を消すと副作用があるし
どっちにしろ引数に ; があると誤動作するみたいだし
こりゃあもうお手上げだな
どっちにしろ引数に ; があると誤動作するみたいだし
こりゃあもうお手上げだな
546デフォルトの名無しさん
2018/05/17(木) 07:02:08.36ID:TsNh8oQN あ、eol= だった
547デフォルトの名無しさん
2018/05/17(木) 07:11:43.15ID:pqvSuRzJ 質問者が「もっとすっきりくっきりな方法」と言ってるんだから複雑でトリッキーな方法は求められてなないだろう
548デフォルトの名無しさん
2018/05/17(木) 08:50:29.12ID:zVFG07SK549デフォルトの名無しさん
2018/05/17(木) 09:36:13.96ID:cmWUEZX7 >>547
いつもそうなるけど、バッチじゃ諦めろ、が正解になってしまうよw
いつもそうなるけど、バッチじゃ諦めろ、が正解になってしまうよw
550デフォルトの名無しさん
2018/05/17(木) 10:17:41.58ID:TsNh8oQN どんな方法でも良いから
引数の中に " とか ; が入ってても
正しく動作するのを頼む
というのは絶対に無理なのかね
引数の中に " とか ; が入ってても
正しく動作するのを頼む
というのは絶対に無理なのかね
551デフォルトの名無しさん
2018/05/17(木) 11:47:23.61ID:TsNh8oQN >>550が不可ならそれを前提条件にするしかないだろ
ちょっと直してみた
@echo off
call :check_num "%~1" result
echo %result% & pause & goto :eof
:check_num
setlocal
set "b=FALSE" & if "%~1"=="" goto x
for /f "delims=-+0123456789 tokens=*" %%i in ("%~1") do (
set "a=%%i" & if not defined a set "b=TRUE"
)
:x
endlocal & set "%2=%b%"
ちょっと直してみた
@echo off
call :check_num "%~1" result
echo %result% & pause & goto :eof
:check_num
setlocal
set "b=FALSE" & if "%~1"=="" goto x
for /f "delims=-+0123456789 tokens=*" %%i in ("%~1") do (
set "a=%%i" & if not defined a set "b=TRUE"
)
:x
endlocal & set "%2=%b%"
552デフォルトの名無しさん
2018/05/17(木) 17:15:43.43ID:TsNh8oQN とりあえず引数の " と ; の対策らしきもの
引数は行末まで1個のみ
もう嫌気がさしたのでこれ以上はやめとく
@echo off
set a=%*"
set /a b=0,c=0
setlocal enabledelayedexpansion
:x
set d="!a:~%b%,1!!a:~%b%,1!"
if !d!=="" goto y
if !d!=="""" set /a c+=1
if !d!==";;" set /a c+=1
set /a b+=1 & goto x
:y
endlocal & set c=%c%
set "e=FALSE" & if %c% gtr 1 (goto z) else set "a=%*"
for /f "delims=-+0123456789 tokens=*" %%i in ("%a%") do (
set "a=%%i" & if not defined a set "e=TRUE"
)
:z
echo %e%
引数は行末まで1個のみ
もう嫌気がさしたのでこれ以上はやめとく
@echo off
set a=%*"
set /a b=0,c=0
setlocal enabledelayedexpansion
:x
set d="!a:~%b%,1!!a:~%b%,1!"
if !d!=="" goto y
if !d!=="""" set /a c+=1
if !d!==";;" set /a c+=1
set /a b+=1 & goto x
:y
endlocal & set c=%c%
set "e=FALSE" & if %c% gtr 1 (goto z) else set "a=%*"
for /f "delims=-+0123456789 tokens=*" %%i in ("%a%") do (
set "a=%%i" & if not defined a set "e=TRUE"
)
:z
echo %e%
553デフォルトの名無しさん
2018/05/17(木) 17:16:28.81ID:zVFG07SK >>550
@echo off
set "arg1=%1"
call :check_num arg1 result
echo %result% & pause & goto :eof
:check_num
setlocal EnableDelayedExpansion
set "b=FALSE"
for /f "delims=0123456789 tokens=*" %%i in ("!%1!") do (
set "a=%%i" & if not defined a set "b=TRUE"
)
:x
endlocal & set "%2=%b%"
goto :eof
引数に ; は指定できない(半角空白、カンマ、セミコロン、=は引数の区切りを示すため)
なお、遅延環境変数の展開を使わないでも以下のようなチェックで最初に弾けば可能
if "%arg1:"=%" equ "%arg1:"=”%" (echo ^"なし) else echo ^"あり
@echo off
set "arg1=%1"
call :check_num arg1 result
echo %result% & pause & goto :eof
:check_num
setlocal EnableDelayedExpansion
set "b=FALSE"
for /f "delims=0123456789 tokens=*" %%i in ("!%1!") do (
set "a=%%i" & if not defined a set "b=TRUE"
)
:x
endlocal & set "%2=%b%"
goto :eof
引数に ; は指定できない(半角空白、カンマ、セミコロン、=は引数の区切りを示すため)
なお、遅延環境変数の展開を使わないでも以下のようなチェックで最初に弾けば可能
if "%arg1:"=%" equ "%arg1:"=”%" (echo ^"なし) else echo ^"あり
554デフォルトの名無しさん
2018/05/17(木) 17:18:28.36ID:zVFG07SK なお、+-は除くのが吉
+1+2-3
+1+2-3
555デフォルトの名無しさん
2018/05/17(木) 18:05:24.87ID:TsNh8oQN >554.bat 1"&ab"
'ab""' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
TRUE
'ab""' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
TRUE
556デフォルトの名無しさん
2018/05/17(木) 21:22:44.52ID:zVFG07SK557デフォルトの名無しさん
2018/05/17(木) 21:53:53.10ID:TsNh8oQN558デフォルトの名無しさん
2018/05/18(金) 12:57:02.82ID:CQAI+hTy559デフォルトの名無しさん
2018/05/18(金) 15:14:59.49ID:nWqd9LPa for /f %%i in ('"cmd /k prompt $h <nul"') do set BS=%%i
set /p AAA=".%BS% 必要ですか?(y/n):"
set /p AAA=".%BS% 必要ですか?(y/n):"
560デフォルトの名無しさん
2018/05/23(水) 19:31:22.87ID:Au5e7VGg 僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』
1FF18
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』
1FF18
561デフォルトの名無しさん
2018/05/24(木) 10:48:33.72ID:cPlRxlDn 1FF18
562デフォルトの名無しさん
2018/06/10(日) 03:50:12.86ID:TMZk6u5D バッチファイルと同じ階層に複数のテキストファイルがあって、
バッチファイルに次々とドラッグ&ドロップしたファイル名(拡張子含む)のみリスト化していくのは下記でできるのは分かったのですが…
@echo off
for %%f in (%*) do (
echo %%~nxf
) >> list.txt
しかし、バッチファイルと同じ階層(別の階層でも良いですが)に複数フォルダがあり、各フォルダ内にテキストファイルが複数ある場合に、
フォルダをバッチファイルに1つ1つD&Dすることにより、そのフォルダ内のファイル名(拡張子)のみリスト化していくコマンドが分からず詰まっています。
/rを使わずにわざわざ1つずつD&Dするのは、単にファイル名の順番ではなく、リスト化を意図した順番にしたいからです。
どなたかお願いします。
バッチファイルに次々とドラッグ&ドロップしたファイル名(拡張子含む)のみリスト化していくのは下記でできるのは分かったのですが…
@echo off
for %%f in (%*) do (
echo %%~nxf
) >> list.txt
しかし、バッチファイルと同じ階層(別の階層でも良いですが)に複数フォルダがあり、各フォルダ内にテキストファイルが複数ある場合に、
フォルダをバッチファイルに1つ1つD&Dすることにより、そのフォルダ内のファイル名(拡張子)のみリスト化していくコマンドが分からず詰まっています。
/rを使わずにわざわざ1つずつD&Dするのは、単にファイル名の順番ではなく、リスト化を意図した順番にしたいからです。
どなたかお願いします。
563デフォルトの名無しさん
2018/06/10(日) 16:08:13.36ID:fV9CYqGb なんだって?
564デフォルトの名無しさん
2018/06/10(日) 19:14:45.63ID:UcKh88So @echo off
cd /d "%~1"
for /r %%f in (*.txt) do (
echo %%~nxf
) >> "%~dp0list.txt"
cd /d "%~1"
for /r %%f in (*.txt) do (
echo %%~nxf
) >> "%~dp0list.txt"
565デフォルトの名無しさん
2018/06/10(日) 20:30:30.29ID:T1x52eBJ まずは、
>リスト化を意図した順番
これを詳しく説明するところからだな
>リスト化を意図した順番
これを詳しく説明するところからだな
566562
2018/06/10(日) 20:59:39.63ID:TMZk6u5D567デフォルトの名無しさん
2018/07/04(水) 22:24:09.32ID:gFgZc5FG GTD
568デフォルトの名無しさん
2018/07/05(木) 16:48:32.11ID:AeL6VB/V GTD
569デフォルトの名無しさん
2018/07/08(日) 09:59:18.33ID:48/+VLR1 ファイル名に半角スペースを含んで拡張子も一つじゃない複数のファイルをドロップしてファイルごとに処理したいんだけどどうfor書いたらいい?
今はこんな感じで書いてるんだけど半角スペースで切れちゃう
for %%f in (%*) do (
echo "%%~nxf"
)
今はこんな感じで書いてるんだけど半角スペースで切れちゃう
for %%f in (%*) do (
echo "%%~nxf"
)
570デフォルトの名無しさん
2018/07/08(日) 17:55:51.22ID:fq5YPvHI571デフォルトの名無しさん
2018/07/08(日) 18:29:00.73ID:48/+VLR1572デフォルトの名無しさん
2018/07/08(日) 19:34:33.35ID:ayaOLpVg573デフォルトの名無しさん
2018/07/08(日) 20:03:03.50ID:noo5aK3K aaa bbb.txtとかa&b.txtみたいなのは%1等で受け取っても切れるね
cmdの独特なコマンドラインパース処理が悪いともいえるし
半角スペース含まれてないのをいいことにD&D時にダブルクォートで囲わないOS側が悪いともいえるし困ったもんだな
D&Dで処理するのはスクリプト言語使った方がいいかもしれん
cmdの独特なコマンドラインパース処理が悪いともいえるし
半角スペース含まれてないのをいいことにD&D時にダブルクォートで囲わないOS側が悪いともいえるし困ったもんだな
D&Dで処理するのはスクリプト言語使った方がいいかもしれん
574デフォルトの名無しさん
2018/07/08(日) 20:56:02.67ID:O/180cHX いまだにスペース問題抱えてるとは思わないよな
もう10数年以上前からあるのに
もう10数年以上前からあるのに
575デフォルトの名無しさん
2018/07/08(日) 20:57:49.35ID:3ARFRdhF こういうの直すと互換性の問題でも起きるの?
576デフォルトの名無しさん
2018/07/08(日) 21:45:56.33ID:PKG5RTYD >571
こうで良くないかなぁ?/d を使うパターン。
for /d %%f in (%*) do (
echo %%~nxf
)
>>575
そういう仕様に依存している過去のコードの動作に影響が出るのさ。
そういうコードは今までずっと企業内で使われている。
作者不詳のまま…
こうで良くないかなぁ?/d を使うパターン。
for /d %%f in (%*) do (
echo %%~nxf
)
>>575
そういう仕様に依存している過去のコードの動作に影響が出るのさ。
そういうコードは今までずっと企業内で使われている。
作者不詳のまま…
577デフォルトの名無しさん
2018/07/08(日) 21:49:43.77ID:PKG5RTYD ごめん、/d でも全角はアウトですた。
わけわからーん
わけわからーん
578デフォルトの名無しさん
2018/07/08(日) 22:24:06.32ID:vrRjc8/F 昔、どこかのサイトで似たようなの見たけど
%* を加工して解決しようとしてたが
数十行もあったようなw
でも、俺が動作確認したら全然ダメだったし
%* を加工して解決しようとしてたが
数十行もあったようなw
でも、俺が動作確認したら全然ダメだったし
579デフォルトの名無しさん
2018/07/08(日) 22:50:01.23ID:E+arm29j580デフォルトの名無しさん
2018/07/08(日) 22:57:56.95ID:vrRjc8/F581デフォルトの名無しさん
2018/07/08(日) 23:16:12.53ID:dDjh6KF7 >>569
for の代わりに forfiles を使うと ""付きファイル名なのでうまくいく(たぶん)
for の代わりに forfiles を使うと ""付きファイル名なのでうまくいく(たぶん)
582デフォルトの名無しさん
2018/07/08(日) 23:36:45.60ID:U6QPmMsx >>569
全角スペースを文字として扱うか、半角スペースと同じように扱うかについて、
cmdは中途半端な扱いをしているようだしな。
フルパスに半角スペースがあると、全角スペースは文字として扱われるが、
フルパスに半角スペースがないと、全角スペースは半角スペースと同じ扱いになる。
しかもクォートしただけでは対処できないという困ったことに。
対処方法としては、フルパスの何処かに半角スペースを入れてクォートするだけ。
全角スペースを文字として扱うか、半角スペースと同じように扱うかについて、
cmdは中途半端な扱いをしているようだしな。
フルパスに半角スペースがあると、全角スペースは文字として扱われるが、
フルパスに半角スペースがないと、全角スペースは半角スペースと同じ扱いになる。
しかもクォートしただけでは対処できないという困ったことに。
対処方法としては、フルパスの何処かに半角スペースを入れてクォートするだけ。
583デフォルトの名無しさん
2018/07/08(日) 23:38:41.06ID:PKG5RTYD584デフォルトの名無しさん
2018/07/08(日) 23:39:37.04ID:O/180cHX 昔からある不具合なんだから互換性も糞もない
585デフォルトの名無しさん
2018/07/08(日) 23:53:08.78ID:E+arm29j586デフォルトの名無しさん
2018/07/09(月) 00:39:27.28ID:CF6LQR6B 全角空白の場合、ダブルクォーテーションで括られないのに、引数の区切り記号として取り扱われるってことか
間に、ダブルクォーテーションで括る操作をかませばいいか
@if (0)==(0) echo off
set arg=%*
for /f "delims=" %%f in ('cscript //nologo /e:jscript "%~f0" %%arg%%') do echo %%f
pause
goto :eof
@end
for(var i=0,arg=WScript.arguments;i<arg.length;i++) WScript.Echo('"'+arg(i)+'"');
間に、ダブルクォーテーションで括る操作をかませばいいか
@if (0)==(0) echo off
set arg=%*
for /f "delims=" %%f in ('cscript //nologo /e:jscript "%~f0" %%arg%%') do echo %%f
pause
goto :eof
@end
for(var i=0,arg=WScript.arguments;i<arg.length;i++) WScript.Echo('"'+arg(i)+'"');
587デフォルトの名無しさん
2018/07/09(月) 00:46:29.65ID:CF6LQR6B いや引数を各行に分解したから、括る必要もないな
最終行訂正
for(var i=0,arg=WScript.arguments;i<arg.length;i++) WScript.Echo(arg(i));
最終行訂正
for(var i=0,arg=WScript.arguments;i<arg.length;i++) WScript.Echo(arg(i));
588デフォルトの名無しさん
2018/07/09(月) 01:05:14.62ID:CF6LQR6B やっぱり括ってたほうがトラブルが少ないかも
あと、半角空白が無いと括られないから、
a^b.txt
とかはBATに入ってくる時点でもうダメだな
%CMDCMDLINE%
とか見てやれば可能だけど
あと、半角空白が無いと括られないから、
a^b.txt
とかはBATに入ってくる時点でもうダメだな
%CMDCMDLINE%
とか見てやれば可能だけど
589デフォルトの名無しさん
2018/07/09(月) 01:10:51.13ID:CF6LQR6B 結論としては、色々苦労して対応するより、
必ず半角空白をいれたフォルダにファイルを置くようにしたほうがいいね
必ず半角空白をいれたフォルダにファイルを置くようにしたほうがいいね
590デフォルトの名無しさん
2018/07/09(月) 01:30:40.02ID:M0pRa/sz これらは""で括れば問題ない
a=b.txt
a;b.txt
a^b.txt
a=b.txt
a;b.txt
a^b.txt
591デフォルトの名無しさん
2018/07/09(月) 01:50:11.67ID:M0pRa/sz これは""で括ってもechoで化ける
%cd%.txt
%cd%.txt
592デフォルトの名無しさん
2018/07/09(月) 21:52:59.96ID:JZ4qv3b5 俺はバッチスクリプトを生成するスクリプトをPerlだのPhysonで書くときは
ダブルクォートで囲わずに全部キャレットでエスケープしてる。
今回の件は %* が勝手に全角空白で区切る仕様が駄目なんだけど…
スクリプトから呼ぶ場合には何とかなっても、D&Dの時点で引数を加工できないってとこに問題がある。
shift しても無駄、っていうところ…。
解決策…、ある??俺は思いつかない…。
ダブルクォートで囲わずに全部キャレットでエスケープしてる。
今回の件は %* が勝手に全角空白で区切る仕様が駄目なんだけど…
スクリプトから呼ぶ場合には何とかなっても、D&Dの時点で引数を加工できないってとこに問題がある。
shift しても無駄、っていうところ…。
解決策…、ある??俺は思いつかない…。
593デフォルトの名無しさん
2018/07/09(月) 22:17:13.68ID:FlHlLFRn nbspでもなるな
594デフォルトの名無しさん
2018/07/09(月) 22:21:09.09ID:CF6LQR6B a&b.txtとかはcmd. exeに入る前に対処しないとね
BAT以外の別スクリプトにD&Dして、そっちで引数を加工後にBATを呼んでもらうようにするぐらい
BAT以外の別スクリプトにD&Dして、そっちで引数を加工後にBATを呼んでもらうようにするぐらい
595デフォルトの名無しさん
2018/07/09(月) 22:25:10.86ID:CF6LQR6B ところでcmdスレなのに、なんでcmd. exeがNGワードなんだよ
596デフォルトの名無しさん
2018/07/09(月) 22:54:28.83ID:XFrzb5uR 確認してないけどcloudflareがコマンドインジェクション対策で弾いてんるんじゃないの
ls -lとかもできなかったはずだし
ls -lとかもできなかったはずだし
597デフォルトの名無しさん
2018/07/10(火) 07:31:20.48ID:LbQkaO6y Ruby, PowerShell を使った方が良い
バグるのは低品質だし、時間の無駄
バグるのは低品質だし、時間の無駄
598デフォルトの名無しさん
2018/07/11(水) 20:28:10.61ID:mCCOIiej >>597
Ruby は実行環境のインスコがいる。
PoerShell はD&Dできない。
それ以前に、特殊な世界ではいまだに XP が現役だったりする。
Win7SP1以降のアップデートパッチを1個でも当てたら動作保証しませんなどというフザけた業務システムも実在する。
レジストリを汚すインスコは駄目だけど、ネイティブコンパイルしたコマンドをコピーして使う分にはおk、てな環境もある。
とりあえず、スクリプトを使用した D&D のファイルパス問題回避の最大公約数的解決は VBScript しかないんじゃないかな。
(さすがに Win9X な環境はもうないだろう…と思うけど)
使える環境なら検討した方がいいけど、安易な「○○使えばいい」という回答は頭が悪すぎる。
Ruby は実行環境のインスコがいる。
PoerShell はD&Dできない。
それ以前に、特殊な世界ではいまだに XP が現役だったりする。
Win7SP1以降のアップデートパッチを1個でも当てたら動作保証しませんなどというフザけた業務システムも実在する。
レジストリを汚すインスコは駄目だけど、ネイティブコンパイルしたコマンドをコピーして使う分にはおk、てな環境もある。
とりあえず、スクリプトを使用した D&D のファイルパス問題回避の最大公約数的解決は VBScript しかないんじゃないかな。
(さすがに Win9X な環境はもうないだろう…と思うけど)
使える環境なら検討した方がいいけど、安易な「○○使えばいい」という回答は頭が悪すぎる。
599デフォルトの名無しさん
2018/07/11(水) 21:11:59.69ID:/R7esjNT なら環境毎に勝手に使えばいいんだから最大公約数なんて決める必要ないのでは
600デフォルトの名無しさん
2018/07/12(木) 01:03:34.20ID:MfQE+JgU NTも現役だよボケ
601デフォルトの名無しさん
2018/07/12(木) 11:56:39.69ID:72SuVZq5 それ以前に、DOS自体が、現e(ry
602デフォルトの名無しさん
2018/07/12(木) 14:54:19.05ID:+klw6xr1 >>569 無理矢理にバッチで書いてみた
@echo off
set "a=%cmdcmdline:"=""%"
setlocal enabledelayedexpansion
set /a b=0,n=0
set "s=" & set "d=""
:x1
if not "!a:~%b%,1!"=="/" set /a b+=1 & goto x1
:x2
if "!a:~%b%,1!"=="!d!" set /a n+=1
if !n! equ 6 set /a b+=2 & goto x3
set /a b+=1 & goto x2
:x3
set "a=!a:~%b%,-2! " & set /a b=0
:x4
if not defined a goto x8
if "!a:~%b%,1!"=="!d!" set /a n=0 & goto x6
下に続く
@echo off
set "a=%cmdcmdline:"=""%"
setlocal enabledelayedexpansion
set /a b=0,n=0
set "s=" & set "d=""
:x1
if not "!a:~%b%,1!"=="/" set /a b+=1 & goto x1
:x2
if "!a:~%b%,1!"=="!d!" set /a n+=1
if !n! equ 6 set /a b+=2 & goto x3
set /a b+=1 & goto x2
:x3
set "a=!a:~%b%,-2! " & set /a b=0
:x4
if not defined a goto x8
if "!a:~%b%,1!"=="!d!" set /a n=0 & goto x6
下に続く
603デフォルトの名無しさん
2018/07/12(木) 14:54:43.36ID:+klw6xr1 :x5
if not "!a:~%b%,1!"==" " set /a b+=1 & goto x5
set "s=!s!!d!!d!!a:~0,%b%!!d!!d! " & set /a b+=1
set "a=!a:~%b%!" & set /a b=0 & goto x4
:x6
if "!a:~%b%,1!"=="!d!" set /a n+=1
if !n! equ 4 set /a b+=1 & goto x7
set /a b+=1 & goto x6
:x7
set "s=!s!!a:~0,%b%! " & set /a b+=1
set "a=!a:~%b%!" & set /a b=0 & goto x4
:x8
set "s=!s:""="!"
endlocal & set s=%s%
for %%f in (%s%) do echo "%%~nxf"
pause
if not "!a:~%b%,1!"==" " set /a b+=1 & goto x5
set "s=!s!!d!!d!!a:~0,%b%!!d!!d! " & set /a b+=1
set "a=!a:~%b%!" & set /a b=0 & goto x4
:x6
if "!a:~%b%,1!"=="!d!" set /a n+=1
if !n! equ 4 set /a b+=1 & goto x7
set /a b+=1 & goto x6
:x7
set "s=!s!!a:~0,%b%! " & set /a b+=1
set "a=!a:~%b%!" & set /a b=0 & goto x4
:x8
set "s=!s:""="!"
endlocal & set s=%s%
for %%f in (%s%) do echo "%%~nxf"
pause
604デフォルトの名無しさん
2018/07/12(木) 20:30:02.59ID:Gmf0IrMF >>602
ファイル名に全角スペースが含まれていない場合に""が一つ余計に出力されます
ファイル名に全角スペースが含まれていない場合に""が一つ余計に出力されます
605デフォルトの名無しさん
2018/07/12(木) 20:30:48.00ID:Gmf0IrMF 訂正
全角スペースが含まれず半角スペースが含まれている場合
全角スペースが含まれず半角スペースが含まれている場合
606デフォルトの名無しさん
2018/07/12(木) 20:48:15.33ID:+klw6xr1 レスありがとう
でもこちらでは再現できない
出来たら具体例を
でもこちらでは再現できない
出来たら具体例を
607デフォルトの名無しさん
2018/07/12(木) 21:08:43.02ID:+klw6xr1 もしかしたらset文の行末にスペースがありませんかね?
行末のスペースが有ったら全て削除してみて下さい
行末のスペースが有ったら全て削除してみて下さい
608デフォルトの名無しさん
2018/07/12(木) 21:25:30.03ID:Gmf0IrMF >>606
もうちょい検証してこんなファイル名で発生するのを確認しました
"aーa b.txt"
""
専ブラからコピーしたんでスペースとかはありませんでした
長めのスクリプト貼るときはpastebinとか使ったほうがいいかもしれません
もうちょい検証してこんなファイル名で発生するのを確認しました
"aーa b.txt"
""
専ブラからコピーしたんでスペースとかはありませんでした
長めのスクリプト貼るときはpastebinとか使ったほうがいいかもしれません
609デフォルトの名無しさん
2018/07/12(木) 21:31:57.91ID:+klw6xr1 バッチファイル名にスペースがあると不味いようです
610デフォルトの名無しさん
2018/07/12(木) 21:37:35.42ID:+klw6xr1 違うな...
ファイル名なんですか?
ファイル名なんですか?
611デフォルトの名無しさん
2018/07/12(木) 21:39:01.64ID:Gmf0IrMF バッチファイル自体はtest6.batなのでスペースはありません
このファイル名だと処理自体が終わらなくなりました
ーa ーb ーc.txt
このファイル名だと処理自体が終わらなくなりました
ーa ーb ーc.txt
612デフォルトの名無しさん
2018/07/12(木) 21:39:34.44ID:Gmf0IrMF 最初に検証したファイル名は
aーa b.txt
です
aーa b.txt
です
613デフォルトの名無しさん
2018/07/12(木) 21:52:50.96ID:+klw6xr1 バッチファイル名
"test.bat" がOK, "test - コピー.bat" が NG
"ー" がダメ文字っぽい
なんだこりゃ
"test.bat" がOK, "test - コピー.bat" が NG
"ー" がダメ文字っぽい
なんだこりゃ
614デフォルトの名無しさん
2018/07/12(木) 22:45:26.82ID:+klw6xr1 >>612
とりあえず最初の3行を
@echo off
setlocal enabledelayedexpansion
set "a=!cmdcmdline:"=""!"
set "a=!a:ー=/1!"
最後の5行を
:x8
set "s=!s:/1=ー!"
set "s=!s:""="!"
endlocal & set s=%s%
for %%f in (%s%) do echo "%%~nxf"
pause
ダメ文字の詳細は不明
まだ有ったら、/2 /3 ... 置換
とりあえず最初の3行を
@echo off
setlocal enabledelayedexpansion
set "a=!cmdcmdline:"=""!"
set "a=!a:ー=/1!"
最後の5行を
:x8
set "s=!s:/1=ー!"
set "s=!s:""="!"
endlocal & set s=%s%
for %%f in (%s%) do echo "%%~nxf"
pause
ダメ文字の詳細は不明
まだ有ったら、/2 /3 ... 置換
615デフォルトの名無しさん
2018/07/12(木) 23:31:47.70ID:+klw6xr1 これも追加
5行目
set "a=!a:―=/2!"
:x8の次の行に
set "s=!s:/2=―!"
5行目
set "a=!a:―=/2!"
:x8の次の行に
set "s=!s:/2=―!"
616デフォルトの名無しさん
2018/07/13(金) 00:39:35.42ID:7GlypEZW 漢字コードが関係しているのかも
shift−jis
chcp 932
utf-8
chcp 65001
で試してみたら
shift−jis
chcp 932
utf-8
chcp 65001
で試してみたら
617デフォルトの名無しさん
2018/07/13(金) 06:59:58.30ID:laaSwUH8 if文のバグ?
@echo off
setlocal enabledelayedexpansion
set a=ーー
set b=――
set c=xx
set d=""
if "!a!"=="!d!" echo NG1
if "!b!"=="!d!" echo NG2
if "!c!"=="!d!" echo NG3
pause
結果は
NG1
NG2
@echo off
setlocal enabledelayedexpansion
set a=ーー
set b=――
set c=xx
set d=""
if "!a!"=="!d!" echo NG1
if "!b!"=="!d!" echo NG2
if "!c!"=="!d!" echo NG3
pause
結果は
NG1
NG2
618デフォルトの名無しさん
2018/07/13(金) 19:59:02.76ID:laaSwUH8619デフォルトの名無しさん
2018/07/13(金) 20:29:29.46ID:laaSwUH8620デフォルトの名無しさん
2018/07/14(土) 06:43:27.53ID:8rUsawXH >>612
if文の不具合は引用符絡みのようなので
それを削除して書き直しました
@echo off
call :set_arg arg
if not defined arg goto :eof
for %%f in (%arg%) do echo "%%~nxf"
pause & goto :eof
:set_arg
setlocal enabledelayedexpansion
set a=!cmdcmdline!
set /a b=0,n=0
set "s=" & set "c=/" & set "e= " & set "d=""
:x1
if not !a:~%b%^,1!==!c! set /a b+=1 & goto x1
:x2
if !a:~%b%^,1!==!d! set /a n+=1
if !n! equ 3 set /a b+=2 & goto x3
set /a b+=1 & goto x2
下に続く
if文の不具合は引用符絡みのようなので
それを削除して書き直しました
@echo off
call :set_arg arg
if not defined arg goto :eof
for %%f in (%arg%) do echo "%%~nxf"
pause & goto :eof
:set_arg
setlocal enabledelayedexpansion
set a=!cmdcmdline!
set /a b=0,n=0
set "s=" & set "c=/" & set "e= " & set "d=""
:x1
if not !a:~%b%^,1!==!c! set /a b+=1 & goto x1
:x2
if !a:~%b%^,1!==!d! set /a n+=1
if !n! equ 3 set /a b+=2 & goto x3
set /a b+=1 & goto x2
下に続く
621デフォルトの名無しさん
2018/07/14(土) 06:43:59.73ID:8rUsawXH :x3
set a=!a:~%b%,-1!& set /a b=0
:x4
if not defined a goto x8
if !a:~%b%^,1!==!d! set /a n=0 & goto x6
:x5
if not !a:~%b%^,1!==!e! set /a b+=1 & goto x5
set s=!s!!d!!a:~0,%b%!!d!!e!& set /a b+=1
set a=!a:~%b%!& set /a b=0 & goto x4
:x6
if !a:~%b%^,1!==!d! set /a n+=1
if !n! equ 2 set /a b+=1 & goto x7
set /a b+=1 & goto x6
:x7
set s=!s!!a:~0,%b%!!e!& set /a b+=1
set a=!a:~%b%!& set /a b=0 & goto x4
:x8
if defined s set s=!s:~0,-1!
endlocal & set %1=%s%
set a=!a:~%b%,-1!& set /a b=0
:x4
if not defined a goto x8
if !a:~%b%^,1!==!d! set /a n=0 & goto x6
:x5
if not !a:~%b%^,1!==!e! set /a b+=1 & goto x5
set s=!s!!d!!a:~0,%b%!!d!!e!& set /a b+=1
set a=!a:~%b%!& set /a b=0 & goto x4
:x6
if !a:~%b%^,1!==!d! set /a n+=1
if !n! equ 2 set /a b+=1 & goto x7
set /a b+=1 & goto x6
:x7
set s=!s!!a:~0,%b%!!e!& set /a b+=1
set a=!a:~%b%!& set /a b=0 & goto x4
:x8
if defined s set s=!s:~0,-1!
endlocal & set %1=%s%
622デフォルトの名無しさん
2018/07/14(土) 09:47:55.50ID:17hM4zE5623デフォルトの名無しさん
2018/07/14(土) 18:45:20.78ID:8rUsawXH624デフォルトの名無しさん
2018/07/14(土) 22:32:02.01ID:utl6Xayz625デフォルトの名無しさん
2018/07/14(土) 23:07:08.10ID:LxoRiW+E 日本は異常なほどソフト弱すぎだわな
626デフォルトの名無しさん
2018/07/15(日) 00:45:51.50ID:LqRrN2Y+ リダイレクト使ってバッチ内に記述したテキストをファイルに出力すると、行数が増えるにつれて
どんどん処理が遅くなるんですが(多分ファイルのオープンとクローズの処理が重たい
んだとは思うけど)、何十行もあるテキストでも一括で書き込んで早くする方法とかないですか?
ただ不思議なのは、ソースとなるテキストを別のテキストファイルからforで読み込みして
各行を逐次出力ファイルにリダイレクトで書き出した場合はそんなに遅くないんですよねぇ。
どんどん処理が遅くなるんですが(多分ファイルのオープンとクローズの処理が重たい
んだとは思うけど)、何十行もあるテキストでも一括で書き込んで早くする方法とかないですか?
ただ不思議なのは、ソースとなるテキストを別のテキストファイルからforで読み込みして
各行を逐次出力ファイルにリダイレクトで書き出した場合はそんなに遅くないんですよねぇ。
627デフォルトの名無しさん
2018/07/15(日) 07:47:51.60ID:3kOM020K628626
2018/07/15(日) 10:00:49.84ID:LqRrN2Y+ >>627
コードといっても何も特別なことはしてないんだけど、何十行というのは嘘で
当該箇所確認してみたら実際には何百行もありました。
----- sample1.bat
echo [%time%] 開始
type nul > "D:\tmp\out-file.txt"
echo hoge>> "D:\tmp\out-file.txt"
echo hoge>> "D:\tmp\out-file.txt"
〜延々と600行近い繰り返し〜
echo hoge>> "D:\tmp\out-file.txt"
echo hoge>> "D:\tmp\out-file.txt"
echo [%time%] 終了
exit /b
-----
これで大体3〜4秒くらい。実際のコードは文字列も長いし、
途中条件式が入ってたりするのでもうあと1〜2秒ほど長い。
前の投稿で「forで回してリダイレクトした方が何故か早い」と書き込んだけど、勘違い。
改めて確認したらほとんど変わらなかった。
コードといっても何も特別なことはしてないんだけど、何十行というのは嘘で
当該箇所確認してみたら実際には何百行もありました。
----- 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で回してリダイレクトした方が何故か早い」と書き込んだけど、勘違い。
改めて確認したらほとんど変わらなかった。
629626
2018/07/15(日) 10:01:23.98ID:LqRrN2Y+ >>627
----- sample2.bat
echo [%time%] 開始
type nul > "D:\tmp\out-file.txt"
for /f "usebackq delims=" %%L in (`findstr /n .* "D:\tmp\hoge-source.txt"`) do (
set str_temp=%%L
call :redirect-loop
)
echo [%time%] 終了
exit /b
:redirect-loop
echo %str_temp%>> "D:\tmp\out-file.txt"
exit /b
-----
教えてもらった全体を()で囲ってまとめてリダイレクトしたら一瞬で処理完了しました。ありがとうございます。
実際のコードは条件式の他に変数展開した文字列の中に()が含まれていたりするので、要所要所で使い分けが必要そうですが。
----- sample2.bat
echo [%time%] 開始
type nul > "D:\tmp\out-file.txt"
for /f "usebackq delims=" %%L in (`findstr /n .* "D:\tmp\hoge-source.txt"`) do (
set str_temp=%%L
call :redirect-loop
)
echo [%time%] 終了
exit /b
:redirect-loop
echo %str_temp%>> "D:\tmp\out-file.txt"
exit /b
-----
教えてもらった全体を()で囲ってまとめてリダイレクトしたら一瞬で処理完了しました。ありがとうございます。
実際のコードは条件式の他に変数展開した文字列の中に()が含まれていたりするので、要所要所で使い分けが必要そうですが。
630デフォルトの名無しさん
2018/07/15(日) 11:22:20.37ID:SEkGxxwq へー(´・∀・`)
631627
2018/07/15(日) 12:40:32.94ID:3kOM020K >>628-629
あー、600行もあったらファイルのオープン・クローズ処理の影響が大きくなるねぇ。
カッコで括ると「括った内容、1行で延々書かれたものとして処理」してくれる。多分こういう用途のためにあるんだと思う。
なのでカッコ内の特殊文字エスケープは通常と変わらなかったはず…。(確証はないけど)
俺はヒアドキュメントっぽいことがしたい時、いちいちリダイレクトを入れるのが面倒&読みづらいこともあってこう書いてるわ。
あー、600行もあったらファイルのオープン・クローズ処理の影響が大きくなるねぇ。
カッコで括ると「括った内容、1行で延々書かれたものとして処理」してくれる。多分こういう用途のためにあるんだと思う。
なのでカッコ内の特殊文字エスケープは通常と変わらなかったはず…。(確証はないけど)
俺はヒアドキュメントっぽいことがしたい時、いちいちリダイレクトを入れるのが面倒&読みづらいこともあってこう書いてるわ。
632デフォルトの名無しさん
2018/07/18(水) 10:40:36.37ID:w8OpeSfX633デフォルトの名無しさん
2018/07/18(水) 21:57:41.23ID:6GF3Pq4/ 別のバッチファイルにする必要も無いんじゃね?
@echo off
call :abc > d.txt
goto :eof
:abc
echo xxx
echo yyy
echo zzz
@echo off
call :abc > d.txt
goto :eof
:abc
echo xxx
echo yyy
echo zzz
634デフォルトの名無しさん
2018/07/18(水) 22:23:21.60ID:pnNaFbbR それもいいんじゃない?
635デフォルトの名無しさん
2018/07/18(水) 22:31:48.09ID:pnNaFbbR ちょっと聞きたいんだが…
for /f "tokens=1* delims=:" %%A in ('findstr /n "^" filename.txt') do echo.%%B
これ、バッチが標準入力から受け取ったものを処理する雛形らしいんだけど…
findstr /n "^"
これアリか?正規表現として成立してない!?何だこれ??
findstr /n ".*"
ならアリだしこう書くべし。正規表現として何でもマッチする。
なんだけど何で findstr /n "^" が通るのか分からんわ。
for /f "tokens=1* delims=:" %%A in ('findstr /n "^" filename.txt') do echo.%%B
これ、バッチが標準入力から受け取ったものを処理する雛形らしいんだけど…
findstr /n "^"
これアリか?正規表現として成立してない!?何だこれ??
findstr /n ".*"
ならアリだしこう書くべし。正規表現として何でもマッチする。
なんだけど何で findstr /n "^" が通るのか分からんわ。
636デフォルトの名無しさん
2018/07/18(水) 22:46:17.26ID:6GF3Pq4/ それ、確か : で始まる行が不味いんじゃね?
637デフォルトの名無しさん
2018/07/18(水) 23:08:39.37ID:apOKL4Dj638デフォルトの名無しさん
2018/07/18(水) 23:17:52.69ID:pnNaFbbR >>636
https://blogs.yahoo.co.jp/kerupani/15344574.html
が上手いことやってる。感心した。万能ではないらしいが検証中。
tee が作れるかもしれん。
>>637
マジだった。findstrはアホの子だった。
https://blogs.yahoo.co.jp/kerupani/15344574.html
が上手いことやってる。感心した。万能ではないらしいが検証中。
tee が作れるかもしれん。
>>637
マジだった。findstrはアホの子だった。
639デフォルトの名無しさん
2018/07/18(水) 23:20:00.00ID:pnNaFbbR あー、もっとも、find /v "" が空文字列にマッチする時点で駄目ではある。
640デフォルトの名無しさん
2018/07/18(水) 23:47:59.03ID:Ppp31GO+ このスレは勉強になる
641デフォルトの名無しさん
2018/07/19(木) 00:47:19.86ID:oVpGn6oR >>635
正規表現としてじゃなくて cmd のエスケープかと。
echo;abc | findstr /n ""
FINDSTR: 検索文字列がありません。
echo;abc | findstr /n "^"
1:abc
正規表現としてじゃなくて cmd のエスケープかと。
echo;abc | findstr /n ""
FINDSTR: 検索文字列がありません。
echo;abc | findstr /n "^"
1:abc
642デフォルトの名無しさん
2018/07/19(木) 06:16:34.58ID:hT+uAClu >>641
^ の左側に " があるので ^ はただの文字
^ の左側に " があるので ^ はただの文字
643デフォルトの名無しさん
2018/07/19(木) 08:15:18.80ID:31+wDFSY プロセスが特定の文字列を出力したら処理を終了させたくて下記のようなの書いてみたけど思うように動かないです。
process.exe | find "hoge"&&TASKkill /F /im process.exe
&&で指定したコマンドは元のプロセスが終了しないと実行されないのでしょうか?
process.exe | find "hoge"&&TASKkill /F /im process.exe
&&で指定したコマンドは元のプロセスが終了しないと実行されないのでしょうか?
644デフォルトの名無しさん
2018/07/19(木) 08:26:36.29ID:HqFtoS+0 >>643
多分、process.exeが終了しなくても、標準入出力をクローズすればパイプは渡ってくるんじゃないかな?
多分、process.exeが終了しなくても、標準入出力をクローズすればパイプは渡ってくるんじゃないかな?
645デフォルトの名無しさん
2018/07/19(木) 22:23:54.31ID:I1yUatr2646デフォルトの名無しさん
2018/07/20(金) 01:23:20.22ID:FDkJiEQ5 コマンドプロンプトって、論理和使えないんだっけな
647デフォルトの名無しさん
2018/07/20(金) 02:06:59.97ID:2iB3qPvx & コマンドの連結
&& 前のコマンドの実行結果が正常(ERRORCODE=0の場合)に後ろのコマンドを実行する
|| 前のコマンドの実行結果が失敗(ERRORCODE>0の場合)に後ろのコマンドを実行する
&& 前のコマンドの実行結果が正常(ERRORCODE=0の場合)に後ろのコマンドを実行する
|| 前のコマンドの実行結果が失敗(ERRORCODE>0の場合)に後ろのコマンドを実行する
648デフォルトの名無しさん
2018/07/20(金) 02:28:52.11ID:2iB3qPvx ERRORLEVELだったよ
あと、環境変数は実行前に展開されるため、前のコマンドで設定した値を後ろのコマンドで参照すると思わぬ結果になる
for文での注意と同様で、遅延環境変数を使うとかすれば大丈夫だが
また行を分ける場合に%errorlevel%を使うなら参照だけにすること
(設定すると単なる環境変数として扱われる)
あと、そもそも前のコマンドが終了してないのにパイプにデータが渡ってくるのかも要確認
あと、環境変数は実行前に展開されるため、前のコマンドで設定した値を後ろのコマンドで参照すると思わぬ結果になる
for文での注意と同様で、遅延環境変数を使うとかすれば大丈夫だが
また行を分ける場合に%errorlevel%を使うなら参照だけにすること
(設定すると単なる環境変数として扱われる)
あと、そもそも前のコマンドが終了してないのにパイプにデータが渡ってくるのかも要確認
649643
2018/07/20(金) 04:26:00.68ID:ukKUYn/2 レスありがとうございます
標準入出力をクローズというのがちょっと分からないんですがどのようにすればいいのでしょうか?
標準入出力をクローズというのがちょっと分からないんですがどのようにすればいいのでしょうか?
650デフォルトの名無しさん
2018/07/20(金) 06:55:00.15ID:gIwkChrm process.exe に標準入出力をクローズさせるんだよ
651デフォルトの名無しさん
2018/07/22(日) 19:18:33.01ID:WPYgWuMH そんなことするぐらいならvbsのExec使えばいいと思うの
652デフォルトの名無しさん
2018/07/22(日) 19:49:03.97ID:Gp0M410Q653デフォルトの名無しさん
2018/07/22(日) 20:27:20.33ID:jf6K150S 終了してから TASKkill しても見つからんエラーが出るだけで無意味
654643
2018/07/22(日) 20:27:43.37ID:oUJ4s6M9 リダイレクトしてテキストファイルに出力しながらstartで立ち上げた別のbatにfindして貰う事で解決しました。
655デフォルトの名無しさん
2018/07/22(日) 23:35:54.49ID:FoHjHQaV >>652
process.exeってのが自作の場合、そうしろってことだろ
process.exeってのが自作の場合、そうしろってことだろ
656デフォルトの名無しさん
2018/07/23(月) 17:41:55.79ID:1W7qAEKf Linuxでコマンド実行した結果とWindowsでコマンド実行した結果を
一つのファイルに書き出したいんだけど、改行コードが違っている
バッチファイルでCR LFではなくLFで出力したいなと思って
このコードを見つけたんだが何やってるのかさっぱりわからない
<NUL set /p=message が set /p=message <NUL と同じ意味で
「メッセージを表示してユーザーの入力内容を変数に入れるコマンド」の
代入先変数の省略 + 入力内容省略 = 改行なしecho
ということはわかったんだけど、^%LF%%LF% がなんなのか
なんでこれでうまく動くのかわからん
https://stackoverflow.com/questions/9876370/echo-line-to-a-file-on-windows-with-a-unix-linebreak
SET LF=^
REM important to have two blank lines after the SET command
<NUL set /p=test line^%LF%%LF%> t.txt
一つのファイルに書き出したいんだけど、改行コードが違っている
バッチファイルでCR LFではなくLFで出力したいなと思って
このコードを見つけたんだが何やってるのかさっぱりわからない
<NUL set /p=message が set /p=message <NUL と同じ意味で
「メッセージを表示してユーザーの入力内容を変数に入れるコマンド」の
代入先変数の省略 + 入力内容省略 = 改行なしecho
ということはわかったんだけど、^%LF%%LF% がなんなのか
なんでこれでうまく動くのかわからん
https://stackoverflow.com/questions/9876370/echo-line-to-a-file-on-windows-with-a-unix-linebreak
SET LF=^
REM important to have two blank lines after the SET command
<NUL set /p=test line^%LF%%LF%> t.txt
657656
2018/07/24(火) 01:43:43.96ID:tpeQiESg658デフォルトの名無しさん
2018/07/24(火) 01:44:16.69ID:tpeQiESg 違うこと調べていて、たまたま答えにぶつかったぜw
http://kensou1900.blog96.f c2.com/blog-en try-7.html
> キャレット(^)直後の文字がLFの場合は特殊な動作になる。
> キャレ ット(^)の後ろにLFがある場合、そのLFは削除され、
> 次の文字がエスケープされる。不思議なことにキャレ ット(^)の後ろにLFが2つ続く場合は、
> 前のLFは消えるが、後ろのLFは通常の文字のように扱われる。
> この動作を使ってLFをコマンドに渡したり、変数名や変数の値に使用することができる。
>
> LFがエスケープされた場合、バッチファイルの続 きを取り込まないといけなく なる場合がある。その場合、1.から3.が再度行われるようだ。
set /p=test line^[LF][LF]
これはこの部分だな
> 不思議なことにキャレット(^)の後ろにLFが2つ続く場合は、
> 前のLFは消えるが、後ろのLFは通常の文字のように扱われる。
単なる不思議な動作か。なるほどな!
SET LF=^
REM important to have two blank lines after the SET command
こっちも未だよくわからいが、
まあこれも単なる不思議な動作だろう
なっとくした
http://kensou1900.blog96.f c2.com/blog-en try-7.html
> キャレット(^)直後の文字がLFの場合は特殊な動作になる。
> キャレ ット(^)の後ろにLFがある場合、そのLFは削除され、
> 次の文字がエスケープされる。不思議なことにキャレ ット(^)の後ろにLFが2つ続く場合は、
> 前のLFは消えるが、後ろのLFは通常の文字のように扱われる。
> この動作を使ってLFをコマンドに渡したり、変数名や変数の値に使用することができる。
>
> LFがエスケープされた場合、バッチファイルの続 きを取り込まないといけなく なる場合がある。その場合、1.から3.が再度行われるようだ。
set /p=test line^[LF][LF]
これはこの部分だな
> 不思議なことにキャレット(^)の後ろにLFが2つ続く場合は、
> 前のLFは消えるが、後ろのLFは通常の文字のように扱われる。
単なる不思議な動作か。なるほどな!
SET LF=^
REM important to have two blank lines after the SET command
こっちも未だよくわからいが、
まあこれも単なる不思議な動作だろう
なっとくした
659デフォルトの名無しさん
2018/07/24(火) 01:45:28.43ID:tpeQiESg なんでこれが書き込めないんだよ
fc2.com
fc2.com
660デフォルトの名無しさん
2018/07/24(火) 01:46:02.21ID:tpeQiESg ↑これは書き込めるのか
↓これはどうだ?
a.fc2.com
↓これはどうだ?
a.fc2.com
661デフォルトの名無しさん
2018/07/24(火) 01:46:25.75ID:tpeQiESg kensou1900.blg96.fc2.com
662デフォルトの名無しさん
2018/07/24(火) 01:46:48.81ID:tpeQiESg blog96.fc2.com
663デフォルトの名無しさん
2018/07/24(火) 01:47:44.81ID:tpeQiESg aaaablog96.fc2.com とかいう文字が書き込めないみたいだな
664デフォルトの名無しさん
2018/07/24(火) 01:48:34.51ID:tpeQiESg aaaablog96.fc2.com/aaa.html
665デフォルトの名無しさん
2018/07/24(火) 01:48:55.71ID:tpeQiESg よくわからん
aaaablog96.fc2.com/blog.html
aaaablog96.fc2.com/blog.html
666デフォルトの名無しさん
2018/07/24(火) 01:49:23.86ID:tpeQiESg よくわからん
aaaa.blog.fc2.com/blog.html
aaaa.blog.fc2.com/blog.html
667デフォルトの名無しさん
2018/07/24(火) 01:50:02.74ID:tpeQiESg 面倒くさいから今度からURLは全部短縮URLを使おう
668デフォルトの名無しさん
2018/07/24(火) 02:13:31.40ID:JJ11wMVF 改行は[LF]じゃなくて[CR][LF]だと思うんだが、どうなんだろう?
669デフォルトの名無しさん
2018/07/24(火) 04:54:02.60ID:tpeQiESg Windowsの改行コードは[CR][LF]だよ
だけど、処理の一部として、Linux側にコマンドを投げ
その出力をログファイルに書き込むんだよ
Linuxの改行コードは[LF]
その同じログファイルにWindowsからも書き込むんだよ
こっちは当然[CR][LF]
まざるとうざくなるので、どちらかに統一したかったんだよ
だけど、処理の一部として、Linux側にコマンドを投げ
その出力をログファイルに書き込むんだよ
Linuxの改行コードは[LF]
その同じログファイルにWindowsからも書き込むんだよ
こっちは当然[CR][LF]
まざるとうざくなるので、どちらかに統一したかったんだよ
670デフォルトの名無しさん
2018/07/24(火) 06:25:50.86ID:c84rNbv+ どうでもいいが投稿練習は他でやれ
671デフォルトの名無しさん
2018/07/24(火) 12:14:08.82ID:HxFyIf/c Winでもコンソールは何故かLFだよ
混同すんなよ
混同すんなよ
672デフォルトの名無しさん
2018/07/24(火) 14:01:42.76ID:tpeQiESg >>671
コンソールがLFって意味わからん。
改行コードをどう出力するかはコマンド次第だろ
Windowsはデフォルトの改行コードがCR LFだってだけ
それに従わないプログラムもあるよ
(例 nkf は出力改行コードを変更できる)
コンソールがLFって意味わからん。
改行コードをどう出力するかはコマンド次第だろ
Windowsはデフォルトの改行コードがCR LFだってだけ
それに従わないプログラムもあるよ
(例 nkf は出力改行コードを変更できる)
673デフォルトの名無しさん
2018/07/24(火) 18:49:48.84ID:bSDo/9Xp PSでもcmdでもいいんだけど一行で文字列+連番を出力できない?
echo aaa + (1..10)
とかやると別々に出ちゃう
echo aaa + (1..10)
とかやると別々に出ちゃう
674デフォルトの名無しさん
2018/07/24(火) 18:57:15.74ID:g/ZYUHlh >>673
for /L %%i in (1,1,10) do echo aaa %%i
for /L %%i in (1,1,10) do echo aaa %%i
675デフォルトの名無しさん
2018/07/24(火) 19:19:46.86ID:g/ZYUHlh 連番の意味を履き違えていたかもしれない
676デフォルトの名無しさん
2018/07/24(火) 23:16:42.86ID:MWPxR8WZ >>673
いまいちよくわからんけど abc1 abc2 abc3 abc4 … って言うのが欲しいの?PS なら
[String]::Join(' ', (1..10 | %{ "abc$_" } ))
でいける
いまいちよくわからんけど abc1 abc2 abc3 abc4 … って言うのが欲しいの?PS なら
[String]::Join(' ', (1..10 | %{ "abc$_" } ))
でいける
677デフォルトの名無しさん
2018/07/24(火) 23:54:21.38ID:bSDo/9Xp678デフォルトの名無しさん
2018/07/26(木) 13:37:52.34ID:wiek7dkQ >>671
CRTがテキストモードの時にはCRを足してくれてるんだよ?
CRTがテキストモードの時にはCRを足してくれてるんだよ?
679デフォルトの名無しさん
2018/07/26(木) 18:09:38.18ID:B1r9j6T7 改行コードはコマンドに依存する
dir /? > d.txt
sort /? > s.txt
dir /? > d.txt
sort /? > s.txt
680デフォルトの名無しさん
2018/07/29(日) 20:28:04.05ID:AzlFD5Cm 質問です
ファイルをbatファイルにドラッグアンドドロップしてファイル名等を得たいのですが
2番目のドライブ名+パス名(ファイル名以外)が表示されません (%~dpと表示される)
どう記述すればいいのでしょうか
もう2時間悩んでおります
echo off
for %%f in (%*) do (
echo %%f
echo %%~dp
echo %%~nf
pause
)
ファイルをbatファイルにドラッグアンドドロップしてファイル名等を得たいのですが
2番目のドライブ名+パス名(ファイル名以外)が表示されません (%~dpと表示される)
どう記述すればいいのでしょうか
もう2時間悩んでおります
echo off
for %%f in (%*) do (
echo %%f
echo %%~dp
echo %%~nf
pause
)
681デフォルトの名無しさん
2018/07/29(日) 20:35:34.14ID:u49zNrL5682デフォルトの名無しさん
2018/07/29(日) 20:36:23.74ID:2kcGqgTd doの後のカッコ使うな
683デフォルトの名無しさん
2018/07/29(日) 23:23:01.82ID:AzlFD5Cm684デフォルトの名無しさん
2018/07/31(火) 00:35:30.31ID:eJ/lX+1f685デフォルトの名無しさん
2018/07/31(火) 04:53:16.45ID:vnodIDx/ Win10のコマンドプロンプト画面では改行と折り返しを区別してコピーできるようになったね。これすごく便利。
他に改善点とかあるのかな?
他に改善点とかあるのかな?
686デフォルトの名無しさん
2018/07/31(火) 05:31:48.07ID:R/dSWHzC687デフォルトの名無しさん
2018/08/03(金) 10:35:50.90ID:w2m/pEoW windows板のスレに書いてしまったので詳細はそちらを参照して頂きたいのですが
https://mevius.5ch.net/test/read.cgi/win/1381119881/327
この件について詳細をご存知の方あるいは解説されているサイトをご存知の方は
ご教示頂けないでしょうか?
https://mevius.5ch.net/test/read.cgi/win/1381119881/327
この件について詳細をご存知の方あるいは解説されているサイトをご存知の方は
ご教示頂けないでしょうか?
688デフォルトの名無しさん
2018/08/03(金) 12:24:06.93ID:r+5aCgkd 再現しない。よくソース見直してみて
おそらく単に遅延変数展開だけの問題に見える。
おそらく単に遅延変数展開だけの問題に見える。
689687
2018/08/04(土) 01:49:02.03ID:z4XK4aXP プログラムを問題の箇所だけ抜き出して実行しても同じ結果になります。
xxxを未定義状態にしてから%xxx%を引数にして実行するとやはり
「echo %aaa%|more」の結果がyyyと表示されます
当方の環境はWindows7 SP1です
これはこう動作するように作られた仕様なのかそれともあてにならない不思議動作なのか
cmdのバグなのか判断したいです
xxxを未定義状態にしてから%xxx%を引数にして実行するとやはり
「echo %aaa%|more」の結果がyyyと表示されます
当方の環境はWindows7 SP1です
これはこう動作するように作られた仕様なのかそれともあてにならない不思議動作なのか
cmdのバグなのか判断したいです
690デフォルトの名無しさん
2018/08/04(土) 03:29:11.21ID:XmDLxyoB ん?せやで?Windows 7はデフォルトの設定が違うんやで
しらんかったんか?cmd /?とかしてみな。
しらんかったんか?cmd /?とかしてみな。
691687
2018/08/04(土) 05:41:55.21ID:z4XK4aXP cmd /? にも setlocal /? にも echo /? にも
echoとパイプ併用時の環境変数の二重展開について記述は無いようです
echoとパイプ併用時の環境変数の二重展開について記述は無いようです
692デフォルトの名無しさん
2018/08/04(土) 07:14:19.75ID:ZE1/UEds ありまぁ〜す
693687
2018/08/04(土) 07:43:36.85ID:z4XK4aXP 別のものを見ているのかもしれません。
そちらには何と書いてありますか?
そちらには何と書いてありますか?
694デフォルトの名無しさん
2018/08/04(土) 07:51:40.55ID:HzKYXCJW パイプってCall文でサブルーチン処理してるような物だし、call文と同じ展開をすると思っとけばいいんじゃね?
695687
2018/08/04(土) 09:07:28.54ID:z4XK4aXP なるほど。
では逆にあえて二重展開したい場合はcallを使ったほうが無難でしょうか?
では逆にあえて二重展開したい場合はcallを使ったほうが無難でしょうか?
696デフォルトの名無しさん
2018/08/04(土) 11:22:09.92ID:HzKYXCJW call文で変数内変数が1ネスト展開されるのはパイプよりは有名だと思う
697デフォルトの名無しさん
2018/08/04(土) 11:35:44.15ID:1BI89n66 一番知られて無いのが、for /f文の('コマンド')が同じく二重展開されるってのかな
698デフォルトの名無しさん
2018/08/04(土) 11:40:02.48ID:1BI89n66 いや本当は、コマンドの中で^を付けてエスケープしないといけない場合があることは
結構知られているんだけど、それが二重展開のせいだってことが認識されてないわけで
結構知られているんだけど、それが二重展開のせいだってことが認識されてないわけで
699デフォルトの名無しさん
2018/08/04(土) 12:17:58.67ID:hhRJxbHb700687
2018/08/05(日) 05:37:23.17ID:DoWKU022 理解できました
みなさんありがとうございました
みなさんありがとうございました
701デフォルトの名無しさん
2018/08/06(月) 20:49:35.73ID:9+kXWEFM echo は結構罠
if "%errlorleverl%" ... も罠。
はやくバッチから救われたい…
if "%errlorleverl%" ... も罠。
はやくバッチから救われたい…
702デフォルトの名無しさん
2018/08/11(土) 19:21:13.27ID:vbsvSkjm 何が罠なのかわからん
703デフォルトの名無しさん
2018/08/11(土) 20:56:08.62ID:WNr/dTgn つづりを覚えられない奴には罠なんだろ w
704デフォルトの名無しさん
2018/08/11(土) 21:47:36.56ID:HlmNsX8I こういうことじゃないかな?
set ERRORLEVEL=0
hogecommand
if %ERRORLEVEL% gtr 0 goto :ERROR
これが絶対真にならず、ジャンプしないとか
set ERRORLEVEL=0
hogecommand
if %ERRORLEVEL% gtr 0 goto :ERROR
これが絶対真にならず、ジャンプしないとか
705デフォルトの名無しさん
2018/08/12(日) 03:12:06.01ID:lJZ67VC6 エラーは1以上とはかぎらないんだよな、コマンドによっては。
706デフォルトの名無しさん
2018/08/12(日) 09:09:39.33ID:pT5cyKVs >>703
echo hoge > test.txt
て書くと「hoge」の後の半角空白までがtest.txtに出力されるんだよ。
>>704
代入しなくても、errorlevel を環境変数として判定に使うと正常に動かない場合がある。
具体的には
echo n | comp A.exe B.exe >NUL 2>&1
if not "%ERRORLEVEL%"="0" (
:
このとき、何故か%ERRORLEVEL% は常に「0」。バイナリ不一致でも「0」。
echo n | comp A.exe B.exe >NUL 2>&1
if not errorlevel 1 (
:
だと正常に動く。何故だか分からない。
echo hoge > test.txt
て書くと「hoge」の後の半角空白までがtest.txtに出力されるんだよ。
>>704
代入しなくても、errorlevel を環境変数として判定に使うと正常に動かない場合がある。
具体的には
echo n | comp A.exe B.exe >NUL 2>&1
if not "%ERRORLEVEL%"="0" (
:
このとき、何故か%ERRORLEVEL% は常に「0」。バイナリ不一致でも「0」。
echo n | comp A.exe B.exe >NUL 2>&1
if not errorlevel 1 (
:
だと正常に動く。何故だか分からない。
707デフォルトの名無しさん
2018/08/12(日) 09:13:22.78ID:pT5cyKVs708デフォルトの名無しさん
2018/08/12(日) 09:20:16.40ID:yoDY/qSn if の比較は = じゃなくて == だろ
709デフォルトの名無しさん
2018/08/12(日) 09:40:11.52ID:pT5cyKVs710デフォルトの名無しさん
2018/08/12(日) 11:52:31.87ID:eNrGPpfD 何故か以前にいろいろ間違いすぎなんだよ
ゼロから書き直せ
ゼロから書き直せ
711デフォルトの名無しさん
2018/08/12(日) 14:40:43.26ID:IZr1Emsm712デフォルトの名無しさん
2018/08/12(日) 16:49:52.15ID:dh6WaJfS >>704>>706
ERRORLEVELは代入すると返却値として使えなくなるんじゃ
なかったっけ?
だからやるならば
set ERRORLEVEL=
だけにしないとだめなのでは
ただ、これをやってバッチ内でERRORLEVEL環境変数の
初期化みたいなことしてもうまく動かないこともあったような
気がするけど何か勘違いしてるんだろうな
ERRORLEVELは代入すると返却値として使えなくなるんじゃ
なかったっけ?
だからやるならば
set ERRORLEVEL=
だけにしないとだめなのでは
ただ、これをやってバッチ内でERRORLEVEL環境変数の
初期化みたいなことしてもうまく動かないこともあったような
気がするけど何か勘違いしてるんだろうな
713デフォルトの名無しさん
2018/08/12(日) 18:02:08.07ID:aLWFoJnR >>706
パイプの動作が原因だろう
パイプの右側は子タスクでの実行となる(おそらくは)
メインタスクに環境を引き継がないんだと思う
echo "a"|for /f %%i in ('find "a"') do set x=OK
echo.%x%
これで%x%には値が入らない
echo "a"|find "a"&set x=OK
なら%x%にはOKが入るが
echo "a"|(find "a"&set x=OK)
では%x%にはOKが入らない
パイプの動作が原因だろう
パイプの右側は子タスクでの実行となる(おそらくは)
メインタスクに環境を引き継がないんだと思う
echo "a"|for /f %%i in ('find "a"') do set x=OK
echo.%x%
これで%x%には値が入らない
echo "a"|find "a"&set x=OK
なら%x%にはOKが入るが
echo "a"|(find "a"&set x=OK)
では%x%にはOKが入らない
714デフォルトの名無しさん
2018/08/12(日) 18:09:31.24ID:aLWFoJnR >>713
下2つ&は&&の間違いだが、別に&だろうが&&だろうが(この場合の)結果は変わらない
下2つ&は&&の間違いだが、別に&だろうが&&だろうが(この場合の)結果は変わらない
715デフォルトの名無しさん
2018/08/12(日) 18:16:28.72ID:lJZ67VC6 パイプはcallと一緒だなやはり
716デフォルトの名無しさん
2018/08/12(日) 18:36:12.51ID:lJZ67VC6 setコマンドの長いヘルプの下の方に
「ユーザーがこれらの名前の変数を明示的に定義する場合、
その定義は下記の動的な定義を無効にします。」
と書かれてる。errorlevelをsetするのは回避した方がいいだろう
「ユーザーがこれらの名前の変数を明示的に定義する場合、
その定義は下記の動的な定義を無効にします。」
と書かれてる。errorlevelをsetするのは回避した方がいいだろう
717デフォルトの名無しさん
2018/08/12(日) 18:40:34.53ID:aLWFoJnR ついでに言っとくと
パイプはデータの受け手が子タスクになったけど
for /fの'コマンド'は送り手が子タスクになる
従って、'コマンド'の中で環境変数に値を入れても、メインタスクには引き継がれない
パイプはデータの受け手が子タスクになったけど
for /fの'コマンド'は送り手が子タスクになる
従って、'コマンド'の中で環境変数に値を入れても、メインタスクには引き継がれない
718デフォルトの名無しさん
2018/08/12(日) 21:23:34.47ID:pT5cyKVs >>710
難癖付けてばかりで話題提供もできない人はゼロから人生をやり直した方が(ry
難癖付けてばかりで話題提供もできない人はゼロから人生をやり直した方が(ry
719デフォルトの名無しさん
2018/08/12(日) 21:38:30.71ID:pT5cyKVs >>713
んー、俺はもうそこまで調べる気もなくてね…ほぼ諦めてる。
子タスクとかどこの文献見ればあるんだろう?
あってもなくても、んなテクニック、引継ぎできる代物でもあるまい…。
例えば、
type data.txt | cscript //nologo hoge.vbs
if not errorlevel 1 (
:
これも実は…駄目なのだ!!
VBScript側で Call WScript.Quit(1)
で抜けられれば引っかかるが…
想定外の変なデータを食わされてランタイムエラーで落ちた場合には引っかからない。
cscript はスクリプトエンジンだから別物扱いしとこ…てなところで。
hoge.vbs が正常終了する直前に success.txt を空で作るようにしといて。
del success.txt
type data.txt | cscript //nologo hoge.vbs
if exist success.txt (
:
)
del success.txt
こんな感じにするしかなかったし、これならせめて引継ぎができると思う。
んー、俺はもうそこまで調べる気もなくてね…ほぼ諦めてる。
子タスクとかどこの文献見ればあるんだろう?
あってもなくても、んなテクニック、引継ぎできる代物でもあるまい…。
例えば、
type data.txt | cscript //nologo hoge.vbs
if not errorlevel 1 (
:
これも実は…駄目なのだ!!
VBScript側で Call WScript.Quit(1)
で抜けられれば引っかかるが…
想定外の変なデータを食わされてランタイムエラーで落ちた場合には引っかからない。
cscript はスクリプトエンジンだから別物扱いしとこ…てなところで。
hoge.vbs が正常終了する直前に success.txt を空で作るようにしといて。
del success.txt
type data.txt | cscript //nologo hoge.vbs
if exist success.txt (
:
)
del success.txt
こんな感じにするしかなかったし、これならせめて引継ぎができると思う。
720デフォルトの名無しさん
2018/08/12(日) 21:45:20.77ID:pT5cyKVs あ、ごめん。
if not errorlevel 1 (
正常終了処理
) else (
異常終了処理
)
て書くべきだった
if not errorlevel 1 (
正常終了処理
) else (
異常終了処理
)
て書くべきだった
721デフォルトの名無しさん
2018/08/13(月) 00:05:28.17ID:MtAcIApx 勉強になる話題だけど、バッチファイルは言語仕様の規模に比して闇が深すぎると思う
722デフォルトの名無しさん
2018/08/13(月) 00:46:15.48ID:bTGAGeMt723デフォルトの名無しさん
2018/08/13(月) 03:10:07.37ID:EnLsbSTB >>719
子タスクと言ったのは俺の推測(想像)でしかないから
データの受け渡しを行うのには、送り手と受け手の両者が存在しないと変だろうってことからね
あと、タスクというのも、適当な概念だから
親の環境を引き継いで生成された子環境のことね
実体はスレッドだろうと想像するけど
子タスクと言ったのは俺の推測(想像)でしかないから
データの受け渡しを行うのには、送り手と受け手の両者が存在しないと変だろうってことからね
あと、タスクというのも、適当な概念だから
親の環境を引き継いで生成された子環境のことね
実体はスレッドだろうと想像するけど
724デフォルトの名無しさん
2018/08/13(月) 10:15:08.27ID:aFOAPcea >>703
綴りといえばenabledelayedexpantionも罠レベルだよ・・・誰だこれ考えたの('A`)
綴りといえばenabledelayedexpantionも罠レベルだよ・・・誰だこれ考えたの('A`)
725デフォルトの名無しさん
2018/08/13(月) 10:38:49.38ID:WsZfoIsu なるほど引っかかってる
726デフォルトの名無しさん
2018/08/15(水) 02:41:45.12ID:xax+OHuY 元の英語がわかれば
enable delayed expansion
を繋げただけなんだよ
enable delayed expansion
を繋げただけなんだよ
727デフォルトの名無しさん
2018/08/15(水) 13:28:33.22ID:j7d0pce0 質問させてください。
Linuxでいうところの、/dev/nullで標準入力待ちを終了させるのはどうすればいいのでしょうか。
具体的には、Windows向けのopensslコマンドを実行しています。
openssl s_client -connect 〜とやると標準出力が一通り出たところで入力待ちになる仕様で、
コマンドプロンプト上だとCtrl+Cで止めてあげる必要があります。
Linuxだと、末尾に< /dev/nullで終わらせられるのですが、Windowsバッチで同じように終了させる方法は無いでしょうか。
Linuxでいうところの、/dev/nullで標準入力待ちを終了させるのはどうすればいいのでしょうか。
具体的には、Windows向けのopensslコマンドを実行しています。
openssl s_client -connect 〜とやると標準出力が一通り出たところで入力待ちになる仕様で、
コマンドプロンプト上だとCtrl+Cで止めてあげる必要があります。
Linuxだと、末尾に< /dev/nullで終わらせられるのですが、Windowsバッチで同じように終了させる方法は無いでしょうか。
728デフォルトの名無しさん
2018/08/15(水) 13:50:50.34ID:o8lgioa7 < nul
じゃダメなの?
じゃダメなの?
729デフォルトの名無しさん
2018/08/15(水) 13:54:24.10ID:j7d0pce0 >>728
書いてなくてすみません。それだとダメでした。
書いてなくてすみません。それだとダメでした。
730デフォルトの名無しさん
2018/08/15(水) 14:06:33.66ID:o8lgioa7731デフォルトの名無しさん
2018/08/15(水) 14:36:26.98ID:j7d0pce0 >>730
参考サイトありがとうございます。
先ほど教えていただいたのと同じ< nulですよね。
サンプルコマンドの通り打ってみても入力待ちで止まります…。
念のためOpenSSLを入れ直しても変わりませんでした。
サンプルでパイプで渡してる直前まで( < nul 2> nul)で試すと、
実行結果がダーっと出て、入力待ちで止まるんですよね…。
参考サイトありがとうございます。
先ほど教えていただいたのと同じ< nulですよね。
サンプルコマンドの通り打ってみても入力待ちで止まります…。
念のためOpenSSLを入れ直しても変わりませんでした。
サンプルでパイプで渡してる直前まで( < nul 2> nul)で試すと、
実行結果がダーっと出て、入力待ちで止まるんですよね…。
732デフォルトの名無しさん
2018/08/15(水) 15:17:17.37ID:j7d0pce0 下のサイトのやり方も参考にしつつやってみましたが、どれも結果は変わらずでした。
後出しですみませんが、当方の環境はWin10 Pro 1803、opensslは1.0.2m.1.0.2oでやってました。
https://stackoverflow.com/questions/25760596/how-to-terminate-openssl-s-client-after-connection
回答くださった方、ありがとうございました。
もしやってみて、何言ってんだ、できたぞ?という方いらっしゃいましたら教えていただければ幸いです。
後出しですみませんが、当方の環境はWin10 Pro 1803、opensslは1.0.2m.1.0.2oでやってました。
https://stackoverflow.com/questions/25760596/how-to-terminate-openssl-s-client-after-connection
回答くださった方、ありがとうございました。
もしやってみて、何言ってんだ、できたぞ?という方いらっしゃいましたら教えていただければ幸いです。
733デフォルトの名無しさん
2018/08/15(水) 15:19:22.69ID:xax+OHuY 制御文字を入力できるエディタ(サクラエディタ等)で
バッチを開いて
nulの代りに[0x03]か0x04の制御コード入れてみては?
バッチを開いて
nulの代りに[0x03]か0x04の制御コード入れてみては?
734デフォルトの名無しさん
2018/08/15(水) 15:25:45.29ID:jNJ7KLOy >>732
普段OpenSSLは使わないけどたまたまインストールしてあったOpenSSL 1.1.0hで出来たよ
コマンドはこう
openssl s_client -connect example.com:443 < nul 2> nul | openssl x509 -text | findstr Not
普段OpenSSLは使わないけどたまたまインストールしてあったOpenSSL 1.1.0hで出来たよ
コマンドはこう
openssl s_client -connect example.com:443 < nul 2> nul | openssl x509 -text | findstr Not
735デフォルトの名無しさん
2018/08/15(水) 15:59:22.79ID:j7d0pce0 >>734
試していただいてありがとうございます。
そのコマンドを実行したときなのですが、コンソールが返ってくるまで1分ほどかかりませんか? すぐ返りますか?
< nulの有無に関わらず1分ほど待つので、単にタイムアウトか何かで終了しているのかなと思っております。
nulを入力として受け取っているなら、すぐに1個目のパイプより前のコマンドは終わるはずだと思いまして…。
試していただいてありがとうございます。
そのコマンドを実行したときなのですが、コンソールが返ってくるまで1分ほどかかりませんか? すぐ返りますか?
< nulの有無に関わらず1分ほど待つので、単にタイムアウトか何かで終了しているのかなと思っております。
nulを入力として受け取っているなら、すぐに1個目のパイプより前のコマンドは終わるはずだと思いまして…。
736デフォルトの名無しさん
2018/08/15(水) 16:01:57.88ID:jNJ7KLOy >>735
すぐ返ってくるよ
すぐ返ってくるよ
737デフォルトの名無しさん
2018/08/15(水) 16:09:56.08ID:j7d0pce0738733
2018/08/15(水) 16:14:15.33ID:xax+OHuY >>733
1)コマンドプロンプトで下記のように入力し、hoge.txtを作る
copy con hoge.txt[Enter]
[Ctrl+d]
[Ctrl+z]
2)バッチの方で
<hoge.txt
とすればコンソールでCtrl+Dを入力したのと同じ効果となるはず
1)コマンドプロンプトで下記のように入力し、hoge.txtを作る
copy con hoge.txt[Enter]
[Ctrl+d]
[Ctrl+z]
2)バッチの方で
<hoge.txt
とすればコンソールでCtrl+Dを入力したのと同じ効果となるはず
739デフォルトの名無しさん
2018/08/15(水) 16:47:26.04ID:j7d0pce0740デフォルトの名無しさん
2018/08/15(水) 21:05:55.42ID:cg3gjcxB 悪いけど、Windowsバッチに鉄板を求めるのも、追いかけるのも無駄。
歴史的経緯でそうなってしまっている。マトモな資料なんかありゃない。
NULの解釈がコマンドによって違ったって全く不思議じゃあない。
犬のクソをクソだと知りつつカリントウだと思いながら食わなければならないような、そんな代物。
好きで書いてる奴なんかほとんどいないと思う。
バッチで書いた方が良いと判断できる材料がなければVBscriptやPowerShellで書いた方が遥かにいい。
環境が許せば他の言語の導入を検討するのも大いにいい。
よく知られたコマンドをよく知られたイディオム下で使うのでもなければ、バッチでなんか書かない方がいい。
それでもクソみたいにハマることがあるんだから。
歴史的経緯でそうなってしまっている。マトモな資料なんかありゃない。
NULの解釈がコマンドによって違ったって全く不思議じゃあない。
犬のクソをクソだと知りつつカリントウだと思いながら食わなければならないような、そんな代物。
好きで書いてる奴なんかほとんどいないと思う。
バッチで書いた方が良いと判断できる材料がなければVBscriptやPowerShellで書いた方が遥かにいい。
環境が許せば他の言語の導入を検討するのも大いにいい。
よく知られたコマンドをよく知られたイディオム下で使うのでもなければ、バッチでなんか書かない方がいい。
それでもクソみたいにハマることがあるんだから。
741デフォルトの名無しさん
2018/08/15(水) 21:14:01.94ID:OWPSpuGG UNCパスを一向に解釈しないのがとにかく糞だと思う
742デフォルトの名無しさん
2018/08/15(水) 21:52:07.27ID:X+03HcfZ 移動はできないけど解釈はできるでしょ…
743740
2018/08/15(水) 21:52:48.84ID:X+03HcfZ xcopy のヘルプは酷い。
Vistaでは「推奨されない。使わないで。robocopyを使って」みたいな文言が出てきた。理由は記述なし。
この文言、7以降では消えた。
ネットワーク越しにxcopy中に通信が切れたらどうなるか、MSは知ってたはずなんだが。
xcopyを使いまくってるクソベンダーどもから「直しきれない。フザけんな!」とでも突き上げを食らったんだろうか?
こういうところも本当に信用できない。
Vistaでは「推奨されない。使わないで。robocopyを使って」みたいな文言が出てきた。理由は記述なし。
この文言、7以降では消えた。
ネットワーク越しにxcopy中に通信が切れたらどうなるか、MSは知ってたはずなんだが。
xcopyを使いまくってるクソベンダーどもから「直しきれない。フザけんな!」とでも突き上げを食らったんだろうか?
こういうところも本当に信用できない。
744740
2018/08/15(水) 21:58:51.70ID:X+03HcfZ >>741
cmd「あ、pushdとかでヨロ」
ネットワーク系で言えばpingが酷い。
if errorlevel そのものが効かない。エラーしたらズルズルっと抜ける。
あ、某SIer(富〇通)のバッチを思い出した。
pingでTCPの疎通確認?エラー処理なし?
バッチとか以前の問題だった。
富〇通は日本から消え去ればいいと思った。
cmd「あ、pushdとかでヨロ」
ネットワーク系で言えばpingが酷い。
if errorlevel そのものが効かない。エラーしたらズルズルっと抜ける。
あ、某SIer(富〇通)のバッチを思い出した。
pingでTCPの疎通確認?エラー処理なし?
バッチとか以前の問題だった。
富〇通は日本から消え去ればいいと思った。
745740
2018/08/15(水) 22:00:15.25ID:X+03HcfZ おいおい、さっきからレスに「ドット・エグゼ」を半角英数で書くと弾かれるようになってるぜ…
なんだいこりゃ。
なんだいこりゃ。
746デフォルトの名無しさん
2018/08/16(木) 00:37:28.93ID:fpSDK1Rz 標準入力から読むんじゃなければ <nul なんか無意味だろうに...
747デフォルトの名無しさん
2018/08/16(木) 00:47:34.46ID:nXvfu44n pingは標準エラー出力の文言で処理するのが慣例だろ...
748デフォルトの名無しさん
2018/08/16(木) 04:14:43.69ID:W93QKVeg エロ動画.avi .exe
749デフォルトの名無しさん
2018/08/16(木) 06:00:01.74ID:3IMawj9A すみません、CMDを最近やり始めたのですが
ネットで検索すると%Aと%%Aのように「%」が1つ付く場合と2つ付く場合があったのですが
どういう違いがあるのでしょうか?
ネットで検索すると%Aと%%Aのように「%」が1つ付く場合と2つ付く場合があったのですが
どういう違いがあるのでしょうか?
750デフォルトの名無しさん
2018/08/16(木) 06:18:11.25ID:nXvfu44n >>749
%Aはfor文内でのみつかう変数。for文をコマンドラインから直接実行する場合は%A
バッチスクリプト内で記述する場合は%%Aとする。
for /? (またはhelp for)
で表示されるヘルプの上の方に書かれている。
%Aはfor文内でのみつかう変数。for文をコマンドラインから直接実行する場合は%A
バッチスクリプト内で記述する場合は%%Aとする。
for /? (またはhelp for)
で表示されるヘルプの上の方に書かれている。
751デフォルトの名無しさん
2018/08/16(木) 11:22:52.16ID:hWBtBIZ+ batファイルで任意のプログラムを実行し、一定時間後に強制終了させる(画面を閉じる)という処理は実現可能ですか?
任意のプログラムも同じDOS画面上で走ります。
タイマーでtaskkillを実行してcmdを終了させるというのを考えたんですが、cmdが複数あると使えないので他に方法があれば知りたいです。
任意のプログラムも同じDOS画面上で走ります。
タイマーでtaskkillを実行してcmdを終了させるというのを考えたんですが、cmdが複数あると使えないので他に方法があれば知りたいです。
752デフォルトの名無しさん
2018/08/16(木) 15:41:05.25ID:KoNkkRtT753デフォルトの名無しさん
2018/08/16(木) 19:34:15.23ID:hWBtBIZ+ >>752
ありがとうございます!
ありがとうございます!
754デフォルトの名無しさん
2018/08/16(木) 20:50:06.40ID:qKowi4/2 >>747
否。
pingはICMP。pingが通ってもTCPが通るという保証は無い。
逆に、pingは返さないがTCPが通る環境だってある。
ただでさえpingコマンドの動きはおかしいのに、pingでTCP疎通確認しました!というのが大手SIer(富〇通とか)が首を釣るべきポイント。
ダミーの共有フォルダを用意して
dir \\hoge.local\hoge
とかでSMBを経由したTCPの疎通が確認できるんだぜ??
頭が悪いとしか言いようがない。
もう一度言う。
pingではTCPの疎通は「絶対に確認できない」
否。
pingはICMP。pingが通ってもTCPが通るという保証は無い。
逆に、pingは返さないがTCPが通る環境だってある。
ただでさえpingコマンドの動きはおかしいのに、pingでTCP疎通確認しました!というのが大手SIer(富〇通とか)が首を釣るべきポイント。
ダミーの共有フォルダを用意して
dir \\hoge.local\hoge
とかでSMBを経由したTCPの疎通が確認できるんだぜ??
頭が悪いとしか言いようがない。
もう一度言う。
pingではTCPの疎通は「絶対に確認できない」
755デフォルトの名無しさん
2018/08/16(木) 20:52:58.55ID:qKowi4/2 言っとくけど、LinuxのpingでもTCPの疎通は確認できないからな。分かってると思うけど。
756デフォルトの名無しさん
2018/08/16(木) 21:07:41.39ID:t6OwQxX1757デフォルトの名無しさん
2018/08/16(木) 21:10:18.18ID:nXvfu44n プロトコルが別物というのはその通りだな、
コマンドプロンプトでのエラーハンドリングの話かと思ったわ(分かっちゃいるとは思うが)
コマンドプロンプトでのエラーハンドリングの話かと思ったわ(分かっちゃいるとは思うが)
758デフォルトの名無しさん
2018/08/16(木) 22:17:08.25ID:fpSDK1Rz >>754
わなくらい以降、SMBを通すようなネットワーク組むような業者はやばいだろ
わなくらい以降、SMBを通すようなネットワーク組むような業者はやばいだろ
759デフォルトの名無しさん
2018/08/16(木) 22:22:12.09ID:3IMawj9A >>750
ありがとうございます!理解しました。
ありがとうございます!理解しました。
760デフォルトの名無しさん
2018/08/16(木) 22:30:01.84ID:3IMawj9A このスレは1年半前に立ってまだ760レスぐらいですが
ここ1ヶ月半で見ると200レスぐらい書き込みがあるので
CMDの人気が出てきたということでよいのでしょうか?
ここ1ヶ月半で見ると200レスぐらい書き込みがあるので
CMDの人気が出てきたということでよいのでしょうか?
761デフォルトの名無しさん
2018/08/16(木) 22:36:21.06ID:qKowi4/2762デフォルトの名無しさん
2018/08/16(木) 22:51:43.40ID:t6OwQxX1763デフォルトの名無しさん
2018/08/16(木) 23:03:11.26ID:qKowi4/2 >>762
1. 富〇通のシステムは、端末の起動時にサーバーにTCPの疎通確認をする。それがただpingを打つ「だけ」。通ろうが通るまいが処理を続行。意味がない。
2. 俺はこう思った。「端末が見に行く共有フォルダをdirしてエラー検出した方が確実でしょ?何でこうしないの?」
て言わなきゃ分からないアレですか?
1. 富〇通のシステムは、端末の起動時にサーバーにTCPの疎通確認をする。それがただpingを打つ「だけ」。通ろうが通るまいが処理を続行。意味がない。
2. 俺はこう思った。「端末が見に行く共有フォルダをdirしてエラー検出した方が確実でしょ?何でこうしないの?」
て言わなきゃ分からないアレですか?
764デフォルトの名無しさん
2018/08/16(木) 23:07:16.23ID:m8VsM5un つまりイントラネットなわけね
ならpingが通れば回線チェックできるとしても問題なかろう
鯖がpingを許可してるシステムだろうし
ならpingが通れば回線チェックできるとしても問題なかろう
鯖がpingを許可してるシステムだろうし
765デフォルトの名無しさん
2018/08/16(木) 23:19:02.45ID:qKowi4/2 >>764
おい。
十歩くらいは譲ってやる。
だがお前は馬鹿。
問題。
Windowsサーバーはネットワークの場所の検出に失敗することがあります。
パブリックと勘違いしたらpingを返さないことがあります。
さて、検出に失敗する場合はどのような場合でしょうか?
答えではないが発生例
富〇通に渡された手順通りにサーバーを再起動したらそうなった
> ならpingが通れば回線チェックできるとしても問題なかろう
pingの結果だけを信用したら駄目なんだよクソが!!
どんだけレベル低いんだお前??
…ああもう呆れる…。
おい。
十歩くらいは譲ってやる。
だがお前は馬鹿。
問題。
Windowsサーバーはネットワークの場所の検出に失敗することがあります。
パブリックと勘違いしたらpingを返さないことがあります。
さて、検出に失敗する場合はどのような場合でしょうか?
答えではないが発生例
富〇通に渡された手順通りにサーバーを再起動したらそうなった
> ならpingが通れば回線チェックできるとしても問題なかろう
pingの結果だけを信用したら駄目なんだよクソが!!
どんだけレベル低いんだお前??
…ああもう呆れる…。
766デフォルトの名無しさん
2018/08/16(木) 23:23:10.64ID:qKowi4/2 んー、バッチだけじゃなくてWinの挙動も関係すんなぁ…ネットワーク系は。
まあいい、また今度な。
まあいい、また今度な。
767デフォルトの名無しさん
2018/08/16(木) 23:27:50.00ID:qKowi4/2 あ、答えはTechNetとかに載ってるから興味ある人はてきとーに調べといて。
英語だけど。
英語だけど。
768デフォルトの名無しさん
2018/08/16(木) 23:59:08.11ID:fpSDK1Rz >>765
パブリックと勘違いしてるなら、それはpingでも検出できるじゃん。
パブリックと勘違いしてるなら、それはpingでも検出できるじゃん。
769デフォルトの名無しさん
2018/08/17(金) 01:30:25.51ID:a2i7eL0Z 絶対に正しい自分の主張を認めてもらいたいだけの人なんだから相手しても意味ないでしょ
770デフォルトの名無しさん
2018/08/17(金) 02:44:03.57ID:jfy/CF71 昔はpingを使っていたが、今は
set errorlevel=
arp -a|findstr 192.168.0. >nul
if not %ERRORLEVEL% == 0 goto オフライン処理
set errorlevel=
arp -a|findstr 192.168.0. >nul
if not %ERRORLEVEL% == 0 goto オフライン処理
771デフォルトの名無しさん
2018/08/17(金) 05:25:51.61ID:KaaDwp63 >>763
本当に頭悪いんだな w
いきなりdir \\hoge.local\hogeが失敗しただけだと何が起きてるのかわからん
pingが通ってるかどうかで障害の範囲がある程度絞れる
ちょっとしたシステムだとネットワークとサーバーで違うベンダーが構築してるとかあるからどっちを呼び出すかの切り分けに使ったりする
本当に頭悪いんだな w
いきなりdir \\hoge.local\hogeが失敗しただけだと何が起きてるのかわからん
pingが通ってるかどうかで障害の範囲がある程度絞れる
ちょっとしたシステムだとネットワークとサーバーで違うベンダーが構築してるとかあるからどっちを呼び出すかの切り分けに使ったりする
772デフォルトの名無しさん
2018/08/17(金) 06:18:35.06ID:+gK4oX51 ping ホスト名
で打ってるならその端末がWINS名前解決出来てるかは分かる
でも「TCP疎通」ってタームはたしかに違和感ある。某省庁案件で富士通のインフラ部隊と仕事したが、そんなターム使って無かったけどな...
で打ってるならその端末がWINS名前解決出来てるかは分かる
でも「TCP疎通」ってタームはたしかに違和感ある。某省庁案件で富士通のインフラ部隊と仕事したが、そんなターム使って無かったけどな...
773デフォルトの名無しさん
2018/08/17(金) 07:30:14.12ID:J26jcjpU ネットワーク=TCPみたいに言ってる奴は見たことあるな
たいてい文脈でわかるからいちいち指摘なんてしないけどね
たいてい文脈でわかるからいちいち指摘なんてしないけどね
774デフォルトの名無しさん
2018/08/18(土) 21:40:50.22ID:/0AtM/3Y ただの記号ですら言い方は人それぞれだからなあ
ピリオド : ドット、ポチ、ポツ
アスタリスク : アスター、コメ、ピカ
アンダースコア : アンダーバー、アンスコ
ピリオド : ドット、ポチ、ポツ
アスタリスク : アスター、コメ、ピカ
アンダースコア : アンダーバー、アンスコ
775デフォルトの名無しさん
2018/08/18(土) 22:00:05.69ID:/4eOy7p1 アンスコは言いにくい
776デフォルトの名無しさん
2018/08/19(日) 08:47:38.57ID:DFKp/EIO 一番言いやすいだろ
777デフォルトの名無しさん
2018/08/19(日) 10:20:25.64ID:vvrGLkFs 777
778デフォルトの名無しさん
2018/08/19(日) 20:48:42.50ID:10g4+5oK >>768
パブリックと誤検出した場合、当たり前だけどpingは返さない。
ドメインコントローラーが勘違いした場合、端末も勘違いすることがある。
クソな再起動手順がもたらす問題を回避するために…「全プロファイルでファイァーウォール停止」を要求されたらそりゃたまらんわ。
正しい再起動手順でやれば、そんな事態は一切おこらないってのにさ。
>>771
おまい、スレ違い。
ここはバッチスクリプトスレ。
過不足ない通信が可能かどうかを調べるバッチなりなんなりを使うのが主題。
実際にエラーが出て連絡を受けた人間が調査の手始めにpingを打つことは普通にある。
>>772
???WINS名前解決???
何世紀の人????
「少なくとも、相手がTCPを使ったサービスを実行できる状態にある」の言いに使ってるけどね。間違いじゃないだろ。
本当に相手のサービスそのものがダウンしているかどうかにはtelnetを使ったりするし。MS純正じゃないのも含めて。
でもまぁここはバッチスクリプトのスレなので、pingが通った=TCPもイケる、は間違いなのは別で調べて頂戴。
>>770
arp -a って…ギャグのつもりなのか?笑えない。
パブリックと誤検出した場合、当たり前だけどpingは返さない。
ドメインコントローラーが勘違いした場合、端末も勘違いすることがある。
クソな再起動手順がもたらす問題を回避するために…「全プロファイルでファイァーウォール停止」を要求されたらそりゃたまらんわ。
正しい再起動手順でやれば、そんな事態は一切おこらないってのにさ。
>>771
おまい、スレ違い。
ここはバッチスクリプトスレ。
過不足ない通信が可能かどうかを調べるバッチなりなんなりを使うのが主題。
実際にエラーが出て連絡を受けた人間が調査の手始めにpingを打つことは普通にある。
>>772
???WINS名前解決???
何世紀の人????
「少なくとも、相手がTCPを使ったサービスを実行できる状態にある」の言いに使ってるけどね。間違いじゃないだろ。
本当に相手のサービスそのものがダウンしているかどうかにはtelnetを使ったりするし。MS純正じゃないのも含めて。
でもまぁここはバッチスクリプトのスレなので、pingが通った=TCPもイケる、は間違いなのは別で調べて頂戴。
>>770
arp -a って…ギャグのつもりなのか?笑えない。
779デフォルトの名無しさん
2018/08/19(日) 21:11:07.45ID:t1KS71KR 頓珍漢な粘着男乙
780デフォルトの名無しさん
2018/08/19(日) 23:03:31.03ID:LYxx7csc pingが通る=回線が正常に繋がっている(途中で断線してない)
だろ
だろ
781デフォルトの名無しさん
2018/08/19(日) 23:06:16.33ID:LYxx7csc ところでSMBはWINS使ったっけ?
NBT(NetBIOS over TCP)じゃなかったっけ
NBT(NetBIOS over TCP)じゃなかったっけ
782デフォルトの名無しさん
2018/08/19(日) 23:30:42.84ID:P2diSE/Q はなし逸れるが、今の現場は大手の保険会社なのに10BASE-Tとかで驚くわ
20年間変わってないのかコレ?
まあ俺はしがない派遣IT土方だが
20年間変わってないのかコレ?
まあ俺はしがない派遣IT土方だが
783デフォルトの名無しさん
2018/08/20(月) 01:33:20.51ID:6ECfAniW スレタイ読めるか?
784デフォルトの名無しさん
2018/08/20(月) 01:43:26.60ID:r/LoJW6u 読めないから派遣なんだろ
785デフォルトの名無しさん
2018/08/20(月) 01:52:55.69ID:tHLrzyTk786デフォルトの名無しさん
2018/08/20(月) 06:28:09.44ID:iMQAgpc+ >>781
WINS と NBT はレイヤー違うぞ
WINS と NBT はレイヤー違うぞ
787デフォルトの名無しさん
2018/08/21(火) 09:38:25.46ID:OVCCyiik if スクリーンセーバーが起動されていなかったら
if 各種省電力モードになっていなかったら
if モニタの電源が消されていなかったら
if モニタの前に人が座っていたら
できる範囲でいいのでこれらの判定方法を教えてください
if 各種省電力モードになっていなかったら
if モニタの電源が消されていなかったら
if モニタの前に人が座っていたら
できる範囲でいいのでこれらの判定方法を教えてください
788デフォルトの名無しさん
2018/08/21(火) 12:42:43.53ID:tF5C/oBj pauseすれば人が見てるかどうかは判定できるが、
立っててもいいから駄目だなあ。
立っててもいいから駄目だなあ。
789デフォルトの名無しさん
2018/08/21(火) 12:45:10.41ID:QEEd6INS モニター叩き割ると多分全部常にfalseになるから解決できると思う
790デフォルトの名無しさん
2018/08/21(火) 20:46:58.06ID:voBQjli5 ぐぐると全部答え出てくるな
791デフォルトの名無しさん
2018/08/24(金) 19:24:58.18ID:PvZ4HV2M findstr はアホの子と言ってすみませんでした。
「^」や「$」は位置にマッチするメタ文字でした。
お詫びと訂正を申し上げます。
別件で、find /v "" が空文字列にマッチする件は納得いかないため調査中です。
「^」や「$」は位置にマッチするメタ文字でした。
お詫びと訂正を申し上げます。
別件で、find /v "" が空文字列にマッチする件は納得いかないため調査中です。
792デフォルトの名無しさん
2018/08/24(金) 20:28:21.96ID:HeVrgcXD findstrは対象文字コードの異なる場合のテキスト検索が難しい。
chcpして、バッチ自体の文字コードも合わせても、リテラルの検索パターン指定だとダメ。
そんな場合はpowershell Select-String
でやると良い
chcpして、バッチ自体の文字コードも合わせても、リテラルの検索パターン指定だとダメ。
そんな場合はpowershell Select-String
でやると良い
793デフォルトの名無しさん
2018/08/25(土) 11:04:29.30ID:55pEzwdh バッチファイルで上の階層に移動し
そのカレントディレクトリを変数に格納したいんです。
現在の記述
cd ../
set PARENT_DIR=%CD%\
これを一行にまとめる方法ってありませんかね?
for文やパイプラインを使っても駄目でした...
そのカレントディレクトリを変数に格納したいんです。
現在の記述
cd ../
set PARENT_DIR=%CD%\
これを一行にまとめる方法ってありませんかね?
for文やパイプラインを使っても駄目でした...
794デフォルトの名無しさん
2018/08/25(土) 11:36:40.35ID:RyVjXt1l 難しく考えすぎ、単純に&&か&で繋げばいんじゃね?
795デフォルトの名無しさん
2018/08/25(土) 20:37:51.27ID:RyVjXt1l796デフォルトの名無しさん
2018/08/26(日) 11:25:48.74ID:PFw0pViP 遅延展開でfor文ループをやってるバッチファイル(*.bat)があるんですが
このバッチファイルをメモ帳で開いて内容をクリップボードにコピーして
それをコマンドプロンプト画面に貼り付けたら同じように動作しますか?
このバッチファイルをメモ帳で開いて内容をクリップボードにコピーして
それをコマンドプロンプト画面に貼り付けたら同じように動作しますか?
797デフォルトの名無しさん
2018/08/26(日) 12:04:17.20ID:Kp4FoNKX なんか初歩的やなあ。
遅延展開だから最初にsetlocal enabledelayedexpansion
を書かいて&で繋げて次のコマンドを書ける。ただし%%は%に置き換える必要がある
遅延展開だから最初にsetlocal enabledelayedexpansion
を書かいて&で繋げて次のコマンドを書ける。ただし%%は%に置き換える必要がある
798デフォルトの名無しさん
2018/08/26(日) 13:07:23.92ID:ZzrAYlbi やってみればわかるけどコマンドプロンプトで
setlocal enabledelayedexpansionやっても効果ないよ。
cmd /v:onで遅延展開有効にしたコマンドプロンプト起動しないとだめ。
setlocal enabledelayedexpansionやっても効果ないよ。
cmd /v:onで遅延展開有効にしたコマンドプロンプト起動しないとだめ。
799デフォルトの名無しさん
2018/08/26(日) 14:01:30.30ID:Kp4FoNKX ああほんとだ。こんな感じにすればいいのね
cmd /v:on
set str=hoge &for /l %a in (0,2,10) do ( set str=!str!%a ) & echo !str!
cmd /v:on
set str=hoge &for /l %a in (0,2,10) do ( set str=!str!%a ) & echo !str!
800デフォルトの名無しさん
2018/08/26(日) 15:49:42.37ID:/S+ZLweZ 800!
このシリーズも、12まで言っても、新発見があるのね。
前(バッチファイルプログラミング質問スレ )のも含むと、すでに15スレ目か。
このシリーズも、12まで言っても、新発見があるのね。
前(バッチファイルプログラミング質問スレ )のも含むと、すでに15スレ目か。
801デフォルトの名無しさん
2018/08/26(日) 18:22:30.74ID:Kp4FoNKX 自分はこのスレになってから来たからまだ新参、過去スレ読まなきゃ
802デフォルトの名無しさん
2018/08/26(日) 19:11:50.77ID:qpELtL6e >>798
> バッチ ファイルでは、SETLOCAL ENABLEEXTENSIONS または DISABLEEXTENSIONS
> 引数は /V:ON または /V:OFF スイッチよりも優先されます。
> 詳細については SETLOCAL /? を参照してください。
じゃない??
cmd /v:on なんて使ったことがない…
> バッチ ファイルでは、SETLOCAL ENABLEEXTENSIONS または DISABLEEXTENSIONS
> 引数は /V:ON または /V:OFF スイッチよりも優先されます。
> 詳細については SETLOCAL /? を参照してください。
じゃない??
cmd /v:on なんて使ったことがない…
803デフォルトの名無しさん
2018/08/26(日) 19:12:48.89ID:qpELtL6e あ、もしかしてバッチとコマンドプロンプトでは動きが違うってこと??
804796
2018/08/26(日) 19:26:46.75ID:PFw0pViP805デフォルトの名無しさん
2018/08/26(日) 19:58:30.97ID:Kp4FoNKX ググらずにコマンドプロンプト開いて試せばいいんだよ
・遅延展開を使うために事前に cmd /v:on[Enter]する
・バッチのfor文は%%を%1つに置き換えてから貼る。
・do ループの処理は複数行で書けないので、( 処理 & 処理 & 処理 )と書く。(の後と)の前の半角スペースが大事
とりあえずそんなとこ。
・遅延展開を使うために事前に cmd /v:on[Enter]する
・バッチのfor文は%%を%1つに置き換えてから貼る。
・do ループの処理は複数行で書けないので、( 処理 & 処理 & 処理 )と書く。(の後と)の前の半角スペースが大事
とりあえずそんなとこ。
806デフォルトの名無しさん
2018/08/26(日) 21:34:45.08ID:ZzrAYlbi コマンドプロンプトでもdo の後に括弧つけて改行すれば
More?ってプロンプト出て普通に複数行書ける
> for %x in (hoge) do (
More?
More?ってプロンプト出て普通に複数行書ける
> for %x in (hoge) do (
More?
807デフォルトの名無しさん
2018/08/27(月) 01:51:11.66ID:Sgkp88za SETLOCALに ENABLEEXTENSIONSなどがあったのか、知らなかったなあ
setlocalcのようなものが必要なこと自体cmdの設計ミスなんだけど、ますます複雑化、恥の上塗り路線
setlocalcのようなものが必要なこと自体cmdの設計ミスなんだけど、ますます複雑化、恥の上塗り路線
808デフォルトの名無しさん
2018/08/27(月) 06:43:21.31ID:EbTlBfxg >>795
有難うございます!
有難うございます!
809デフォルトの名無しさん
2018/08/27(月) 07:33:20.85ID:4tgtf9in >>808
for %%i in (.) do set PARENT_DIR=%%~dpi
for %%i in (.) do set PARENT_DIR=%%~dpi
810デフォルトの名無しさん
2018/08/30(木) 08:39:19.94ID:cyhHU1Jz forとか使わなくても…
%cd:\=&set parent=%
って知られてないんかな?
%cd:\=&set parent=%
って知られてないんかな?
811デフォルトの名無しさん
2018/08/30(木) 08:40:17.66ID:cyhHU1Jz すまん勘違いした
812デフォルトの名無しさん
2018/08/30(木) 08:54:21.79ID:eE05Kd4s for %%i in (..) do set PARENT_DIR=%%~fi
813デフォルトの名無しさん
2018/09/11(火) 15:07:38.99ID:7Sv68F+V テキストを type でユニコードに変換できるけど
cmd /u /c type sjis.txt > uni.txt
これを逆にシフトjisに戻す方法はありますか?
cmd /u /c type sjis.txt > uni.txt
これを逆にシフトjisに戻す方法はありますか?
814デフォルトの名無しさん
2018/09/11(火) 15:30:06.35ID:7Sv68F+V cmd /a /c more < uni.txt > sjis2.txt
815デフォルトの名無しさん
2018/09/11(火) 15:30:11.03ID:zUlaXCLj nkf -s uni,txt > sj.txt
816デフォルトの名無しさん
2018/09/11(火) 15:32:51.33ID:7Sv68F+V817デフォルトの名無しさん
2018/09/11(火) 16:55:41.49ID:7Sv68F+V cmd /u /c type s.txt > u.txt
set /p x="" < nul > bom.txt
copy /b bom.txt + u.txt u2.txt
type u2.txt > s2.txt
comp s.txt s2.txt
set /p x="" < nul > bom.txt
copy /b bom.txt + u.txt u2.txt
type u2.txt > s2.txt
comp s.txt s2.txt
818デフォルトの名無しさん
2018/09/11(火) 21:05:10.34ID:hTiklz9U nkf 推しは死ね。
それはなんでもアリじゃねぇか。
とりあえず、ここは「(デフォでは)全Windows環境で動く」が前提にしろや。
>>817
それが何故上手く動くのかの解説をする義務が君にはあると思う。
「ここのコマンドでSJIS変換が入ってます」くらいの。
それはなんでもアリじゃねぇか。
とりあえず、ここは「(デフォでは)全Windows環境で動く」が前提にしろや。
>>817
それが何故上手く動くのかの解説をする義務が君にはあると思う。
「ここのコマンドでSJIS変換が入ってます」くらいの。
819デフォルトの名無しさん
2018/09/11(火) 21:54:57.13ID:7Sv68F+V 上記の2バイトのBOMはユニコードのテキストである印です。
例えばメモ帳で空のユニコードのファイルを作成したらbom.txtと同じになる。
typeコマンドはBOMを参照して入力コードを決定し、
コードページを参照して出力コードを決定する。
例えばメモ帳で空のユニコードのファイルを作成したらbom.txtと同じになる。
typeコマンドはBOMを参照して入力コードを決定し、
コードページを参照して出力コードを決定する。
820デフォルトの名無しさん
2018/09/11(火) 23:18:52.19ID:hTiklz9U821デフォルトの名無しさん
2018/09/12(水) 08:46:42.71ID:wnqO0p2C もの凄く泥臭いな
822デフォルトの名無しさん
2018/09/12(水) 12:32:37.36ID:iSRyeJ5N 応用すれば色々と変換できる
ソースが EUC-JP の例
set /p BOM="" < nul > UTF-16LE.txt
chcp 20932
cmd /u /c type EUC-JP.txt >> UTF-16LE.txt
chcp 65000
type UTF-16LE.txt > UTF-7.txt
chcp 65001
type UTF-16LE.txt > UTF-8.txt
chcp 50222
type UTF-16LE.txt > JIS.txt
chcp 932
type UTF-16LE.txt > SJIS.txt
泥臭いのが好きな人はどうぞ
改行コードは知らんw
ソースが EUC-JP の例
set /p BOM="" < nul > UTF-16LE.txt
chcp 20932
cmd /u /c type EUC-JP.txt >> UTF-16LE.txt
chcp 65000
type UTF-16LE.txt > UTF-7.txt
chcp 65001
type UTF-16LE.txt > UTF-8.txt
chcp 50222
type UTF-16LE.txt > JIS.txt
chcp 932
type UTF-16LE.txt > SJIS.txt
泥臭いのが好きな人はどうぞ
改行コードは知らんw
823デフォルトの名無しさん
2018/09/12(水) 21:20:08.66ID:EE8mLPPB 本筋とは関係ないんだが、『2バイトのBOM』のあるレス >>817,822 読み込むと
しばらくしてと JaneStyle(3.75) が落ちる
dat から該当部分『2バイトのBOM』を削除すると問題なくなる
今どき JaneStyle 3.75 使ってる人はほぼ居ないと思うけど参考まで
オマ環だったらゴメンナサイ
しばらくしてと JaneStyle(3.75) が落ちる
dat から該当部分『2バイトのBOM』を削除すると問題なくなる
今どき JaneStyle 3.75 使ってる人はほぼ居ないと思うけど参考まで
オマ環だったらゴメンナサイ
824デフォルトの名無しさん
2018/09/12(水) 22:07:08.64ID:iSRyeJ5N 俺の環境は Win10 で
Jane Style Version 4.00
不具合無い
Jane Style Version 4.00
不具合無い
825デフォルトの名無しさん
2018/09/12(水) 22:49:28.45ID:gLwHpn+Y >>823
専ブラをバージョンアップしない理由は何?
専ブラをバージョンアップしない理由は何?
826デフォルトの名無しさん
2018/09/12(水) 23:08:31.59ID:alzyNvAF >>823
3.75でこのスレを串(API)で読み込んで10分ほど放置、その後新着チェックや別スレを見ても別に落ちたりしないんだが
(なお、HTMLで読み込むとBOM部分が削除されちゃったんで意味なし)
3.75でこのスレを串(API)で読み込んで10分ほど放置、その後新着チェックや別スレを見ても別に落ちたりしないんだが
(なお、HTMLで読み込むとBOM部分が削除されちゃったんで意味なし)
827デフォルトの名無しさん
2018/09/12(水) 23:09:04.85ID:iSRyeJ5N どうやら >>822 のBOM="" の引用符の中は
Internet Explorer 11 ではコピペ出来ないようだ
該当の行の Base64 は
c2V0IC9wIEJPTT0i//4iIDwgbnVsID4gVVRGLTE2TEUudHh0DQo=
Internet Explorer 11 ではコピペ出来ないようだ
該当の行の Base64 は
c2V0IC9wIEJPTT0i//4iIDwgbnVsID4gVVRGLTE2TEUudHh0DQo=
828デフォルトの名無しさん
2018/09/12(水) 23:48:42.33ID:/kdY+KWC830デフォルトの名無しさん
2018/09/13(木) 00:07:45.35ID:t/mtX2p/ なお10回程スクロール(キー、マウスホィール、スクロールバー)してみたんだけど
831デフォルトの名無しさん
2018/09/13(木) 00:47:39.75ID:vvLnBjaZ MacTypeは関係ないのでは?
4.0でなんともないし
4.0でなんともないし
832デフォルトの名無しさん
2018/09/13(木) 00:49:13.24ID:1CXXM/l/ 確認ありがとうございます
限定的な環境依存のいわゆる、オマ環、と分かっただけでも収穫です
流石にスレチと思うのでこの辺で
限定的な環境依存のいわゆる、オマ環、と分かっただけでも収穫です
流石にスレチと思うのでこの辺で
833デフォルトの名無しさん
2018/09/14(金) 07:13:36.14ID:FIpeWt57834デフォルトの名無しさん
2018/09/14(金) 13:56:39.97ID:Ah8o0gi1835デフォルトの名無しさん
2018/09/14(金) 16:33:12.67ID:UfVRD/gP よくわかんないんだけど
BOMはUTF-16LEでは "FF FE" じゃないの?
BOMはUTF-16LEでは "FF FE" じゃないの?
836デフォルトの名無しさん
2018/09/14(金) 17:33:39.58ID:Ah8o0gi1 >>822ならそうなるよ。
837デフォルトの名無しさん
2018/09/14(金) 18:51:45.62ID:fIt3xJ+t >>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
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
838デフォルトの名無しさん
2018/09/14(金) 20:35:18.83ID:Ah8o0gi1839デフォルトの名無しさん
2018/09/19(水) 17:45:23.36ID:zK7o51II setlocal enabledelayedexpansion
set a=a
set b=A
if /i %a% == %b:~0,1% echo eq1
if /i !a! == !b:~0,1! echo eq2
set c=!b:~0,1!
if /i !a! == !c! echo eq3
if /i %a% == %b% echo eq4
if /i !a! == !b! echo eq5
結果は
eq1
eq3
eq4
eq5
何故か eq2 が出ない
set a=a
set b=A
if /i %a% == %b:~0,1% echo eq1
if /i !a! == !b:~0,1! echo eq2
set c=!b:~0,1!
if /i !a! == !c! echo eq3
if /i %a% == %b% echo eq4
if /i !a! == !b! echo eq5
結果は
eq1
eq3
eq4
eq5
何故か eq2 が出ない
840デフォルトの名無しさん
2018/09/19(水) 18:33:47.81ID:zK7o51II setlocal enabledelayedexpansion
set a=abc
if /i !a:~0,1! == !a:~0,1! echo eq
1! の使い方が誤っています。
俺の PC だけなのか?
set a=abc
if /i !a:~0,1! == !a:~0,1! echo eq
1! の使い方が誤っています。
俺の PC だけなのか?
841デフォルトの名無しさん
2018/09/19(水) 18:44:41.74ID:zK7o51II 分かった
^, にしたら良かった
if /i !a:~0^,1! == !a:~0^,1! echo eq
^, にしたら良かった
if /i !a:~0^,1! == !a:~0^,1! echo eq
842デフォルトの名無しさん
2018/09/20(木) 06:54:59.39ID:SZObeV+C 謎仕様だなあ...
843デフォルトの名無しさん
2018/09/21(金) 03:25:46.77ID:q2E2aQh+ また謎です
shiftすると%1は変わるが、%*は変わらない
shiftすると%1は変わるが、%*は変わらない
844デフォルトの名無しさん
2018/10/03(水) 12:55:17.46ID:kms9X1pz 表示は出来るが、代入が一部だけ出来ない整数値があったよ
@echo off
setlocal enabledelayedexpansion
set /a "a=1<<31"
set /a b=a
set /a c=%a%
set /a d=!a!
echo a=%a%
echo b=%b%
echo c=%c%
echo d=%d%
pause
結果は
a=-2147483648
b=-2147483648
c=
d=
@echo off
setlocal enabledelayedexpansion
set /a "a=1<<31"
set /a b=a
set /a c=%a%
set /a d=!a!
echo a=%a%
echo b=%b%
echo c=%c%
echo d=%d%
pause
結果は
a=-2147483648
b=-2147483648
c=
d=
845デフォルトの名無しさん
2018/10/05(金) 06:58:30.40ID:Iu01kfl1 setlocal enabledelayedexpansion
set /a "a=1,b_!a!=2"
set b_
で、
b_0=2
何か変だが、こういう仕様なのか?
set /a "a=1,b_!a!=2"
set b_
で、
b_0=2
何か変だが、こういう仕様なのか?
846デフォルトの名無しさん
2018/10/05(金) 08:53:46.57ID:vSWfZutq ,で分けてあってもsetコマンドは1つだけなので複数コマンドとは思われてないってことなんだろうね
setlocal enabledelayedexpansion
set /a a=1 & set b_!a!=2
set b_!a!
なら大丈夫
setlocal enabledelayedexpansion
set /a a=1 & set b_!a!=2
set b_!a!
なら大丈夫
847デフォルトの名無しさん
2018/10/05(金) 17:03:33.33ID:Iu01kfl1 >>846 ありがとうございます
!a! は set /a 実行直前の値でした
setlocal enabledelayedexpansion
set /a a=0
for /L %%i in (1,1,3) do set /a "a=%%i,b=a,c=!a!,d=%a%" & echo !a! !b! !c! !d!
1 1 0 0
2 2 1 0
3 3 2 0
!a! は set /a 実行直前の値でした
setlocal enabledelayedexpansion
set /a a=0
for /L %%i in (1,1,3) do set /a "a=%%i,b=a,c=!a!,d=%a%" & echo !a! !b! !c! !d!
1 1 0 0
2 2 1 0
3 3 2 0
848デフォルトの名無しさん
2018/10/05(金) 17:27:41.95ID:vSWfZutq setlocal enabledelayedexpansion
set /a a=0
for /L %%i in (1,1,3) do ( set /a a=%%i &set /a b=a &set /a c=!a! &set /a d=%a% &echo !a! !b! !c! !d! )
なら
1 1 1 0
2 2 2 0
3 3 3 0
となる。
bへの値代入が!抜きのaでできるって知らなかったわ…
謎挙動。
set /a a=0
for /L %%i in (1,1,3) do ( set /a a=%%i &set /a b=a &set /a c=!a! &set /a d=%a% &echo !a! !b! !c! !d! )
なら
1 1 1 0
2 2 2 0
3 3 3 0
となる。
bへの値代入が!抜きのaでできるって知らなかったわ…
謎挙動。
849デフォルトの名無しさん
2018/10/05(金) 18:09:57.00ID:Iu01kfl1 set /a で %a% や !a! はあまり使用しない方が良さそうだ
% や ! は演算子に含まれる文字で紛らわしいし
展開のタイミングで予想外の挙動するし
展開時に >>844 のように特異値でエラーになったりするし
値参照は変数名だけでいい
% や ! は演算子に含まれる文字で紛らわしいし
展開のタイミングで予想外の挙動するし
展開時に >>844 のように特異値でエラーになったりするし
値参照は変数名だけでいい
850デフォルトの名無しさん
2018/10/05(金) 18:17:00.44ID:vSWfZutq ご自由に。それより某グラマー御用達QAサイトのトップ回答者様が書くバッチがgoto :EOF 多用で頭痛い
851デフォルトの名無しさん
2018/10/05(金) 18:26:50.86ID:Iu01kfl1 俺もよく使うよ、goto :eof
852デフォルトの名無しさん
2018/10/05(金) 18:28:05.47ID:hOPHqLcn853デフォルトの名無しさん
2018/10/05(金) 18:33:02.62ID:Iu01kfl1 goto その物が多いとか言われた事も
854デフォルトの名無しさん
2018/10/05(金) 18:46:17.97ID:vSWfZutq 自分だと大抵
{メインルーチン}
goto :EOF
:sub1
{サブルーチン12}
exit /b
:sub2
{サブルーチン}
exit /b
と書くことが多い。
トップ回答者様は
{メインルーチン}
goto :EOF
:sub1
{サブルーチン}
goto :EOF
sub2
{サブルーチン}
goto :EOF
と回答されている。サブルーチンの下のはgoto は不要だし慣れない。
{メインルーチン}
goto :EOF
:sub1
{サブルーチン12}
exit /b
:sub2
{サブルーチン}
exit /b
と書くことが多い。
トップ回答者様は
{メインルーチン}
goto :EOF
:sub1
{サブルーチン}
goto :EOF
sub2
{サブルーチン}
goto :EOF
と回答されている。サブルーチンの下のはgoto は不要だし慣れない。
855デフォルトの名無しさん
2018/10/05(金) 19:02:53.79ID:Iu01kfl1 戻り値なけりゃどっちでもいい様な気がするが
逆に exit を避けてる人もいるよ
逆に exit を避けてる人もいるよ
856デフォルトの名無しさん
2018/10/05(金) 19:53:21.88ID:LaGwhHU8 俺もgoto派だな
857デフォルトの名無しさん
2018/10/05(金) 21:35:58.50ID:RB/KKRkK gotoは見通しが悪くなるから、極力使わないようにしてる
他の主流の言語だと使えないものが多いから、必然的にそういう書き方に慣れてしまった
他の主流の言語だと使えないものが多いから、必然的にそういう書き方に慣れてしまった
858デフォルトの名無しさん
2018/10/05(金) 23:49:53.55ID:8nMQUHh9 goto は使わないに越したことはない。
が、制御構文が貧弱な言語では、熟慮の上で使わざるを得ない場面で使う。
が正解。
詳しくはWikipediaで。
が、制御構文が貧弱な言語では、熟慮の上で使わざるを得ない場面で使う。
が正解。
詳しくはWikipediaで。
859デフォルトの名無しさん
2018/10/05(金) 23:56:24.52ID:qkvvR9Zs Cでもgotoは使うよね
860デフォルトの名無しさん
2018/10/05(金) 23:58:44.47ID:8nMQUHh9 C言語にはMISRAとかいう規約があるが無視していい。
あれは組み込み分野だけの特殊なものだと思っていい。
大抵の人間は、「これは思考からはぶいていい」という書き方の方が読みやすい。
だから、「これは戻すか終わらせる」と書いていっていい。
そうすれば、残ったものに集中できるだろ?
まぁ、日ごろ「自分が辞めた後にこれを読まされる人間が困らないかどうか」って考えて書いてるかどうかってことだ。
あれは組み込み分野だけの特殊なものだと思っていい。
大抵の人間は、「これは思考からはぶいていい」という書き方の方が読みやすい。
だから、「これは戻すか終わらせる」と書いていっていい。
そうすれば、残ったものに集中できるだろ?
まぁ、日ごろ「自分が辞めた後にこれを読まされる人間が困らないかどうか」って考えて書いてるかどうかってことだ。
861デフォルトの名無しさん
2018/10/06(土) 16:39:29.59ID:P4YKYACU あちこちでreturnするのもスパゲッティなgotoと大差がない気がするんだ
テロ的というか
テロ的というか
862デフォルトの名無しさん
2018/10/06(土) 17:10:22.17ID:GNiE4xH/ 字面が違うだけで同じだろ
863デフォルトの名無しさん
2018/10/06(土) 20:28:48.17ID:gea8Zy97 gotoもイディオムに従って使えば混乱しない
バッチファイルだとforの方が理解不能で害悪
バッチファイルだとforの方が理解不能で害悪
864デフォルトの名無しさん
2018/10/06(土) 23:02:20.58ID:tgEP6apu gotoがゴーゴーに見えた
865デフォルトの名無しさん
2018/10/06(土) 23:12:15.45ID:uJ87E9Rb >>860-861
IPAの出してるMISRAの解説書のreturnは1か所にしろというルール、
あれはクソofクソのルールだと思うね。early returnこそ正義
Cとbatの書き方は全然比較にならないけど
IPAの出してるMISRAの解説書のreturnは1か所にしろというルール、
あれはクソofクソのルールだと思うね。early returnこそ正義
Cとbatの書き方は全然比較にならないけど
866デフォルトの名無しさん
2018/10/07(日) 00:27:12.50ID:pbh8RIqN >>861
むしろ goto の良い使い方と言われている制限が、return をまねたもの。
むしろ goto の良い使い方と言われている制限が、return をまねたもの。
867デフォルトの名無しさん
2018/10/07(日) 11:03:03.39ID:Bzp9uIq0 バッチファイルかパワーシェルでIPv4のIPアドレスのみを取得して環境変数に代入するにはどういうコマンドになりますか?
教えてください
教えてください
868デフォルトの名無しさん
2018/10/07(日) 12:00:15.70ID:6qmhFN/2 「powershell ip address」で検索!
869デフォルトの名無しさん
2018/10/07(日) 12:28:26.52ID:VwaVbKnV >>867
環境変数IPAddressに192を含んだIPアドレスを代入するサンプル(PowerShell 2.0併用)
set CMD=powershell -command "& {ipconfig |? {$_ -match 'IP.*: 192\.'}|% {$_ -replace '.*: (\d+\.\d+\.\d+\.\d+)','$1'}}"
for /f "usebackq delims=" %%a in (`%CMD%`) do set IPAddress=%%a
echo %IPAddress%
PowerShell部分はipconfigの結果から正規表現でIPと: 192という文字を含む行を抽出
抽出した行のIPアドレス部分のみ正規表現の置換で抽出といった感じ
PowerShell3.0以降だともうちょっと素直に書ける感じだけど
環境変数IPAddressに192を含んだIPアドレスを代入するサンプル(PowerShell 2.0併用)
set CMD=powershell -command "& {ipconfig |? {$_ -match 'IP.*: 192\.'}|% {$_ -replace '.*: (\d+\.\d+\.\d+\.\d+)','$1'}}"
for /f "usebackq delims=" %%a in (`%CMD%`) do set IPAddress=%%a
echo %IPAddress%
PowerShell部分はipconfigの結果から正規表現でIPと: 192という文字を含む行を抽出
抽出した行のIPアドレス部分のみ正規表現の置換で抽出といった感じ
PowerShell3.0以降だともうちょっと素直に書ける感じだけど
870デフォルトの名無しさん
2018/10/07(日) 12:53:16.71ID:Dedwpgqn アダプタが1つだけならこんなでいいんじゃね?
setlocal enabledelayedexpansion
for /f "tokens=2 delims=:" %%a in ('ipconfig ^|find "IPv4"') do set IPADRESS=%%a
set IPADRESS=%IPADRESS:~1%
echo %IPADRESS%
setlocal enabledelayedexpansion
for /f "tokens=2 delims=:" %%a in ('ipconfig ^|find "IPv4"') do set IPADRESS=%%a
set IPADRESS=%IPADRESS:~1%
echo %IPADRESS%
871デフォルトの名無しさん
2018/10/07(日) 12:54:26.67ID:Bzp9uIq0 この処理作るのにバッチとパワーシェル組み合わせないとできないんですか?
ip取得するだけでも結構大変なのですね
ip取得するだけでも結構大変なのですね
872デフォルトの名無しさん
2018/10/07(日) 12:56:55.73ID:Bzp9uIq0 と思ったらバッチだけでもできそうなんですね、アダプターは一つです
ちょっと色々教えてもらったのでテストしてみます!
ちょっと色々教えてもらったのでテストしてみます!
873870
2018/10/07(日) 13:03:20.66ID:Dedwpgqn 遅延変数展開の呪文要らなかったわ、1行目削っていいよ
874デフォルトの名無しさん
2018/10/07(日) 13:07:01.74ID:Bzp9uIq0 遅延環境数ってforとifの()で使用するときだけ必要なんでしたっけ?
875デフォルトの名無しさん
2018/10/07(日) 13:23:02.79ID:Dedwpgqn だいたいその理解でおk
forやifの()内のスクリプトブロックが複数処理で変数代入とその参照のペアがある場合に使う
1処理だけとか、代入だけとかなら不要
forやifの()内のスクリプトブロックが複数処理で変数代入とその参照のペアがある場合に使う
1処理だけとか、代入だけとかなら不要
876デフォルトの名無しさん
2018/10/07(日) 17:41:47.85ID:0jrGYEp4 無限ループの原因は何か
SET A=1073741824
FOR /L %%B IN (-%A%,%A%,%A%) DO ECHO %%B
SET A=1073741824
FOR /L %%B IN (-%A%,%A%,%A%) DO ECHO %%B
877デフォルトの名無しさん
2018/10/07(日) 19:04:07.20ID:Dedwpgqn set /a A=1073741824
1073741824
set /a B=A+A
-2147483648
となるからね、32bitINTの範囲が-2147483648〜-2147483647
2進表記の最上位bitが1が立ってしまったらマイナス値
1073741824
set /a B=A+A
-2147483648
となるからね、32bitINTの範囲が-2147483648〜-2147483647
2進表記の最上位bitが1が立ってしまったらマイナス値
878デフォルトの名無しさん
2018/10/07(日) 19:25:23.31ID:Dedwpgqn 試してみるとfor /l 文ではステップ値が1073741824以上の場合必ずバグったループになるね、まあ仕方ないのかも
879デフォルトの名無しさん
2018/10/07(日) 19:43:19.94ID:0jrGYEp4 内部的にどんな計算してるか気になるところです
B は -1073741824,0,1073741824 なので
普通に考えると32ビットのオーバーフローはしてない筈
B は -1073741824,0,1073741824 なので
普通に考えると32ビットのオーバーフローはしてない筈
880デフォルトの名無しさん
2018/10/07(日) 19:55:29.49ID:0jrGYEp4 ああ、分かった
4ループめでオーバーフローするのか
3ループめで最終値に等しいと抜けるんじゃ無いわけか
4ループめでオーバーフローするのか
3ループめで最終値に等しいと抜けるんじゃ無いわけか
881デフォルトの名無しさん
2018/10/07(日) 19:57:49.70ID:2JwzOMBB バッチファイルのif文でパワーシェルのif -Orみたいな処理できますか?
882デフォルトの名無しさん
2018/10/07(日) 20:18:06.07ID:0jrGYEp4 IFの条件は2個の値を比較するだけ
複雑なOR,AND,XORとかあるんなら計算して結果を変数に入れる
それをIFの条件で使う
複雑なOR,AND,XORとかあるんなら計算して結果を変数に入れる
それをIFの条件で使う
883デフォルトの名無しさん
2018/10/08(月) 21:58:47.76ID:To7x1PVP あると便利なミニミニバッチ
DOS窓に今の時間を表示しておく
m.bat
@echo off
setlocal
set x=%date:~5% %time:~0,5% %*
title=%x%
exit /B 0
画面クリア
c.bat
@echo off
cls
exit /B 0
クリップボードクリア
cc.bat
@echo off
echo.|clip
echo clip clear
exit /B 0
DOS窓に今の時間を表示しておく
m.bat
@echo off
setlocal
set x=%date:~5% %time:~0,5% %*
title=%x%
exit /B 0
画面クリア
c.bat
@echo off
cls
exit /B 0
クリップボードクリア
cc.bat
@echo off
echo.|clip
echo clip clear
exit /B 0
884デフォルトの名無しさん
2018/10/09(火) 08:38:25.31ID:IIAdkwpd 画面クリアは普通にcls打つのと何が違うん?
885デフォルトの名無しさん
2018/10/09(火) 11:35:59.50ID:9WevvN1n886デフォルトの名無しさん
2018/10/09(火) 15:53:20.49ID:hXgFZ2lj >>884
一文字でいいので、お菓子を食べながらでもできる、大差
一文字でいいので、お菓子を食べながらでもできる、大差
887デフォルトの名無しさん
2018/10/10(水) 17:37:49.95ID:Wl83IH5q そういうしょぼいものならdoskeyでも使っとけ
888デフォルトの名無しさん
2018/10/11(木) 22:01:20.44ID:aIIKUaH8 1文字とか何かで誤爆しそうで危うすぎる
889デフォルトの名無しさん
2018/10/12(金) 00:17:12.22ID:xVyRtSc0 くだらねー
890デフォルトの名無しさん
2018/10/13(土) 05:37:42.36ID:YmkYzRio copyコマンドがおかしい
copy x+y z
とするとzに改行追加されている
copy /B x+y z
だと問題なしだが??
copy x+y z
とするとzに改行追加されている
copy /B x+y z
だと問題なしだが??
891デフォルトの名無しさん
2018/10/13(土) 07:34:07.12ID:TS7U3WRI >>890これね
ttp://shigechi-64.hatenablog.com/entry/20090717/1247798200
ttp://shigechi-64.hatenablog.com/entry/20090717/1247798200
892デフォルトの名無しさん
2018/10/13(土) 19:25:44.82ID:fQqIQRVk 改行じゃなくて 0x1A の 1byte なら付加されるが
echo test> a
dir a
copy a /b + nul /a
dir a
サイズが 1byte 増える
echo test> a
dir a
copy a /b + nul /a
dir a
サイズが 1byte 増える
893デフォルトの名無しさん
2018/10/14(日) 01:22:10.62ID:IWBgfNe4894デフォルトの名無しさん
2018/10/14(日) 06:32:47.46ID:5zXkQKrC テキストファイルのEOF(0x1A)は前世紀の遺物
昔のテキストエディタはファイルの末尾にEOF(0x1A)を付加していた。
仕様が古すぎて今じゃCOPYのヘルプを見ても、詳細が分からん状態
copy でファイルを連結する時は /a がデフォルト
ちなみに copy /a はEOF(0x1A)を付加するだけじゃないぞ
ファイルの途中に0x1Aが有ったらそれ以降が無くなってしまう怖い仕様
あと、echo xxx >> とかでテキストを追加したら末尾の0x1Aは勝手に削除される
昔のテキストエディタはファイルの末尾にEOF(0x1A)を付加していた。
仕様が古すぎて今じゃCOPYのヘルプを見ても、詳細が分からん状態
copy でファイルを連結する時は /a がデフォルト
ちなみに copy /a はEOF(0x1A)を付加するだけじゃないぞ
ファイルの途中に0x1Aが有ったらそれ以降が無くなってしまう怖い仕様
あと、echo xxx >> とかでテキストを追加したら末尾の0x1Aは勝手に削除される
895デフォルトの名無しさん
2018/10/14(日) 09:07:44.01ID:YBMQaeBO896デフォルトの名無しさん
2018/10/14(日) 18:08:37.67ID:gwXaIkcp chcp 65001入ってるスクリプトをUTF-8で保存して動かしてみたらエスケープ処理が酷い・・・
897デフォルトの名無しさん
2018/10/15(月) 01:28:48.04ID:yVBNeV/e898デフォルトの名無しさん
2018/10/16(火) 00:24:50.38ID:GeydM3gl >>897
The shift command has no effect on the %* batch parameter.
https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/shift
SHIFT doesn't affect %*
https://stackoverflow.com/questions/12990480/shift-doesn-t-affect
The shift command has no effect on the %* batch parameter.
https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/shift
SHIFT doesn't affect %*
https://stackoverflow.com/questions/12990480/shift-doesn-t-affect
899デフォルトの名無しさん
2018/10/25(木) 05:27:15.65ID:cKUaktMr echo %__APPDIR__%
C:\Windows\SysWOW64\
これが出る時32ビットのコマンドプロンプトらしいんですが
64ビットのコマンドプロンプトと何か違うんでしょうか
C:\Windows\SysWOW64\
これが出る時32ビットのコマンドプロンプトらしいんですが
64ビットのコマンドプロンプトと何か違うんでしょうか
900デフォルトの名無しさん
2018/10/27(土) 11:16:03.78ID:NXHcy7gB reg query "HKU\.DEFAULT\Control Panel\International"
表示された最後の行に
HKEY_USERS\.DEFAULT\Control Panel\International\・・・・・・
これは何だろうとレジストリエディタで見ると謎の文字で地球が3つ。
しかしメモ帳で表示出来る文字が
コンソール画面で表示出来ないのはダメだね
表示された最後の行に
HKEY_USERS\.DEFAULT\Control Panel\International\・・・・・・
これは何だろうとレジストリエディタで見ると謎の文字で地球が3つ。
しかしメモ帳で表示出来る文字が
コンソール画面で表示出来ないのはダメだね
901デフォルトの名無しさん
2018/10/27(土) 12:02:14.11ID:8ILfgags メモ帳「俺はだいぶ前からユニコード対応済みだから表示はするさ、ANSI(CP932)で保存はできなくてもなー」
902デフォルトの名無しさん
2018/10/27(土) 12:15:54.46ID:NXHcy7gB DIRコマンドでもユニコード対応してるよね。ちゃんと表示される。
でもこの地球文字はDIRコマンドでも表示されないようだ
フォントの問題かねえ
でもこの地球文字はDIRコマンドでも表示されないようだ
フォントの問題かねえ
903デフォルトの名無しさん
2018/10/27(土) 13:14:57.64ID:8ILfgags フォント問題だね、
メモ帳とかレジストリエディタはフォントリンクで表示用フォントが持ってないコードも他のフォントにあればそれで代用表示するから
メモ帳とかレジストリエディタはフォントリンクで表示用フォントが持ってないコードも他のフォントにあればそれで代用表示するから
904デフォルトの名無しさん
2018/10/27(土) 15:49:46.95ID:IkTi26EG なんだよ地球文字って?
905デフォルトの名無しさん
2018/10/27(土) 16:16:07.64ID:NXHcy7gB906デフォルトの名無しさん
2018/10/27(土) 16:59:45.97ID:r0d5m4I8 そんな文字(絵文字?)があるのか。
初めて見て、びっくり。(; ̄Д ̄)
初めて見て、びっくり。(; ̄Д ̄)
907デフォルトの名無しさん
2018/10/27(土) 17:04:05.15ID:NXHcy7gB それ、右上のリンクを押したら色々出て来て笑える
908デフォルトの名無しさん
2018/10/27(土) 22:17:46.77ID:8ILfgags for /f %a in ('dir /b') do echo %~za,%~ta
なんてことできたんだねえ、
dir /bは他の属性情報を削いでるからできないと思い込んでた
なんてことできたんだねえ、
dir /bは他の属性情報を削いでるからできないと思い込んでた
909デフォルトの名無しさん
2018/10/28(日) 08:43:59.31ID:uzLWPyey910デフォルトの名無しさん
2018/10/28(日) 11:17:25.40ID:ecNurFe9 dpnxfだったら単にファイル名にカレントのパスを付けるだけだからチグハグでも出来ちゃうんだぜ
aaa.txtっていうファイルがカレントに存在してなくても構わないってことだ
pushd d:\xxx\yyy
for /f %a in ("aaa.txt") do echo %~fa
ってやれば、d:\xxx\yyy\aaa.txtっていう架空のファイルのフルパス名を表示してくれる
aaa.txtっていうファイルがカレントに存在してなくても構わないってことだ
pushd d:\xxx\yyy
for /f %a in ("aaa.txt") do echo %~fa
ってやれば、d:\xxx\yyy\aaa.txtっていう架空のファイルのフルパス名を表示してくれる
911デフォルトの名無しさん
2018/10/28(日) 20:39:42.80ID:5N/SSOj8912デフォルトの名無しさん
2018/10/29(月) 00:52:54.50ID:m4kOmKq3 質問です。
データが以下のように入っているcsvファイルを
指定された削除対象のファイル名の行を削除したいです。
削除対象は別ファイルに一覧としてあります。
イメージとしては以下のようにしたいです。
bass.csv
================================
ファイル名,日付,時間
AAA,20111001,1300
AAB,20171001,1300
AAC,20171031,1300
AAD,20171031,1300
================================
delete.txt
================================
AAB
AAD
================================
output.csv
================================
ファイル名,日付,時間
AAA,20111001,1300
AAC,20171031,1300
================================
OSはWindows7
コマンド(batでもOK)でoutput.csvのような形にしたいのですが
上手くいかず、findstr /V で1行だけ試しにやってみたら理想と近い形になったのですが、
削除対象が複数になると上手くいきませんでした。
データが以下のように入っているcsvファイルを
指定された削除対象のファイル名の行を削除したいです。
削除対象は別ファイルに一覧としてあります。
イメージとしては以下のようにしたいです。
bass.csv
================================
ファイル名,日付,時間
AAA,20111001,1300
AAB,20171001,1300
AAC,20171031,1300
AAD,20171031,1300
================================
delete.txt
================================
AAB
AAD
================================
output.csv
================================
ファイル名,日付,時間
AAA,20111001,1300
AAC,20171031,1300
================================
OSはWindows7
コマンド(batでもOK)でoutput.csvのような形にしたいのですが
上手くいかず、findstr /V で1行だけ試しにやってみたら理想と近い形になったのですが、
削除対象が複数になると上手くいきませんでした。
913デフォルトの名無しさん
2018/10/29(月) 06:11:32.56ID:VYDzXbvz ?
findstr /v "AAA AAD" bass.csv>output.csv
で行くはずだがだめだった?
これが行ければ除外パターンを作るfor /f文を前段に作るだけで終わると思うが
findstr /v "AAA AAD" bass.csv>output.csv
で行くはずだがだめだった?
これが行ければ除外パターンを作るfor /f文を前段に作るだけで終わると思うが
914デフォルトの名無しさん
2018/10/29(月) 06:59:07.30ID:VYDzXbvz 行けるじゃん…そういえばfindstrは/gオプションあるから、for文も要らんね
findstr /v /g:delete.txt bass.csv>output.txt
なおfindstrの複数検索パターン指定は和文だと失敗する。
英数字の検索なら問題なし
findstr /v /g:delete.txt bass.csv>output.txt
なおfindstrの複数検索パターン指定は和文だと失敗する。
英数字の検索なら問題なし
915デフォルトの名無しさん
2018/10/29(月) 07:23:43.41ID:g89iCylL よくわからんが
FINDSTR /B にして検索文字列のあとに , を付ければいいんじゃね
FINDSTR /B にして検索文字列のあとに , を付ければいいんじゃね
916デフォルトの名無しさん
2018/10/29(月) 07:26:06.09ID:g89iCylL あ、/I も付ければいいかも
917デフォルトの名無しさん
2018/10/29(月) 08:03:30.04ID:VYDzXbvz 行頭以外にAAAやAADが記述されており、それは出力したいなら /B は合った方がいい
918デフォルトの名無しさん
2018/10/29(月) 08:12:46.70ID:VYDzXbvz 訂正 AABやAADが だった
919デフォルトの名無しさん
2018/10/29(月) 08:15:25.80ID:g89iCylL 無いとファイル名の部分一致するかも
拡張子あるなら末尾の , は要らんかも
和文ダメなんだ知らんかった
拡張子あるなら末尾の , は要らんかも
和文ダメなんだ知らんかった
920デフォルトの名無しさん
2018/10/29(月) 09:16:39.77ID:g89iCylL >>912
和文無ければ不要のバッチ
@echo off & setlocal & set /a n=0
for /f "delims=" %%i in (delete.txt) do set "s=%%i" & call :x
if %n%==0 (goto :eof ) else set /a n-=1
echo ファイル名,日付,時間> output.csv
for /f "skip=1 delims=" %%i in (bass.csv) do set "s=%%i" & call :y
goto :eof
:x
set "d%n%=%s%" & set /a n+=1 & goto :eof
:y
for /f "delims=," %%j in ("%s%") do set "s1=%%j" & call :z
goto :eof
:z
setlocal enabledelayedexpansion
for /L %%k in (0,1,%n%) do if /i "!s1!"=="!d%%k!" goto :eof
echo !s!>> output.csv
和文無ければ不要のバッチ
@echo off & setlocal & set /a n=0
for /f "delims=" %%i in (delete.txt) do set "s=%%i" & call :x
if %n%==0 (goto :eof ) else set /a n-=1
echo ファイル名,日付,時間> output.csv
for /f "skip=1 delims=" %%i in (bass.csv) do set "s=%%i" & call :y
goto :eof
:x
set "d%n%=%s%" & set /a n+=1 & goto :eof
:y
for /f "delims=," %%j in ("%s%") do set "s1=%%j" & call :z
goto :eof
:z
setlocal enabledelayedexpansion
for /L %%k in (0,1,%n%) do if /i "!s1!"=="!d%%k!" goto :eof
echo !s!>> output.csv
921デフォルトの名無しさん
2018/10/29(月) 09:25:17.80ID:g89iCylL922デフォルトの名無しさん
2018/10/29(月) 10:42:05.23ID:VYDzXbvz おいらが書くならこう
@echo off
setlocal enabledelayedexpansion
for /f %%a in (delete.txt) do set list=!list!,%%a
set list=%list:,= %
for /f "delims=" %%b in (bass.csv) do (
set "line=%%b"
set /a flg=0
for %%b in (%list%) do (
echo !line!|findstr /b /v "%%b">nul 2>&1
set /a flg +=!errorlevel!
)
rem echo !cnt!
if !flg! equ 0 echo !line!>>output.txt
)
pause
@echo off
setlocal enabledelayedexpansion
for /f %%a in (delete.txt) do set list=!list!,%%a
set list=%list:,= %
for /f "delims=" %%b in (bass.csv) do (
set "line=%%b"
set /a flg=0
for %%b in (%list%) do (
echo !line!|findstr /b /v "%%b">nul 2>&1
set /a flg +=!errorlevel!
)
rem echo !cnt!
if !flg! equ 0 echo !line!>>output.txt
)
pause
923デフォルトの名無しさん
2018/10/29(月) 11:13:29.52ID:K68WvpFD >>899
x64だと
C:\Windows\System32\
x64だと64bitで書いたアプリもあるのでフォルダで区別
ここらへんwindows自体が手品のようなことをしていていわば巨大ウィルスソフト化
x64はintelの失敗作、性能を優先しすぎて使い勝手が大幅に悪くなった
x64だと
C:\Windows\System32\
x64だと64bitで書いたアプリもあるのでフォルダで区別
ここらへんwindows自体が手品のようなことをしていていわば巨大ウィルスソフト化
x64はintelの失敗作、性能を優先しすぎて使い勝手が大幅に悪くなった
924デフォルトの名無しさん
2018/10/29(月) 11:17:19.87ID:P47cxv7B CSVのフィルタ処理をバッチでやろうとは思わないけど参考になった
925デフォルトの名無しさん
2018/10/29(月) 11:21:43.07ID:VYDzXbvz すまん、>>922の内側のfor分の %%変数は%%cの方がよかった。
ローカル変数的な振る舞いで動作上は問題ないけど
ローカル変数的な振る舞いで動作上は問題ないけど
926デフォルトの名無しさん
2018/10/29(月) 11:39:07.63ID:wCs1yHBV 先輩方、お知恵ありがとうございます。
情報の後出しとなってしまって大変申し訳ありません。
ファイル名には枝番がふられているものがあり、
delete.txtに記載されている「AAB」を削除指定すると枝番01,02の記載迄消えてしまう為
ファイル名と完全一致の行のみを削除するにはどのようにすれば良いかお知恵をお借りしたかった次第です。
bass.csv
================================
ファイル名,日付,時間
AAA,20111001,1300
AAB,20171001,1300
AAC,20171031,1300
AAD,20171031,1300
AAB01,20111001,1300
AAB02,20111001,1300
================================
delete.txt
================================
AAB
AAD
================================
output.csv
================================
ファイル名,日付,時間
AAA,20111001,1300
AAC,20171031,1300
AAB01,20111001,1300
AAB02,20111001,1300
================================
情報の後出しとなってしまって大変申し訳ありません。
ファイル名には枝番がふられているものがあり、
delete.txtに記載されている「AAB」を削除指定すると枝番01,02の記載迄消えてしまう為
ファイル名と完全一致の行のみを削除するにはどのようにすれば良いかお知恵をお借りしたかった次第です。
bass.csv
================================
ファイル名,日付,時間
AAA,20111001,1300
AAB,20171001,1300
AAC,20171031,1300
AAD,20171031,1300
AAB01,20111001,1300
AAB02,20111001,1300
================================
delete.txt
================================
AAB
AAD
================================
output.csv
================================
ファイル名,日付,時間
AAA,20111001,1300
AAC,20171031,1300
AAB01,20111001,1300
AAB02,20111001,1300
================================
927デフォルトの名無しさん
2018/10/29(月) 11:41:47.37ID:VYDzXbvz delete.txtにカンマ加えて書けばいいんでないの?
AAB,
AAD,
AAB,
AAD,
928デフォルトの名無しさん
2018/10/29(月) 11:55:18.87ID:g89iCylL929デフォルトの名無しさん
2018/10/29(月) 12:31:59.63ID:g89iCylL930デフォルトの名無しさん
2018/10/29(月) 13:38:05.43ID:SulfyTCP931デフォルトの名無しさん
2018/10/29(月) 13:42:01.94ID:t/dvzEws >>930
違うよ
違うよ
932デフォルトの名無しさん
2018/10/29(月) 13:43:07.31ID:VYDzXbvz >>928
半角スペースはケアレス、!は全く気にしていなかった。勉強になった。有難う
半角スペースはケアレス、!は全く気にしていなかった。勉強になった。有難う
933デフォルトの名無しさん
2018/10/29(月) 22:11:24.00ID:BnWHDqaq Ruby で作った
require 'csv'
delete_files = { } # 削除するファイル名を入れる、ハッシュ
text = <<TEXT
AAB
AAD
TEXT
# 改行区切りで、改行を除去してから、ハッシュに入れる
text.each_line do | line | # 各行
line.chomp! # 末尾の改行を削除する
next if line.empty? # 空行は処理しない
delete_files[ line ] = true
end
# コロン区切りのCSV 入力ファイルを、1行ずつ処理する
CSV.foreach( "bass.csv" ) do |row|
# 削除対象ファイルの行は、出力しない
puts row.join( "," ) unless delete_files.has_key? row[ 0 ]
end
require 'csv'
delete_files = { } # 削除するファイル名を入れる、ハッシュ
text = <<TEXT
AAB
AAD
TEXT
# 改行区切りで、改行を除去してから、ハッシュに入れる
text.each_line do | line | # 各行
line.chomp! # 末尾の改行を削除する
next if line.empty? # 空行は処理しない
delete_files[ line ] = true
end
# コロン区切りのCSV 入力ファイルを、1行ずつ処理する
CSV.foreach( "bass.csv" ) do |row|
# 削除対象ファイルの行は、出力しない
puts row.join( "," ) unless delete_files.has_key? row[ 0 ]
end
934デフォルトの名無しさん
2018/10/29(月) 22:24:44.16ID:XpqRFBWF 地球はチタマと読むのです
935899
2018/10/30(火) 17:29:47.50ID:GfHx62hK >>923
レスありがとうございます。
OSはwin10x64で実行されたcmdの呼び出し元は
C:\Program Files (x86)にあるアプリケーションです
%__APPDIR__%はC:\Windows\SysWOW64\
%ComSpec%はC:\WINDOWS\system32\cmd.exe
左上にある窓のtitleは%ComSpec%と同じで、何か変です
タスクマネージャーにはコマンドプロンプト(32ビット)と出ます
OSから直接cmdを起動したら(32ビット)は出ません
OSが自分自身を騙してるのでしょうか
たぶん機能上は違いが無いと思いますが
レスありがとうございます。
OSはwin10x64で実行されたcmdの呼び出し元は
C:\Program Files (x86)にあるアプリケーションです
%__APPDIR__%はC:\Windows\SysWOW64\
%ComSpec%はC:\WINDOWS\system32\cmd.exe
左上にある窓のtitleは%ComSpec%と同じで、何か変です
タスクマネージャーにはコマンドプロンプト(32ビット)と出ます
OSから直接cmdを起動したら(32ビット)は出ません
OSが自分自身を騙してるのでしょうか
たぶん機能上は違いが無いと思いますが
936デフォルトの名無しさん
2018/10/30(火) 17:53:27.44ID:ZaLbntHv その呼び出してるアプリが32bitアプリなのだと予想
937デフォルトの名無しさん
2018/10/30(火) 17:57:36.37ID:GfHx62hK C:\Program Files (x86)なので32ビットですね
938デフォルトの名無しさん
2018/10/30(火) 18:58:54.08ID:ZaLbntHv 64bitOSでの32bitアプリはエミュレーションみたいな物で、32bitアプリから64bitのdllは使えないし、その逆も出来ないようになってる。なのでcmd.comも分けてあるという理由でメモリや動作モード以外の機能差は無いのではなかろうかと
939デフォルトの名無しさん
2018/10/30(火) 19:57:27.49ID:8A3JIwUi 32bitアプリから見た C:\Windows\System32 の実体は C:\Windows\SysWOW64 だから、
System32にあってもSysWOW64にないコマンド(WSL関連とか)は実行できないとか、
環境変数の値がビット数に応じて違うとか、その程度の違い
System32にあってもSysWOW64にないコマンド(WSL関連とか)は実行できないとか、
環境変数の値がビット数に応じて違うとか、その程度の違い
940デフォルトの名無しさん
2018/10/30(火) 22:17:05.55ID:GfHx62hK 試しに
64ビットでビルドしたコマンドは
普通に動作しました
>echo %__APPDIR__%
C:\Windows\SysWOW64\
>Hello_World.exe
Hello World!
64ビットでビルドしたコマンドは
普通に動作しました
>echo %__APPDIR__%
C:\Windows\SysWOW64\
>Hello_World.exe
Hello World!
941デフォルトの名無しさん
2018/10/31(水) 19:08:48.10ID:QI0rTSh9 以前は確かsystem32のcmdとSysWOW64のcmdが同じだったんだ
そんでもってWinSxSのcmdが違っていた
今はsystem32とSysWOW64が違うんだな
WinSxSのはsystem32と同じになってる
手品の種が変った?
そんでもってWinSxSのcmdが違っていた
今はsystem32とSysWOW64が違うんだな
WinSxSのはsystem32と同じになってる
手品の種が変った?
942デフォルトの名無しさん
2018/10/31(水) 21:11:08.13ID:lh+glCNV >>926
作ってみた。ファイル名に%がはいらない前提ですが、こんな手もあるということで勘弁願いたい。
@echo off
set t=tmp.bat
echo type bass.csv^^>%t%
for /f "delims=" %%a in ( delete.txt ) do (
echo ^| find /v "%%a,"^^>>%t%
)
echo ^>output.csv>>%t%
call %t%
del %t%
作ってみた。ファイル名に%がはいらない前提ですが、こんな手もあるということで勘弁願いたい。
@echo off
set t=tmp.bat
echo type bass.csv^^>%t%
for /f "delims=" %%a in ( delete.txt ) do (
echo ^| find /v "%%a,"^^>>%t%
)
echo ^>output.csv>>%t%
call %t%
del %t%
943デフォルトの名無しさん
2018/11/01(木) 07:13:18.37ID:5DVAbKOZ 夜見た時は何をやってるのか分からなかった。
finnd /vをパイプでパターン数繰り返すわけね。
finnd /vをパイプでパターン数繰り返すわけね。
944デフォルトの名無しさん
2018/11/01(木) 11:22:42.11ID:06yasLFO %ってファイル名に使えるんだね
半角記号でバッチの挙動に関係するのは「!」くらいしか知らなかったわ。
じゃあ変数名と同じ名前のフォルダ(例えば「%appdata%」)に
cdで移動するのは無理って事?
半角記号でバッチの挙動に関係するのは「!」くらいしか知らなかったわ。
じゃあ変数名と同じ名前のフォルダ(例えば「%appdata%」)に
cdで移動するのは無理って事?
945デフォルトの名無しさん
2018/11/01(木) 11:39:55.83ID:OrBUhe7y @echo off
md %%appdata%%
cd %%appdata%%
cd
pause
md %%appdata%%
cd %%appdata%%
cd
pause
946デフォルトの名無しさん
2018/11/01(木) 11:46:36.02ID:OrBUhe7y >set /p a=
%appdata%
>cd %a%
>cd
D:\%appdata%
%appdata%
>cd %a%
>cd
D:\%appdata%
947デフォルトの名無しさん
2018/11/01(木) 19:53:37.88ID:5DVAbKOZ for /f 文の時の()内ってダブルコーテーションのパスつっこむとダメなのね
知らなかったわ……
知らなかったわ……
948デフォルトの名無しさん
2018/11/01(木) 21:09:19.14ID:OeVqRgzL usebackqがあるだろ
949デフォルトの名無しさん
2018/11/02(金) 17:48:30.39ID:C2p2E45I950デフォルトの名無しさん
2018/11/05(月) 20:55:44.71ID:LVlVWx6w 遅延展開だと論理否定の単項演算子が全く使い物にならない
@echo off
setlocal enabledelayedexpansion
set /a a=0,b=0
set /a "a=!22+!33"
echo a=!a!
set /a "b=!(5^5)"
echo b=!b!
pause
なんだこの結果は
a=33
b=55
正解は
a=0
b=1
@echo off
setlocal enabledelayedexpansion
set /a a=0,b=0
set /a "a=!22+!33"
echo a=!a!
set /a "b=!(5^5)"
echo b=!b!
pause
なんだこの結果は
a=33
b=55
正解は
a=0
b=1
951デフォルトの名無しさん
2018/11/06(火) 07:20:24.04ID:4bA2Iy3p >>950
XORは二重引用符で囲んでも更にエスケープの謎仕様
@echo off
set n=!
setlocal enabledelayedexpansion
set /a a=0,b=0
set /a "a=!n!22+!n!33"
echo a=!a!
set /a "b=!n!(5^^5)"
echo b=!b!
pause
a=0
b=1
XORは二重引用符で囲んでも更にエスケープの謎仕様
@echo off
set n=!
setlocal enabledelayedexpansion
set /a a=0,b=0
set /a "a=!n!22+!n!33"
echo a=!a!
set /a "b=!n!(5^^5)"
echo b=!b!
pause
a=0
b=1
952デフォルトの名無しさん
2018/11/06(火) 08:19:38.89ID:NUZ4yNuE 言語仕様に謎が多すぎて業務に使うには怖い
953デフォルトの名無しさん
2018/11/06(火) 10:53:18.93ID:XCQlzVed 標準インストールされてるという以外に長所はないよなぁ
954デフォルトの名無しさん
2018/11/06(火) 11:06:43.59ID:OYWwvpi1 今のWindowsなら、Powerchell?、WSH?なら、標準インストールされているが・・・・。
以前なら、REXX(PC-DOS)とか、QBASICあたり?
でも、使い物になるのは・・・・。
以前なら、REXX(PC-DOS)とか、QBASICあたり?
でも、使い物になるのは・・・・。
955デフォルトの名無しさん
2018/11/06(火) 11:25:34.30ID:CgLejKNb QBASICは中身がないので別途買わないと動かないよ
956デフォルトの名無しさん
2018/11/06(火) 14:54:37.43ID:7wQVLanf957デフォルトの名無しさん
2018/11/06(火) 15:53:15.52ID:4bA2Iy3p >>956
謎ですねえ
>cmd /v:on
>set n=!
>set /a "a=!n!(123^456)"
0
>set /a "a=!n!(123^^456)"
0
>set /a "a=!n!(123^^^456)"
0
>set /a "a=!n!(123^^^^456)"
オペランドがありません。
>set /a "a=(123^456)"
435
>set /a "a=(123^^456)"
オペランドがありません。
謎ですねえ
>cmd /v:on
>set n=!
>set /a "a=!n!(123^456)"
0
>set /a "a=!n!(123^^456)"
0
>set /a "a=!n!(123^^^456)"
0
>set /a "a=!n!(123^^^^456)"
オペランドがありません。
>set /a "a=(123^456)"
435
>set /a "a=(123^^456)"
オペランドがありません。
958デフォルトの名無しさん
2018/11/06(火) 15:56:47.52ID:4bA2Iy3p たぶん式に遅延変数があると2回展開してるんじゃ?
959デフォルトの名無しさん
2018/11/06(火) 16:35:24.41ID:4bA2Iy3p 遅延変数が無くても
NOT演算がある時に再エスケープ(^^)が必要みたいね
>cmd /v:on
>set /a "a=!(123^123)"
0
>set /a "a=!(123^^123)"
1
>set /a "a=(123^123)"
0
>set /a "a=(123^456)"
435
>
一番上の式は !(123123) で 0 になってると思う
NOT演算がある時に再エスケープ(^^)が必要みたいね
>cmd /v:on
>set /a "a=!(123^123)"
0
>set /a "a=!(123^^123)"
1
>set /a "a=(123^123)"
0
>set /a "a=(123^456)"
435
>
一番上の式は !(123123) で 0 になってると思う
960デフォルトの名無しさん
2018/11/06(火) 16:48:03.38ID:4bA2Iy3p 遅延無しの環境では二重引用符だけでエスケープは要らないようだ
>cmd /v:off
>set /a "a=!(123^123)"
1
>
>cmd /v:off
>set /a "a=!(123^123)"
1
>
961デフォルトの名無しさん
2018/11/07(水) 07:55:29.42ID:BI4/Q6Ue 遅延モードでは式の中に ! 文字があると展開の処理が違うんだろう。
だから ^ 文字の扱いも変化する。
だから ^ 文字の扱いも変化する。
962デフォルトの名無しさん
2018/11/08(木) 07:17:29.99ID:9iJL9tpZ @ECHO OFF
REM 単項演算子 ! を使用しないNOT演算
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /L %%I IN (-3,1,3) DO (
SET /A A=%%I
SET /A "B=~(A|-A)>>31&1"
ECHO A=!A! , NOT A=!B!
)
PAUSE
IF使えば簡単だけど
REM 単項演算子 ! を使用しないNOT演算
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /L %%I IN (-3,1,3) DO (
SET /A A=%%I
SET /A "B=~(A|-A)>>31&1"
ECHO A=!A! , NOT A=!B!
)
PAUSE
IF使えば簡単だけど
963デフォルトの名無しさん
2018/11/09(金) 09:53:58.29ID:3Y5lMbnv %~nx0 が変だ
>dir /b
test.bat
>type test.bat
@echo file="%~nx0"
>test
file="test.bat"
>"test"
file="test"
>
>dir /b
test.bat
>type test.bat
@echo file="%~nx0"
>test
file="test.bat"
>"test"
file="test"
>
964デフォルトの名無しさん
2018/11/09(金) 11:09:53.39ID:3Y5lMbnv どうも先頭の引用符が怪しい
>.\"test"
file="test.bat"
>test"
file="test.bat"
>"test
file="test"
>
>.\"test"
file="test.bat"
>test"
file="test.bat"
>"test
file="test"
>
965デフォルトの名無しさん
2018/11/09(金) 17:30:33.44ID:3Y5lMbnv >te"st
file="test.bat"
file="test.bat"
966デフォルトの名無しさん
2018/11/09(金) 19:53:31.92ID:BPg47oOK test.exe.bat
967デフォルトの名無しさん
2018/11/09(金) 21:20:20.98ID:3Y5lMbnv >t"E"s"T"
file="test.bat"
>"t"E"s"T"
file="t"E"s"T"
先頭が引用符だと
%~nx0 は入力丸写しの
拡張子無視のバカ仕様らしい
file="test.bat"
>"t"E"s"T"
file="t"E"s"T"
先頭が引用符だと
%~nx0 は入力丸写しの
拡張子無視のバカ仕様らしい
968デフォルトの名無しさん
2018/11/14(水) 01:02:30.37ID:fbx51wpG 7z の個別連続圧縮のやり方を教えてください。
あまり詳しくなくてネットを見て見よう見まねで作ったので自分でもよく分かってません。
@echo off
set exe7z="C:\Program Files\7-Zip\7z.exe"
:start
if "%~1"=="" exit /b
%exe7z% a -r -mmt=on -mx=9 -ssw -txz "%~dpnx1.7z" "%~1"
shift
goto start
このままだと作成された 7z のファイル名に元ファイルの拡張子が付いてしまいます。
dpn1 だとファイル名の拡張子は消えるけど、作成された 7z の中のファイルは拡張子が消えた状態になってしまいます。
ファイル名から元の拡張子を消し、中のファイルは拡張子を残したままってどこを変えればよいのでしょうか?
あまり詳しくなくてネットを見て見よう見まねで作ったので自分でもよく分かってません。
@echo off
set exe7z="C:\Program Files\7-Zip\7z.exe"
:start
if "%~1"=="" exit /b
%exe7z% a -r -mmt=on -mx=9 -ssw -txz "%~dpnx1.7z" "%~1"
shift
goto start
このままだと作成された 7z のファイル名に元ファイルの拡張子が付いてしまいます。
dpn1 だとファイル名の拡張子は消えるけど、作成された 7z の中のファイルは拡張子が消えた状態になってしまいます。
ファイル名から元の拡張子を消し、中のファイルは拡張子を残したままってどこを変えればよいのでしょうか?
969デフォルトの名無しさん
2018/11/14(水) 06:32:53.24ID:JBsUV7Ak 単に7zipのcliコマンドオプションの使い方で、バッチと関係ないなあ...
970デフォルトの名無しさん
2018/11/14(水) 06:39:30.75ID:vPR2E9Wi -txz だと書庫のヘッダににファイル名の情報は無い
書庫名を変えて開くと中のファイル名も同じく変わるだけ
中身は同じ
書庫名を変えて開くと中のファイル名も同じく変わるだけ
中身は同じ
971デフォルトの名無しさん
2018/11/14(水) 06:57:09.62ID:JBsUV7Ak 要するにxzファイルフォーマットの限界だな。ファイル名を保持する機能が無い
972デフォルトの名無しさん
2018/11/14(水) 07:10:28.19ID:vPR2E9Wi だから複数ファイルの圧縮も出来ない
973デフォルトの名無しさん
2018/11/15(木) 02:26:56.15ID:/pNu0fIl できないのか。残念。
974デフォルトの名無しさん
2018/11/15(木) 03:44:20.67ID:sPg3U71k xzじゃないとダメなの?
zipやrarや7zにしちゃダメなの?
zipやrarや7zにしちゃダメなの?
975デフォルトの名無しさん
2018/11/15(木) 04:23:57.43ID:eQKfIPvp 反応遅っっw
976デフォルトの名無しさん
2018/11/15(木) 04:24:41.49ID:MW4yWYe4977デフォルトの名無しさん
2018/11/19(月) 19:31:45.62ID:qVZWX1fW ところで、結局、DOSでの圧縮はどの形式がおすすめ?
978デフォルトの名無しさん
2018/11/19(月) 20:03:49.96ID:Qq88xGOU DOSなんてもう使ってないし
979デフォルトの名無しさん
2018/11/19(月) 20:26:27.04ID:8P0ZFwQc >>977
lzh 一択
lzh 一択
980デフォルトの名無しさん
2018/11/19(月) 23:22:31.08ID:uf9ZfFD/ >>979
右に同じ
右に同じ
981デフォルトの名無しさん
2018/11/20(火) 03:39:49.15ID:rmOcRzV5 lzhは脆弱性があるから使うべきではない
zip一択
DOSで使えるzipアプリがあるかどうかは知らん
zip一択
DOSで使えるzipアプリがあるかどうかは知らん
982デフォルトの名無しさん
2018/11/20(火) 06:48:32.61ID:TCh3BaRv983デフォルトの名無しさん
2018/11/20(火) 09:38:17.04ID:O/AOgigh そもそもアンチウィルスソフトに対応してもらえないってのが脆弱性でしょ。
事実上公式最新版のUNLHA.DLLはソース非公開で
ソース公開してる古いDOS版はヘッダ構造体がサイズ固定で静的に確保されてるから、
例えばDOSでは考慮しなくて良かった数千文字の
長いファイル名があるとバッファオーバーランを引き起こす。
アンチウィルスソフトによってはDOS版のソースを使ってるので
バッファオーバーランを発生させるようなヘッダを不正扱いして
該当書庫のそれ以降の圧縮ファイルの検査をスルーするものがあるが、
そのような検査されない圧縮ファイルであっても事実上公式のUNLHA.DLLでは解凍できてしまう。
検査はされないが解凍できてしまうようなファイルにウィルスしこまれたら大変ってのが「脆弱性」なわけ。
アンチウィルスソフトが対応してくれないなら脆弱性は対策されてるとは言えないっしょ。
対処法は誰かが移植性の高いソースコードを書いて公開するぐらいしかないよーな。
事実上公式最新版のUNLHA.DLLはソース非公開で
ソース公開してる古いDOS版はヘッダ構造体がサイズ固定で静的に確保されてるから、
例えばDOSでは考慮しなくて良かった数千文字の
長いファイル名があるとバッファオーバーランを引き起こす。
アンチウィルスソフトによってはDOS版のソースを使ってるので
バッファオーバーランを発生させるようなヘッダを不正扱いして
該当書庫のそれ以降の圧縮ファイルの検査をスルーするものがあるが、
そのような検査されない圧縮ファイルであっても事実上公式のUNLHA.DLLでは解凍できてしまう。
検査はされないが解凍できてしまうようなファイルにウィルスしこまれたら大変ってのが「脆弱性」なわけ。
アンチウィルスソフトが対応してくれないなら脆弱性は対策されてるとは言えないっしょ。
対処法は誰かが移植性の高いソースコードを書いて公開するぐらいしかないよーな。
984デフォルトの名無しさん
2018/11/20(火) 21:31:14.05ID:9NuM4Bsa >>983
どっちもねーよアホンダラ。
LHA は日本独自の圧縮アルゴリズム&zipに追い越された。
いわゆるガラパゴス技術。いらん。
数年前まで役所が .lzh とかで何かしら添付ファイル送ってくることがあって文句付けようかと思ったことがある。
どっちもねーよアホンダラ。
LHA は日本独自の圧縮アルゴリズム&zipに追い越された。
いわゆるガラパゴス技術。いらん。
数年前まで役所が .lzh とかで何かしら添付ファイル送ってくることがあって文句付けようかと思ったことがある。
985デフォルトの名無しさん
2018/11/20(火) 22:34:45.84ID:7AOElbkD986デフォルトの名無しさん
2018/11/20(火) 22:42:17.88ID:U4aYcO/c 純粋なDOS(16bit)を使っててウィルスが怖いなんて思う人いるのか
987デフォルトの名無しさん
2018/11/20(火) 22:44:33.63ID:htpgQQTF win95か98だとしたら背筋が凍る
988デフォルトの名無しさん
2018/11/20(火) 22:50:05.05ID:U4aYcO/c >>987
いやだからDOSを狙ったウィルスなんかが今時流通してるって思うのかってことさ
いやだからDOSを狙ったウィルスなんかが今時流通してるって思うのかってことさ
989デフォルトの名無しさん
2018/11/21(水) 00:32:47.70ID:dG4a7MEF990デフォルトの名無しさん
2018/11/21(水) 06:43:17.14ID:sFoC6dAL >>989
馬鹿なの?
そんなのlhzに限らずどんな書庫ファイルでも同じだろ
単にアンチウイルスソフトが対応しなかっだけの話
まあグローバルに展開してるマカフィーやシマンテックから見たら極東でちょっと流行ってただけのファイルフォーマットにいちいち対応してられるかよって思うのも無理はないわな
馬鹿なの?
そんなのlhzに限らずどんな書庫ファイルでも同じだろ
単にアンチウイルスソフトが対応しなかっだけの話
まあグローバルに展開してるマカフィーやシマンテックから見たら極東でちょっと流行ってただけのファイルフォーマットにいちいち対応してられるかよって思うのも無理はないわな
991デフォルトの名無しさん
2018/11/21(水) 08:07:38.87ID:dG4a7MEF >>990
いや、lzhのヘッダは安全性そっちのけで拡張性と互換性を優先した結果、
論理的な最大ヘッダサイズが4ギガバイト(要するに制限がない)とか酷い事になってるからねぇ……
例えば最大で64キロバイト程度のzipなんかと同等に並べるのはちょっと無理じゃねーかと。
いや、lzhのヘッダは安全性そっちのけで拡張性と互換性を優先した結果、
論理的な最大ヘッダサイズが4ギガバイト(要するに制限がない)とか酷い事になってるからねぇ……
例えば最大で64キロバイト程度のzipなんかと同等に並べるのはちょっと無理じゃねーかと。
992デフォルトの名無しさん
2018/11/21(水) 09:43:13.45ID:nqncv/qX993デフォルトの名無しさん
2018/11/21(水) 09:46:53.64ID:sFoC6dAL994デフォルトの名無しさん
2018/11/21(水) 09:50:12.82ID:sFoC6dAL995デフォルトの名無しさん
2018/11/21(水) 11:07:43.06ID:dG4a7MEF >>993
おいおい……
64キロバイトを一括でメモリに読み込んで処理すんのと
4ギガバイトを逐次読み込んで処理しなきゃいけないのとでは
実装の難易度もコストも全然違うんだけど……
初心者でもわかりやすいところで言えば
64キロバイトの方はメモリが潤沢にあれば静的なメモリ確保でもいいけど
4ギガバイトの方は普通は動的なメモリ確保が必須になるし。
おいおい……
64キロバイトを一括でメモリに読み込んで処理すんのと
4ギガバイトを逐次読み込んで処理しなきゃいけないのとでは
実装の難易度もコストも全然違うんだけど……
初心者でもわかりやすいところで言えば
64キロバイトの方はメモリが潤沢にあれば静的なメモリ確保でもいいけど
4ギガバイトの方は普通は動的なメモリ確保が必須になるし。
996デフォルトの名無しさん
2018/11/21(水) 11:11:51.13ID:guoVPW2S ・
997デフォルトの名無しさん
2018/11/21(水) 11:49:46.67ID:eSuVM7gW ・
998デフォルトの名無しさん
2018/11/21(水) 12:29:53.03ID:sFoC6dAL999デフォルトの名無しさん
2018/11/21(水) 12:35:19.04ID:sFoC6dAL そもそも動的メモリー確保が難しいとかどんだけレベル低いんだよ w
1000デフォルトの名無しさん
2018/11/21(水) 12:36:54.21ID:sFoC6dAL と言う事でバカの頭に脆弱性があっただけ
終わり w
終わり w
10011001
Over 1000Thread このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 619日 22時間 49分 43秒
新しいスレッドを立ててください。
life time: 619日 22時間 49分 43秒
10021002
Over 1000Thread 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。
ニュース
- 「米価このまま維持されてしかるべきだ」佐賀県知事、稲作農家の経営踏まえ言及 ★4 [蚤の市★]
- 永野芽郁、衝撃の“肉食W不倫”の代償「CMドミノ降板」『キャスター』出演シーン大幅カット [阿弥陀ヶ峰★]
- 【大阪・関西万博】“空飛ぶクルマ” デモ飛行中に機体の一部破損 [香味焙煎★]
- 【訃報】大宮エリーさん死去 49歳 映画監督、脚本家、演出家など幅広く活躍… 電通デビュー作は広末涼子のドコモCM [冬月記者★]
- 中居正広、水面下で反撃の準備か 第三者委員会の報告書での“性暴力者”認定に強い抵抗感、自らの口で真相を明らかにする考えも ★8 [Ailuropoda melanoleuca★]
- 【FF】『ファイナルファンタジー3』35周年!ジョブチェンジシステムや召喚獣を導入、シリーズの礎となる作品。 たまねぎ剣士が光の戦士へ [湛然★]
- 【決定版】NPB史上最強にかっこいいピッチングフォームw w w w w w w w w w w w w w w w w w w w
- 【急募】関西援助交際について知ってること [626728568]
- FC2PPVにメチャクチャな逸材が出演して界隈が騒ぎに🤭💕 [153490809]
- 俺「派遣君、あそこの自動販売機でお茶買った?」派遣「はい」俺「あの自販機は労働組合の物だよ?非組合員がなぜ買ったの? [257926174]
- Vtuberオタク「私服こんな感じです」 [159091185]
- __トランプ関税、記録的な高収益150億ドルが生まれさらに増加中 [827565401]