18/11/21 14:52:07.84 v84I4o+L.net
拡張子が .cmd または .bat のバッチファイルのスクリプティング(プログラミング)に関わる
質問,テクニック(JScript,Perl等の埋め込みなど含む),関連情報のためのスレです。
※何でも無理矢理バッチでやろうとせず、WSH等の使用も検討しましょう。
前スレ
【.cmd】 バッチファイルスクリプト %11 【.bat】©2ch.net
スレリンク(tech板)
【.cmd】 バッチファイルスクリプト %12 【.bat】
スレリンク(tech板)
それ以前の過去スレ
%10 スレリンク(tech板)
%9 スレリンク(tech板)
%8 スレリンク(tech板)
%7 スレリンク(tech板)
%6 スレリンク(tech板)
%5 スレリンク(tech板)
%4 スレリンク(tech板)
%3 スレリンク(tech板)
%2 スレリンク(tech板)
%1 スレリンク(tech板)
2:デフォルトの名無しさん
18/11/21 14:53:38.55 v84I4o+L.net
スレ作った
3:デフォルトの名無しさん
18/11/21 15:10:24.99 ROx7bOng.net
>>1
いちおつ
ところで、最近、プロンプトの色が変わってしまったんだが直し方教えてください
くすんだ感じになってしまう
color 9f
とか明るい色が顕著
自分で加えた変更の何が影響したのかわからず、途方に暮れてます
4:デフォルトの名無しさん
18/11/21 15:28:50.54 0+i4JzOE.net
タヒ
5:デフォルトの名無しさん
18/11/21 15:34:12.06 0TmpON8B.net
>>1乙
テンプレ文だがもうWSHよりはPowershellじゃないのかしら?
6:デフォルトの名無しさん
18/11/21 15:54:50.45 waeO4Jak.net
powershellはここの板に別スレがあってここで取り扱う必用は無い
一方wshはもはや専用スレは無くこのスレに含めた形で残っている
7:デフォルトの名無しさん
18/11/21 23:59:36.40 VxDAgoaS.net
>>3 自己レスです
レジストリの
HKEY_CURRENT_USER\Console にある ColorTableXX で指定された
色 00BBGGRR がソレだったので何かが変だった訳でもなく、忠実に
この値を読んでいただけでした
黒をわざわざ 0c0c0c にしていたり、全テーブル 00 から 15 まで
全て変更が入っていたので、いつの間に変更したのかという疑問が
残りますが……
8:デフォルトの名無しさん
18/11/22 05:37:11.56 HUZaaTR+.net
>REG QUERY "HKCU\Console" /f ColorTable*
HKEY_CURRENT_USER\Console
ColorTable00 REG_DWORD 0x0
ColorTable01 REG_DWORD 0x800000
ColorTable02 REG_DWORD 0x8000
ColorTable03 REG_DWORD 0x808000
ColorTable04 REG_DWORD 0x80
ColorTable05 REG_DWORD 0x800080
ColorTable06 REG_DWORD 0x8080
ColorTable07 REG_DWORD 0xc0c0c0
ColorTable08 REG_DWORD 0x808080
ColorTable09 REG_DWORD 0xff0000
ColorTable10 REG_DWORD 0xff00
ColorTable11 REG_DWORD 0xffff00
ColorTable12 REG_DWORD 0xff
ColorTable13 REG_DWORD 0xff00ff
ColorTable14 REG_DWORD 0xffff
ColorTable15 REG_DWORD 0xffffff
9:デフォルトの名無しさん
18/11/22 06:45:17.58 y7NAvoby.net
>>6
> powershellはここの板に別スレがあってここで取り扱う必用は無い
別にここで取り扱えという話じゃなくて「使用も検討しましょう」って話な
PowerShell の話題が出たら誘導すればいいだけだし
> 一方wshはもはや専用スレは無くこのスレに含めた形で残っている
wshの専用スレがないのは需要がないからだろ
そんなものに対して使用を検討する必要なんてないと思うぞ
10:デフォルトの名無しさん
18/11/22 07:28:54.55 Q9Jr5DcP.net
>>8
デフォルト値ありがとうございます
実際にOSインストールしなおしての確認はしてないのですが
Win10_1809Oct_Japanese_x64.iso の install.wim の
install.wim\3\Users\Default\NTUSER.DAT
ハイブファイルのロードをしてみると変化していた方の配色と一致してました
OSクリーンインストール後、しばらく変化に気づいていなかっただけ、
という事のようです
少し透かしていたから 000000 と 0c0c0c の違いに気づくのもほぼ無理ゲー、
だったのも加味して……
スレ汚し失礼しました
11:デフォルトの名無しさん
18/11/22 08:20:54.79 HUZaaTR+.net
俺も以前に経験あるが何で勝手に変わるのか未だに不明
デフォにしたけりゃ"HKCU\Console"消して起動したらいいんだけど
12:デフォルトの名無しさん
18/11/23 06:41:38.84 Yr5PhtU+.net
>>8 だが
俺も"HKCU\Console"消して起動したら
ColorTable00 が 0x0 から 0xc0c0c になったよ
今はこれがデフォルトなんだな
13:デフォルトの名無しさん
18/11/23 07:03:12.22 Yr5PhtU+.net
dir | more でEnter押すと1行ずつ出てくるんだけど
前からこんな動作だったっけ?
dir /p みたいにページごとにスクロールしないのか?
ちなみにWin10Pro 1809 17763.107 だ
14:デフォルトの名無しさん
18/11/23 07:31:03.82 Yr5PhtU+.net
すまんhelp見たら
<ret> 次の行を表示します。
になってた。
あとスレチだが gpg -d がエラー出る...
15:デフォルトの名無しさん
18/11/23 13:03:06.27 H8vDP5fG.net
このスレってテンプレに「 次スレは>>970踏んだ人が立てましょう 」とかないんだね。
毎回同じ人が立ててるのかな?
16:デフォルトの名無しさん
18/12/02 11:33:28.29 WVaKBjKU.net
ffmpegで動画容量を減らしています
この先何度も使いそうなのでドラック&ドロップなどで簡単にしたいのでバッチファイルの作り方を教えていただけませんか
また,バッチファイルでなくとも他に良い方法などありましたらぜひお願いします
ffmpeg -i "sample.mp4" -b:v 500k -pass 1 output.mp4
ffmpeg -i "sample.mp4" -b:v 500k -pass 2 output.mp4
普段はこれを実行しています
17:デフォルトの名無しさん
18/12/02 14:26:12.73 uIlAasYL.net
シェルスクリプト・PowerShell もあるけど、
安全性のため、ダブルクリックでは動かない
ダブルクリックで動くのは、バッチファイルだけ
18:デフォルトの名無しさん
18/12/03 10:52:45.51 mYQmjn55.net
>>16
オイラはSendToにバッチファイル(のショートカットでもOK)入れて右クリックの送るから使ってる
C:\Users\ユーザ名\AppData\Roaming\Microsoft\Windows\SendTo
2-passは使ったことないけど、とりあえず >>16 の処理をするようになってるはず
適当なファイル名を拡張子batで保存して使ってちょ
書き込み時にインデント消えちゃうかもしれないけど、3行目の&&の前だけは先頭に空白1文字以上入れてちょ
for %%f in (%*) do (
ffmpeg -y -i "%%~ff" -b:v 500k -pass 1 -f mp4 NUL ^
&& ffmpeg -i "%%~ff" -b:v 500k -pass 2 "%%~df%%~pf%%~nf_output%%~xf"
)
pause
自動でウィンドウ閉じたければ最後のpauseはいらない
出力ファイル名は入力ファイル名_outputにしてるけど、お好みで変えればよい
複数ファイルも順番に処理するよ
19:デフォルトの名無しさん
18/12/04 18:23:57.45 YV7FMG5g.net
typeコマンドってパイプかますと出力が変わるんだな...
以前はこんなじゃなかったような気がするが?
>type a
abc漢字def
>nkf -SjO a b
>nkf -Js b
abc漢字def
>type b
abc4A;zdef
>type b | more
abc$B4A;z(Bdef
20:デフォルトの名無しさん
18/12/04 20:16:59.52 Mme7W69z.net
"C:\hoge.exe"というプログラムを再起動したくて
taskkill /im hoge.exe /f
start C:\hoge.exe
という2行のバッチを書いたら、hoge.exeがまだ終了しきってなくて起動しませんでした。
hoge.exeの終了にかかる時間が3秒だったり20秒だったりとまちまちなので
タスクリストから居なくなったことを確認してから起動したいのですが
どう書けばよいのでしょうか?
21:デフォルトの名無しさん
18/12/04 21:09:17.31 YV7FMG5g.net
TASKLISTで確認?
22:デフォルトの名無しさん
18/12/05 10:02:24.61 miUFx5r6.net
>>20
こんな感じでどうだろうか?
taskkill /im hoge.exe /f
:check_run
timeout /t 1 /nobreak >nul
tasklist | find "hoge.exe" >nul && goto check_run
start C:\hoge.exe
23:デフォルトの名無しさん
18/12/05 15:06:21.73 B1LaPmLX.net
>>20
tasklist xx|findstr xx
if %errorlevel% == 0
24:デフォルトの名無しさん
18/12/05 15:22:10.57 GaZgkwnu.net
今help見たら、まだ直ってねえ...
tasklist/?のフィルター名IMAGENAMは間違いだ...
for /f "skip=1" %%i in ('tasklist /fi "imagename eq hoge.exe"') do goto check_run
25:デフォルトの名無しさん
18/12/05 15:39:45.58 GaZgkwnu.net
あ、条件が逆w...
26:デフォルトの名無しさん
18/12/05 15:42:42.33 GaZgkwnu.net
逆じゃないなw ボケたなあ...
27:20
18/12/05 22:04:34.15 82viBDdQ.net
みなさんレスありがとうございます!
明日職場で試してみますね。
恥ずかしながら自宅PCが古すぎてtasklistコマンドとかが無いので
(WinXP Homeです。Win7が故障中なので…)
どうもありがとうございました!
28:デフォルトの名無しさん
18/12/05 22:18:55.09 NGe7cQU/.net
XPならtimeoutも無いから
29:デフォルトの名無しさん
18/12/06 05:58:03.99 +WfW7iJP.net
XPってtaklistすらないんか…( ゚д゚)ポカーン
にしては↓のスレは盛況だなw
WindowsXPを使い続けるよ Part94
スレリンク(win板)
30:デフォルトの名無しさん
18/12/06 06:30:42.74 U/lGMKnD.net
XP Proにはあるんだが
XP HomeではPowerShellのGet-Processで代用できるらしいよ
PowerShell1.1以降らしいから、PowerShell2.0をインストールしないといけないけど
31:デフォルトの名無しさん
18/12/06 15:26:32.29 iJNEICpM.net
Sysinternals Suite にある、pslistを始めとするコマンド群を利用すれば、
XPでも同等のことは出来る
32:デフォルトの名無しさん
18/12/06 21:28:59.92 HLPPFLjR.net
XPの駆除には苦労した。
Vistaの切られぶりには辟易。
管理者って損な役回りだよなぁ…。
今は7の駆除中。
33:デフォルトの名無しさん
18/12/06 23:38:01.47 UfR2YFj9.net
>>18
ありがとうございます
レス内のものは上手く行きませんでしたが別でうまく行くものを作るためのヒントになりました
34:デフォルトの名無しさん
18/12/07 11:34:54.02 k1b27fN5.net
>>19
それパイプ処理してるコマンドの方の問題じゃなくて?
35:デフォルトの名無しさん
18/12/07 12:17:44.85 cJMcluJv.net
俺には何が原因か分からない
画面コンソール入力するたびに最下段にスクロールするし
スレチだけど
gpg -d で画面表示させるとエラー
gpg -h で画面表示させると文字化けまくり
cmd の表示関係が最近おかしい...
36:デフォルトの名無しさん
18/12/07 19:56:05.65 iBsL10N5.net
xcopyで出来ることは全てrobocopyでも出来るという認識で良いのでしょうか?
37:デフォルトの名無しさん
18/12/07 21:49:55.05 cUniS7mm.net
>>36
削られてるオプションもあるけど「出来ること」に関してはほぼその認識で合ってるんじゃないかな。
ただ、xcopy が対話指向なのに対して robocopy はバッチ指向になってる。(言い換えればログ指向)
コマンドを置き換えれば良いというものではない。場合によってはログが五月蠅い。
ま、今時、ネットワーク越しやバッチ処理でのコピーに xcopy は御法度レベルだから xcopy なんか忘れちゃってもいいと思う。
38:not 36
18/12/07 23:31:50.72 J47iFz0r.net
>>37
>ネットワーク越しやバッチ処理でのコピーに xcopy は御法度レベルだから xcopy なんか忘れちゃってもいいと思う。
そうだったのか、情報ありがとう
調べたらxcopyを使ったバッチファイルがあった、なおそ
39:デフォルトの名無しさん
18/12/08 20:14:50.36 Zhb2FJyz.net
xcopyはほぼフォルダ丸ごとコピー用途に使ってたから
/mirオプションで済むrobocopyの方が覚えやすくて助かるw
コピー自体も高速らしいし
40:37
18/12/08 22:52:01.33 i9Z2WdJR.net
>>38
xcopy はコピー中にネットワークが切れたりするとファイルがシレっと壊れるのだよ。
ノートPCがバッテリーアウトでハイバネーションに入るような時に起こりやすい。
対話式に目で動作を見ながらの分にはいいけど、それ以外の用途にはお勧めしないのだ。
41:デフォルトの名無しさん
18/12/08 23:16:46.42 hZepSGXS.net
単純コピーだったらxcopyの方がはるかに早かった気がするんだが
42:デフォルトの名無しさん
18/12/08 23:33:03.66 fChhgbp6.net
ネット越しだと、SSHが使えるrsyncがいいんだけど、
Windowsで使うにはcygwinが必要になるのでやや使いづらいかも
そこで、クラウドでも使えるrsyncという触れ込みのrcloneがいいかな
タイムスタンプだけが変更された時でも、実体をコピーすること無く、タイムスタンプだけを変更するなど、
それなりに賢い処理がされるようだ
もちろんローカルファイル同士でも使える
バッチによる基本的なバックアップ用途の使い方しかしていないけど、とにかく多機能でおすすめ
GoogleドライブやOneDriveなんかのクラウドへのバックアップも、バッチ処理で簡単にできる
43:39
18/12/09 10:35:27.52 lZKvlyRa.net
>>41
過去にrobocopyのが速いみたいな記事を見た気がしたんだが
今探しても見当たらないので記憶違いかもしれぬ…
44:デフォルトの名無しさん
18/12/12 12:03:09.26 wwhUpKQ/.net
Windows 10 19H1 で notepad が
BOM無しUTF-8がデフォルト になるそうだな...
いっそのこと コマンド プロンプトも変えてくれ
45:デフォルトの名無しさん
18/12/13 07:50:54.80 3pDLloxA.net
バッチファイルの第一引数をファイル名にしたとして
ファイル名に&とか^が入るときどうやって処理すればいいの?
代入するとエスケープされて消えちゃうのよ。
46:デフォルトの名無しさん
18/12/13 09:07:24.92 J8CqZcRY.net
結局、BOM の有無を気にする開発者がいなかった。
欧米人には関係ないから
ただ、Explorer では、BOMが無いと、UTF-8・sjis の区別がつかないから、文字列で検索できなくなるから、
漏れは、Windows10・WSL・Ubuntu16.04 で、grep を使っている
47:デフォルトの名無しさん
18/12/13 09:48:12.16 vKHUraGB.net
>>45
入らないようにする
48:デフォルトの名無しさん
18/12/13 16:46:34.51 H7Y/MSWd.net
>>45 バッチファイルに直接D&Dで起動用のバッチ
というか他の起動方法なら引数を引用符で囲むだけだし
@ECHO OFF
IF "%~1"=="1" SHIFT /1 & GOTO MAIN
SET "A=%CMDCMDLINE:"=*%"
SET "A=%A:~0,-1%"
FOR /F "tokens=2* delims=*" %%I IN ("%A%") DO SET "B=%%I" & SET "C=%%J"
SET E="%B%" 1
:NEXT_ARG
SET "A=" & FOR /F "tokens=*" %%I IN ("%C%") DO SET "A=%%I"
IF NOT DEFINED A %E%
IF "%A:~0,1%"=="*" (SET "D=*") ELSE SET "D= "
FOR /F "tokens=1* delims=%D%" %%I IN ("%A%") DO SET "B=%%I" & SET "C=%%J"
SET E=%E% "%B%" & GOTO NEXT_ARG
:MAIN
SET /A N=0
:LOOP
IF "%~0"=="" PAUSE & GOTO :EOF
ECHO ARG%N%=%0
SET /A "N+=1" & SHIFT & GOTO LOOP
49:デフォルトの名無しさん
18/12/14 07:43:35.08 0Ppktz+s.net
ありがとうございます。
50:デフォルトの名無しさん
18/12/15 01:06:37.50 1s8Yv8lB.net
dir ってオプション(スイッチ)の順番で表示が異なるのを発見
CD /D C:\
dir /AH /A-D
dir /A-D /AH
51:デフォルトの名無しさん
18/12/15 04:41:20.49 s5MEHoIJ.net
話変わるがスペース無くてもOK
CD/D"C:\
DIR/AH/A-D
DIR/A-D/AH
52:デフォルトの名無しさん
18/12/15 08:56:57.96 q+o88Lhc.net
その仕様のせいでパス区切り文字を/にすることができないという呪いが
53:デフォルトの名無しさん
18/12/16 12:34:58.23 2Wn8M764.net
仕様がカオスになってるよね。
はやくLinuxcommandも標準対応して欲しい
54:デフォルトの名無しさん
18/12/17 00:07:47.83 C+acxNdu.net
>>53
DOSってMS最古だから、ビルベイツ謹製のコードか仕様が残っていて
今の社員は恐れ多くて変えられない
ということにしておこう
55:デフォルトの名無しさん
18/12/17 00:08:37.24 msnfpX97.net
>>51
そうだったのか、サンクス
56:デフォルトの名無しさん
18/12/17 07:58:43.76 xQB1O269.net
>>53
永久にならないから忘れろ
57:デフォルトの名無しさん
18/12/17 19:54:34.22 zeK+PGUB.net
>>43だけどやっぱわからん!
sendtoにバッチファイル入れといてフォルダを指定します。
指定したフォルダの名前をechoで表示したいんだけど&^がフォルダ名に付けられているとフォルダ名表示が出来ない。
batファイル &というフォルダを右クリック送るをした時
@echo off
echo "%~f1" これは表示できる
set fname="%~f1"
echo "%fname%" &や^が消えてしまう
どうやったら代入ができるの?エスケープに置き換えも一文字分しかできないし。
58:デフォルトの名無しさん
18/12/17 20:25:30.59 CiJxr7Yn.net
set "fname=%~f1"
59:デフォルトの名無しさん
18/12/17 20:26:56.58 uU80GVRL.net
>>57
echo %fname%
60:デフォルトの名無しさん
18/12/17 20:28:40.66 uU80GVRL.net
あ、ごめん
どっちでもいいよ
61:デフォルトの名無しさん
19/01/07 13:47:43.45 ZTiiH/I2.net
バッチファイル中の*.*で、そんなファイルはないとエラーが出た
もう一度実行するとこれまでどおり問題なしに実行
windows更新の影響かセキュリティソフトのせいかも知れないが、
ウィルスがコマンドをすり替えている可能性もあるから、バッチ中のコマンドはパスも含めて
たとえばnotepadでなくC:\Windows\notepad.exeの方が安全だなと思った
62:デフォルトの名無しさん
19/01/07 15:56:36.05 ZNh/EsxI.net
話変わるが
今は *.* としても意味無いよ * だけでOK
63:デフォルトの名無しさん
19/01/07 16:12:14.33 06gMfJVc.net
>>62
そうですか、昔のくせでつい
ありがとうございます
64:デフォルトの名無しさん
19/01/07 17:05:59.89 ZNh/EsxI.net
色んなソフト入れると %PATH% が膨れ上がる
使わないパスが30個とか..
気味が悪いのでバッチの先頭に
PATH C:\WINDOWS\system32;C:\WINDOWS;
と書くようにしてる
65:デフォルトの名無しさん
19/01/07 20:11:25.89 xW7Pde1m.net
既に存在しないフォルダが環境変数PATHに設定されてるとコマンド検索がそこで止まってしまう
こんなのを使って時々確認するといい。
powershell $env:path -split ';'^|%{$_ ,(test-path $_ -patht cont ^)}
66:デフォルトの名無しさん
19/01/11 19:37:34.13 WNI2j4XF.net
遅延環境変数OFFでやると面倒だ
ONにするとパス名などの文字列の扱いが複雑化して読み取れないのが出る
67:デフォルトの名無しさん
19/01/12 00:39:03.28 IAz54C40.net
PowerShell で、$env:path -split ';' と打つと、
C:\WINDOWS\system32
C:\WINDOWS
Intel を除いて、これらが先頭に来る
68:デフォルトの名無しさん
19/01/12 07:44:55.84 uK0WXiBn.net
>>67
普通はね
69:デフォルトの名無しさん
19/01/14 09:23:20.28 e5YcHVOA.net
@echo off & set "p=%path%"
:v
for /f "delims=; tokens=1*" %%i in ("%p%") do set "p=%%j" & echo "%%i"
if defined p goto :v
おらの環境
"C:\Program Files (x86)\Common Files\Oracle\Java\javapath"
"C:\ProgramData\Oracle\Java\javapath"
"C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common"
"C:\Program Files (x86)\Intel\iCLS Client\"
"C:\Program Files\Intel\iCLS Client\"
"C:\WINDOWS\system32"
"C:\WINDOWS"
70:デフォルトの名無しさん
19/01/14 09:53:16.85 e5YcHVOA.net
マイクロソフトがどこまでチェックしているか知らんが
コマンド追加したら干渉する可能性はあるな
71:デフォルトの名無しさん
19/01/20 00:11:28.57 xs+avKSw.net
C:\HOGE
├─aaa
│ ├─old
│ │ aaa1.bat
│ │
│ └─src
│ aaa1.bat
│
├─bbb
│ ├─old
│ │ bbb1.bat
│ │
│ └─src
│ bbb1.bat
│
└─ccc
├─old
│ ccc1.bat
│
└─src
ccc1.bat
↑のoldフォルダとその中身を一括で削除したいのですが、コマンドでは難しいでしょうか?
72:デフォルトの名無しさん
19/01/20 00:13:41.92 xs+avKSw.net
↑HOGEの下には実際にはaaa~cccのようなフォルダが無数にあります…
73:デフォルトの名無しさん
19/01/20 00:15:44.50 xs+avKSw.net
↑たびたびすみません。
正確に言うと「HOGE配下に存在する"old"という名前のフォルダとその中身を全て削除する」です。
74:デフォルトの名無しさん
19/01/20 02:15:14.20 pk2ilGy6.net
for /d /r
とif文つかえばいいだけじゃん
75:デフォルトの名無しさん
19/01/20 04:39:06.95 K0yQSeRR.net
del
76:デフォルトの名無しさん
19/01/20 07:09:39.32 YWDkxQqJ.net
FOR /R C:\HOGE %%I IN (.) DO rd/s/q "%%~I\old" 2> nul
77:デフォルトの名無しさん
19/01/20 07:32:36.37 YWDkxQqJ.net
バッチにするまでもない
直接入力なら%%を%に
78:デフォルトの名無しさん
19/01/20 09:22:02.93 pk2ilGy6.net
>>76
rdのところ
rd/s/q "%%~I\old\"
にした方がよいと思う
79:デフォルトの名無しさん
19/01/20 10:27:11.29 pk2ilGy6.net
おいらならこう書く
for /d /r c:\hoge %a in (old) rd /q /s %a
80:デフォルトの名無しさん
19/01/20 10:28:21.11 xs+avKSw.net
>>76
どうもありがとうございます!バッチリ削除できました。
>>78
私も>>78さんのコメントを読んで例えば"old2"という名前のフォルダがあったらこれも消えてしまうのかも?と思ったのですが、そんなことはありませんでした。
でも見た目でそのような疑問を覚える人もいるかもしれないなと思い、特に不要ではあるのですが"old"のあとに"\"を付けることにしました。
ありがとうございます。
81:デフォルトの名無しさん
19/01/20 10:36:33.72 xs+avKSw.net
でもrdはディレクトリ削除コマンドなんだから最後に"\"を付けるのは不自然か…
82:デフォルトの名無しさん
19/01/20 10:54:52.71 YWDkxQqJ.net
>>78 なぜ?
>>79 ワイルドカードじゃないとオプション /D は無意味
これでもいいが
FOR /R %%I IN (OLD) DO RD/S/Q "%%I" 2> NUL
83:デフォルトの名無しさん
19/01/20 11:08:28.37 pk2ilGy6.net
>>82
>ワイルドカードじゃないとオプション /D は無意味
ちゃんとフォルダのみをフ�
84:Bルタするよ、試してみてね
85:デフォルトの名無しさん
19/01/20 11:18:39.20 YWDkxQqJ.net
そうかな?
RD の前に echo 付けて見たら?
ファイルでも RD OLD がでるぞ
FOR のヘルプをよく見てね
86:デフォルトの名無しさん
19/01/21 21:18:15.33 9WBiq3dN.net
ざっくり言うと、
EternalForceBlizzard.bat C:\hoge
とかいうバッチが欲しいという中二に対して「俺なら!」「俺なら!」とやってた流れ…かな。
>>82
どうでもいいけど全部大文字とかやめれ。
内容は知らんが死ぬほどダサい。
87:デフォルトの名無しさん
19/01/21 21:58:45.27 rFmuVz+a.net
今後は小文字にするよ。気が変わるかもしれんが。
forの括弧内のファイルは存在しなくてもスキップしない
例外はワイルドカードで対象はファイル
/dだと対象はフォルダ
ただそれだけの話だ
88:デフォルトの名無しさん
19/01/22 11:52:34.58 dXptnPwJ.net
findstrの結果に文字列を連結したいのですがうまくいきません
どうしたらよういでしょういか?
cd /d %~dp0
type test1.txt | echo"りんご" & findstr "りんご" >> out.txt
89:デフォルトの名無しさん
19/01/22 14:00:46.60 CTNOEPFx.net
call :a "りんご" test1.txt > out.txt & goto :eof
:a
echo %1 & findstr %1 %2
90:デフォルトの名無しさん
19/01/22 15:31:22.37 dXptnPwJ.net
>88
ありがとうございます。
[りんご]
[りんごを含んだ文]
[りんごを含んだ文]
[りんごを含んだ文]
といった感じにでました。
[りんご][りんごを含んだ文]
[りんご][りんごを含んだ文]
[りんご][りんごを含んだ文]
という感じはならないでしょうか?
91:デフォルトの名無しさん
19/01/22 15:58:11.82 CTNOEPFx.net
call :a "りんご" test1.txt > out.txt & goto :eof
:a
for /f delims^=^ eol^= %%i in ('findstr %1 %2') do echo.%1 %%i
92:デフォルトの名無しさん
19/01/22 16:44:03.03 dXptnPwJ.net
>90
おお!、うまくいきました。ありがとうございます!。
エクセルの&のように簡単なのかと思ったら以外と複雑な処理で驚きです。
93:デフォルトの名無しさん
19/01/22 17:08:05.17 nMQEwTi4.net
単に行数を少なくするだけの&の使い方で
デバッグもメンテの面でもいい事はないんで行を分けて書いたほうがいい
94:デフォルトの名無しさん
19/01/22 17:31:44.20 CTNOEPFx.net
そういうのは質問者の方で調整よろしくお願いします
95:デフォルトの名無しさん
19/01/22 18:02:51.94 nMQEwTi4.net
>>93
別に>>90に文句言ってるわけじゃなくて
質問者が&に感心してたので、質問者にアドバイスのつもりで書いただけ
96:デフォルトの名無しさん
19/01/22 18:15:04.06 CTNOEPFx.net
言いたい事は分かります。
はっきり言って自分用のバッチはこんな書き方はしません。
行数を抑える為に繋いでるだけなんで。
バランス見て改行します。すみません。
97:デフォルトの名無しさん
19/01/22 18:27:13.64 nMQEwTi4.net
って思ったら、質問者は&に感心してたわけじゃなくて
逆に&で簡単に書けない点が不満なんだな
98:デフォルトの名無しさん
19/01/22 19:15:10.41 ak2Ch+AT.net
Basic言語では&は文字列結合演算子だが
バッチスクリプトは出自からBasicじゃないので&は別の意味(ステートメントメント区切り)となる
文字列結合演算子自体が存在しない
99:デフォルトの名無しさん
19/01/23 13:46:03.43 HgbeZ9kI.net
昨日の質問者です、たびたびすみません
複数ワードを処理しようとして
call :a "りんご" test1.txt > out.txt
:a
for /f delims^=^ eol^= %%i in ('findstr %1 %2') do echo.%1 %%i
call :a "みかん" test1.txt > out.txt
:a
for /f delims^=^ eol^= %%i in ('findstr %1 %2') do echo.%1 %%i
としたところ、うまくいったのですが
これが5項目くらいになると
dos窓に「別のプロセスが使用中です」と表示されてしまいます。
なにかメモリ的なものがいっぱいになるのでしょうか?
回避方法はありますでしょうか?
100:デフォルトの名無しさん
19/01/23 15:17:41.73 HwNiCy+r.net
意味不明だが?
@echo off
call :a "りんご" test1.txt > out.txt
call :a "みかん" test1.txt >> out.txt
goto :eof
:a
for /f delims^=^ eol^= %%i in ('findstr %1 %2') do echo.%1 %%i
101:デフォルトの名無しさん
19/01/23 15:33:11.44 HwNiCy+r.net
今時、メモリ不足とか滅多に無いよ。
バッチで80byte文字列の一万個の配列変数とかやったことあるけど
問題なかったよ。
102:デフォルトの名無しさん
19/01/23 16:10:02.06 HgbeZ9kI.net
>99さんの書式にするとうまくいきました
おそらく私が
:a
for /f delims^=^ eol^= %%i in ('findstr %1 %2') do echo.%1 %%i
をいっぱい書いてしまったからかもしれません。
103:デフォルトの名無しさん
19/01/24 07:52:40.56 ElV7iNpQ.net
文字列:形式の「ラベル」はバッチファイル内でユニークにしてください。
今回のa:は共通サブルーチンなので、バッチ内で1つで良く、コードの最後に置きましょう。
サブルーチンを使う場合、メインルーチンのラストにはgoto :eof
を書くようにしてください。これが無いとメインが終わった後にまたサブルーチン処理が行われます。
104:デフォルトの名無しさん
19/01/24 07:58:36.47 ElV7iNpQ.net
またバッチ内で複数のサブルーチンを使いたい場合はそれぞれのサブルーチンの後にexit /bのコマンド行を付けてください。
exit /bによってメインルーチンに処理が戻ります。
これ無いと下の行に処理が遷移してしまいます
105:デフォルトの名無しさん
19/01/24 10:48:11.21 4/xiY5nl.net
なるほど、丁寧な説明ありがとうございます。
106:デフォルトの名無しさん
19/01/24 11:16:25.14 tFfJW+eT.net
cmdの基礎を勉強しろ
あまりにも質問のレベルが低いとレスがつかないと思え
107:デフォルトの名無しさん
19/02/16 02:44:12.08 Aqg/y48e.net
for %%I in (*.txt) do (
echo #%%I
)
*.txt だけでなく *.txt2 などもあれば表示する
.txt などの拡張子が3文字の時だけ4文字目以降を無視する
拡張子が2文字の時は問題なし
バグか仕様か
108:デフォルトの名無しさん
19/02/16 14:24:30.26 dbRt9asv.net
dir もね
他にもMS-DOS用の短い名前に反応したり
ワイルドカードは、いやらしい動作をするね
109:デフォルトの名無しさん
19/02/16 15:05:34.51 H4+bjsi1.net
dir c:\*1
でProgram Filesが表示されるやつか
110:デフォルトの名無しさん
19/02/16 15:23:46.61 dbRt9asv.net
del *~*
は危険
111:デフォルトの名無しさん
19/02/16 18:22:32.57 VRMsBAkU.net
8.3形式でもファイル見てるのね
112:デフォルトの名無しさん
19/02/16 21:48:09.10 6/sri1HY.net
>>107
dirまでそうでしたか
知らなかったのは私だけで、みんな知ってたのですね
DOSの特別実装仕様ということにしておこう
113:デフォルトの名無しさん
19/02/17 08:58:17.36 2q4tHixb.net
*.txt2 のファイル名を dir/x で見ると
*~1.TXT とか *~2.TXT になってるから
dir *.txt
dir *txt
dir *xt
dir *t
で一致するということね
114:デフォルトの名無しさん
19/02/17 10:18:01.03 vf3NvI2M.net
やっても良いPCなら OS インストール直後に
>fsutil 8dot3name set
で set 1 をして 8.3名作成を無効化するけど
>fsutil 8dot3name strip
を実際にはしたことがない俺チキン
115:デフォルトの名無しさん
19/02/17 18:32:35.83 2q4tHixb.net
これでOK
for %%i in (*.txt) do if /i "%%~xi"==".txt" echo %%i
116:デフォルトの名無しさん
19/02/18 23:00:03.97 xTG5esR6.net
以下のように「C:\hoge」の下の全ファイルのファイル名(拡張子は除く)を
"aaa"に書き換えたいのですが、どのようなコマンドを書けば良いのでしょうか?
■書き換え前
C:\hoge
│ あああ.txt
│ いいい.xlsx
│
├─hage
│ ううう.xml
│ えええ.docx
│
└─hige
おおお.jpeg
かかか.gif
■書き換え後
C:\hoge
│ aaa.txt
│ aaa.xlsx
│
├─hage
│ aaa.xml
│ aaa.docx
│
└─hige
aaa.jpeg
aaa.gif
117:デフォルトの名無しさん
19/02/18 23:02:17.45 xTG5esR6.net
すみません、higeの下のファイル名がずれてしまいました。
正しくは↓です。
■書き換え前
└─hige
おおお.jpeg
かかか.gif
■書き換え後
└─hige
aaa.jpeg
aaa.gif
118:デフォルトの名無しさん
19/02/18 23:05:19.42 xTG5esR6.net
それと、同一フォルダ内に同じ拡張子のファイルは複数存在しません。
119:デフォルトの名無しさん
19/02/18 23:08:58.74 rXc7x2eo.net
for文とmv組み合わせでしょ
サイト2個検索した方が聞くよりはやくできるとおもうけど
なんで質問したの?
120:デフォルトの名無しさん
19/02/19 06:30:48.56 Hb9ZoB2m.net
>>115
for /r "c:\hoge" %%i in (*) do ren "%%~fi" "aaa%%~xi"
121:デフォルトの名無しさん
19/02/19 09:50:06.91 Hb9ZoB2m.net
話変わるが
for に /r を付けたら
%~nxi の引用符が何故かとれない
>for %i in ("abc") do @echo %~nxi
abc
>for /r %i in ("abc") do @echo %~nxi
"abc"
>for /r %i in ("abc*") do @echo %~nxi
abc
122:デフォルトの名無しさん
19/02/19 10:03:42.75 /Qrw8ZSg.net
管理者として実行したいアプリ、さらに優先度を低で起動させる方法ありますか?
さらにそれをスタートアップに登録したいんです
123:デフォルトの名無しさん
19/02/19 10:09:52.10 e0NdV1CM.net
タスクに登録すれば?
124:デフォルトの名無しさん
19/02/19 10:57:12.10 Hb9ZoB2m.net
start /LOW のコマンドのショートカットを
スタートアップのフォルダに入れりゃいいんじゃね
ショートカットの設定は管理者にして
125:117
19/02/19 20:46:10.94 kZ82VOHH.net
>>118
ネットで探したのですが、バッチファイルをやり始めて日が浅いので使うコマンドの見当も付きませんでした。
今日職場で必要だったので聞いてしまいました。
>>119
助かりました。
どうもありがとうございます。
126:デフォルトの名無しさん
19/02/20 00:04:58.50 GzdyKGwx.net
聞いたほうが早いならそれでもいいと思うよ。
127:デフォルトの名無しさん
19/02/20 08:00:48.35 vs0GH/UB.net
AzureAD、Office365を使うなら(Office365についてはGraphの使いこなしも必須)。バッチやVBSの代替としても必須。
「Powershellが出来る」だけではなくPowershellも活用し、なんの業務をしてたか?がスキルとなる基本的にはインフラ屋のスキルの一要素
128:デフォルトの名無しさん
19/02/20 08:01:45.93 vs0GH/UB.net
すみません
>>126は誤爆
129:デフォルトの名無しさん
19/02/21 18:42:23.51 WAQ7+H44.net
環境変数の中に=があると
変数参照が変な事になってくるな...
>set a=b=c
>echo %a%
b=c
>echo %a=b%
c
130:デフォルトの名無しさん
19/02/21 19:45:58.39 bhin4IwL.net
イコールは^つけないと特殊な動作するはず
131:デフォルトの名無しさん
19/02/21 20:25:05.21 WAQ7+H44.net
俺も最初はそう思ったんだけど...
>set a=b^=c
>echo %a=b%
c
132:デフォルトの名無しさん
19/02/21 21:37:53.86 m0MzDbdd.net
ならないんだけど?(win7)
BATだと
ECHO は <ON> です。
ダイレクトだと
%a=b%
133:デフォルトの名無しさん
19/02/21 21:41:55.31 oU3vU03f.net
自分の環境でもならない
win10
134:デフォルトの名無しさん
19/02/21 22:19:20.44 WAQ7+H44.net
バッチでやって見た
set a=b^=c
echo %a%
echo %a=b%
結果
b=c
c
set "a=b=c" でも同じ
Microsoft Windows 10 Pro
10.0.17763 N/A ビルド 17763
>set a
a=b=c
ALLUSERSPROFILE=C:\ProgramData
APPDATA=C:\Users\ore\AppData\Roaming
135:デフォルトの名無しさん
19/02/21 23:16:08.70 WAQ7+H44.net
>>133
たった今、品質更新プログラムのインストールしました。
KB4487044 (OS ビルド 17763.316)
なんと正常になったようです
結果
b=c
ECHO は <OFF> です。
136:デフォルトの名無しさん
19/03/01 16:41:47.85 7J1MA7z+.net
1.batファイルで
start ***.bat
を実行してその***.batの中に
call ***.exe
があるんだけど
最初に実行するbatファイルでどうにか ***.exeを最小化で起動できますか?
137:デフォルトの名無しさん
19/03/01 16:56:22.92 1DJZnnpK.net
start "" /min "hoge.exe"
138:デフォルトの名無しさん
19/03/12 10:13:24.40 2ZxzO4Nc.net
forで行取得して並列で処理してるんですが、一度にすべて実行するのでPCの負担が大きいです。
さらに回数指定するには、どうすればできますか?
139:137
19/03/12 11:09:28.51 2ZxzO4Nc.net
すみません。説明不足でした。
初めにforでテキストを取得しsetに割り当て、全てをコマンドとして生成して並列処理しています。
並列で3回ずつ実行し終了をループ
140:したいです。
141:デフォルトの名無しさん
19/03/12 13:04:35.48 6sZCRvoD.net
batを見ないと良く分からん
142:デフォルトの名無しさん
19/03/12 14:22:43.31 JT0qCUVC.net
FORでサブルーチンをCALLするようにして、
3回呼び出されたら実行するようにするとかかな
これ以上は元のバッチを見ないと何とも
143:デフォルトの名無しさん
19/03/12 14:35:25.41 ollYoz5v.net
並列処理ということは、非同期呼び出しを使ってるわけだから
その呼び出した処理の終了をどうやって感知するかが肝
多分プロセスの存在チェックでいけると思うがそういうのが過去ログにあったと思う
144:デフォルトの名無しさん
19/03/12 20:57:10.17 kFHhQjU8.net
んでもそんな高度な事がしたいならVCあたりで作っちゃいかんの?
145:デフォルトの名無しさん
19/03/14 00:11:57.06 MfJOghkN.net
-- A.bat --
:loop
if "%~1" == "" goto end
call B.bat "%~1"
shift
goto loop
:end
-- B.bat --
--
if exist "%~dpn1_hoge.txt" (
set XXX=--option "%~dpn1_hoge.txt"
)
--
A.batに複数ファイルをD&DしたときにB.batのif existで指定したファイルがA.batに入力したファイルに1つでも存在すれば他の入力ファイルにも同じ処理が実行されてしまいます
これを回避するにはどうすればいいでしょうか?
146:デフォルトの名無しさん
19/03/14 00:20:05.87 Gms0hgp4.net
毎回リセットしとけば?
b.batの先頭でset xxx=を書くとかb.batをsetlocal~endlocalするとか
147:デフォルトの名無しさん
19/03/14 00:26:03.45 Gms0hgp4.net
すまん良く読んでなかった
ファイルね
b.batで生成するのかな?
削除しちゃっても問題ないのならa.batの先頭でdelしちゃえば?
148:デフォルトの名無しさん
19/03/14 00:37:26.49 MfJOghkN.net
B.batは動画のエンコードに使っているバッチファイルの中身の一部で %~dpn1_hoge.txt があった場合はツールに追加のオプションを指定するようにしている感じです
149:デフォルトの名無しさん
19/03/19 11:54:10.54 hD2ftWP/.net
set day=3/19(火)
if 1==1 (
echo %day%
)
すみませんどなたか教えてください。
曜日の半角括弧のせいでif文が閉じられてしまうんだけど
どうやってエスケープすればいいんでしょうか?
150:デフォルトの名無しさん
19/03/19 12:02:29.16 9bBZVsPM.net
^)
バッチ エスケープで検索すりゃすぐわかるだろ
151:デフォルトの名無しさん
19/03/19 12:50:21.44 Juttg7oZ.net
括弧はpsのワンライナーでも嵌まる箇所
152:デフォルトの名無しさん
19/03/19 12:57:54.34 dDtGuicR.net
>>147
こういう方法もある
変数dayの中に、二重引用符がなければ
set day=3/19(火)
if 1==1 (
for /f delims^=^ eol^= %%i in ("%day%") do echo %%i
)
これだとdayに & | > < ^ ( ) 等やばそうな文字が入っても大丈夫
153:デフォルトの名無しさん
19/03/19 13:01:36.48 dDtGuicR.net
echo.%%i
にしたらもっといいかも
154:147
19/03/19 13:11:02.99 hD2ftWP/.net
set day=3/19(火)
if 1==1 (
echo %day:~0,6%^)%
)
これでいけました。
>>150のも今後の参考にさせてもらいます。ありがとうございました
155:デフォルトの名無しさん
19/03/19 13:19:49.65 dDtGuicR.net
最後の % は要らんぞ
156:デフォルトの名無しさん
19/03/19 20:28:12.65 xvBmkr0d.net
>>147
echo出力だけなら環境変数を ""でくくった上で遅延展開する方法もある。
これだとほとんどすべての記号がそのまま出力される。例外として「!」は「^!」で、「%」は「%%」で、「^」「^^」などは要エスケープ。
setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
set "day=3/19(火)"
if 1==1 (
echo !day!
)
157:デフォルトの名無しさん
19/03/19 22:00:01.63 dDtGuicR.net
! とか ^ があると
setlocalの前に変数代入した方が楽だな
158:デフォルトの名無しさん
19/03/20 22:34:42.36 /eguYGP5.net
一番厄介なのって [ ] だっけ?
159:デフォルトの名無しさん
19/03/21 01:32:50.66 3Vd/nBOR.net
個人的には全角
160:スペースと()
161:デフォルトの名無しさん
19/03/21 21:56:31.90 HPyHK69o.net
day=off だと echo されない
162:デフォルトの名無しさん
19/03/21 23:03:18.28 HPyHK69o.net
遅延モードでのエスケープの動作が面白い
setlocal enabledelayedexpansion
set "a=^x ^^ ^!"
set "b=^x ^^ ^y"
set "c=^x ^^ ^y" !
echo a=!a!
echo b=!b!
echo c=!c!
a=x ^ !
b=^x ^^ ^y
c=x ^ y
163:デフォルトの名無しさん
19/04/10 22:17:03.83 dRPi9Fbo.net
コマンドプロンプトで以下のpowershellコマンドを実行すると曜日が英語で表示されるのですが、
ここで表示された"Wednesday"を呼び出し元であるコマンドプロンプト側の変数に取得するのは難しいでしょうか?
曜日の判定に使いたいのです。
C:\>powershell "(get-date).DayOfWeek"
Wednesday
164:デフォルトの名無しさん
19/04/10 22:22:48.75 kh6Z72O0.net
>>160
for /f "delims=" %%i in ('powershell "(get-date).DayOfWeek"') do set "hoge=%%i"
165:デフォルトの名無しさん
19/04/10 23:46:13.28 dRPi9Fbo.net
>>161
ありがとうございます!それでバッチリでした。
ってかレスはやっ!( ̄□ ̄;)
166:デフォルトの名無しさん
19/04/17 14:41:43.82 SVkPhkuc.net
読み取り専用属性付加と解除についてお願いします
ATTRIB +R hoge.txt
この場合hoge.txtをバッチファイルにドロップしたときhoge.txtの属性が読み取り専用になりますが
ATTRIB +R *.txt
とすると一つのファイルをドロップしただけでディレクトリ内の全てのテキストファイルの属性が変わってしまいます
バッチファイルへドロップしたファイルのみ属性を変えたいのですがこういうことは可能でしょうか?
167:デフォルトの名無しさん
19/04/17 15:11:44.94 SVkPhkuc.net
>>163です
バッチファイルにファイル名を指定してしまうと同一名のファイルしか処理できませんが
ファイル名が異なっていてもドロップしたファイルのみ属性変更したいのです
168:デフォルトの名無しさん
19/04/17 15:30:16.10 Tk94P2Iw.net
>>163
"*.txt "が邪魔
169:デフォルトの名無しさん
19/04/17 15:59:23.64 SVkPhkuc.net
>>165
ATTRIB +R
これだけでいいのでしょうか
試してみましたが一つのファイルをバッチファイルへドロップすると
ディレクトリ内の全てのファイルが属性変更されてしまいます
170:デフォルトの名無しさん
19/04/17 16:34:46.90 HAjihGMm.net
>>166
ATTRIB +R %1
引数のファイルだけ属性を変える
引数が無い場合は全てのファイルになるので
ガードは付けた方が良いと思う
171:デフォルトの名無しさん
19/04/17 17:06:43.84 SVkPhkuc.net
>>167
%1 とすることでドロップした一つのファイルが読み取り属性変更できるようになりました
二つとか三つとか複数ファイルはできないのですよね
皆さんありがとうございました
172:デフォルトの名無しさん
19/04/17 17:54:55.66 DeBFB2/b.net
ATTRIB +R %*
とすると複数ファイル可
173:デフォルトの名無しさん
19/04/17 18:03:53.01 mAjziF7r.net
バッチファイルの図形プログラミング作ったら広告収入入ると思いますか?
174:デフォルトの名無しさん
19/04/17 18:18:21.55 QABBLuNd.net
俺のところじゃ>>169はエラーになる
for %%i in (%*) do attrib +r %%i
まあファイル名によってはこれもダメだけど
175:デフォルトの名無しさん
19/04/17 19:24:10.99 SVkPhkuc.net
>>169
>>171
みなさんありがとうございます
助かりました
176:デフォルトの名無しさん
19/04/17 21:07:05.52 3cAVwUGz.net
複数ファイルドロップするなら shift でループが簡単だと思うけど何か落とし穴ある?
177:デフォルトの名無しさん
19/04/18 19:59:48.99 pUSpmyse.net
ファイルドロップで落とし穴があるとしたら >>45 みたいな引数の時
>>48 を参考にすると
@echo off
set "a=%cmdcmdline:"=*%"
set "a=%a:~0,-1%" & set "e="
set "c=" & for /f "tokens=2* delims=*" %%i in ("%a%") do set "c=%%j"
:x
set "a=" & for /f "tokens=*" %%i in ("%c%") do set "a=%%i"
if "%a:~0,1%"=="*" (set "d=*") else set "d= "
set "b=" & set "c="
for /f "tokens=1* delims=%d%" %%i in ("%a%") do set "b=%%i" & set "c=%%j"
if defined b set e=%e% "%b%" & goto x
for %%i in (%e%) do attrib +r %%i
でもこれファイルドロップでしか使えない
178:デフォルトの名無しさん
19/04/19 16:41:41.89 nzBF9sby.net
batのコマンドのタイトルバーに
「管理者: 」
の表示を消すこと出来ないのでしょうか?
179:デフォルトの名無しさん
19/04/19 17:41:11.03 HG96JCXu.net
muiファイルいじるしかなかったような
180:デフォルトの名無しさん
19/04/19 18:58:50.77 FmrBk+Vp.net
スレチと怒られそうだが
--- change_wnd_title.uws ------
DEF_DLL SetWindowTextA(HWND, STRING):BOOL:user32.DLL
DIM old_title = PARAM_STR[0]
DIM new_title = PARAM_STR[1]
DIM idwnd = GETID(old_title)
IFB -1<idwnd THEN
SetWindowTextA(IDTOHND(idwnd), new_title)
ENDIF
---------
C:\UWSC\UWSC.exe C:\TEST\change_wnd_title.uws "管理者: test" "ABC"
を管理者権限で実行
「管理者:」 と「test」 の間にスペースが2つある点に注意
べつにWin32apiが使えればほかのスクリプトでもいいが
すでに配布が終了している(?)UWSCをすすめるのは
とてもにコンパクトで気軽に試しやすいため
以下のレスにあるDL先は公式リンク
使うのはFree版でよい
スレリンク(software板:3番)
181:デフォルトの名無しさん
19/04/19 21:14:57.50 5yrPogsy.net
>>175
例えば d:\hoge\a.bat を実行するなら
ショートカットの新規作成でコマンドは
cmd /c start "ABC" /d "d:\hoge" a.bat
ショートカットのプロパティで
実行時の大きさは「最小化」
詳細設定で「管理者として実行」
このショートカットを実行すると
a.bat が管理者として実行されて
タイトルは ABC のみになる
182:デフォルトの名無しさん
19/04/19 21:49:09.78 5yrPogsy.net
>>178
念のため書いておくが
バッチの中で
title xxx
と書くと「管理者:xxx」
となるので台無し
バッチの title コマンドは消せ
それが出来ないなら俺は知らん
183:デフォルトの名無しさん
19/04/19 23:47:56.76 UTkV4PFm.net
あのさ
もう設計書はあるからバッチ作ってって言われて設計書見たんだが
「%0\..\xxx\yyy.batをコールする」とか書かれてて腰折れそうなんだけど…
184:デフォルトの名無しさん
19/04/20 00:03:36.64 oEi+Bse9.net
やりたい事が書いてあるかどうかだな
設計書作る手間で自分でかけとも思うけど
外注なら設計書から作りましょうねと諭して工数確保だな
185:デフォルトの名無しさん
19/04/20 00:08:13.21 vpsjY4OY.net
>>181
まあやりたい事分かるからこっちで直して
これでいいですよね?って聞くつもりだけど
細かく書いといて間違えてるのやめてほしい…
186:デフォルトの名無しさん
19/04/20 03:49:52.33 C+CxU9Uj.net
>>175
隠しておかないと、悪いことしてるのがばれちゃうもんな
187:179
19/04/20 04:50:04.97 HO8cTApa.net
たぶん>>121の奴だろ
胡散臭い
188:デフォルトの名無しさん
19/04/21 00:17:28.92 Aqd0ZKZB.net
forfilesは遅いこと
フォルダのファイル数が多いと極端に遅くなる
189:デフォルトの名無しさん
19/04/27 20:18:12.49 SEUESNkj.net
>>174
exit で終了しないと不味いな…
190:デフォルトの名無しさん
19/05/07 09:53:38.49 3q/iti6Z.net
バッチとは違うけど、Microsoftさまの新しいターミナルアプリ「Windows Terminal」
URLリンク(forest.watch.impress.co.jp)
期待しても良いのかしら
191:デフォルトの名無しさん
19/05/08 22:44:07.08 6yW2addd.net
>>187 windows10のみだと俺は使えないや
193:デフォルトの名無しさん
19/05/08 22:45:41.01 o7I87B0d.net
>>188
そりゃMacやLinuxでも使えるようにする性格のアプリではないだろ
194:デフォルトの名無しさん
19/05/08 23:18:47.67 6yW2addd.net
>>189
どういう意味なのかな?
俺が読んだかぎりではwindows10のみと判断したんだが
195:デフォルトの名無しさん
19/05/08 23:59:34.57 PAJNmCOy.net
>>190
MacやLinuxで使えないから嫌だってお前は言ってるんだよ
196:デフォルトの名無しさん
19/05/09 00:09:50.10 Q5GOiLDw.net
build 10.0.18362.0以上でVS2017必要みたいね
Win8とかじゃ使えない
197:デフォルトの名無しさん
19/05/09 00:35:06.30 e/QFUb7b.net
win7/8.1は切捨てか
さすがMS
198:デフォルトの名無しさん
19/05/09 00:47:39.20 W7EsCFlC.net
>>193
サポート終了って言ってるんだから当たり前じゃね?
199:デフォルトの名無しさん
19/05/18 02:08:44.94 5JVQU2Kx.net
スレチかもなのですが、「コアを吐く」ってどういう意味なのでしょうか?
200:デフォルトの名無しさん
19/05/18 02:12:53.15 ChT5ZnKi.net
コアダンプのことじゃね
201:デフォルトの名無しさん
19/05/19 00:27:10.87 p20+5ZYI.net
Win10で、.(ドット)から始まる4文字以上のフォルダを再帰的に削除したいのですがうまくいきません
for /d /r %%d in (.????*) do rmdir /s /q "%%d"
フォルダ名をスペースおきに書くと削除できますがワイルドカードを使って処理できないものでしょうか
202:デフォルトの名無しさん
19/05/19 11:10:45.58 TZwQ5fCi.net
for /f %%d in ('dir /s /b ^| findstr \\\.....') do rmdir /s /q "%%d"
とか?
203:デフォルトの名無しさん
19/05/19 11:21:46.43 TZwQ5fCi.net
>>198
dir /s /b /ad だった
204:デフォルトの名無しさん
19/05/19 11:40:23.60 C4jenAHt.net
>>197
for /d /r %%i in (.*) do set "a=%%~fi" & call :x "%%a%%"
pause & goto :eof
:x
set "b=%~nx1"
if not "%b:~4,1%"=="" rd /s /q %1
205:197
19/05/19 12:35:02.55 p20+5ZYI.net
>>198-199
>>200
ありがとうございます!
rmdirをechoに置き換えて確認してみましたところ、>>200 様ではフォルダ名を取得できませんでした
>>198-199 様で対象にしたいフォルダ名を取得できましたのでこちらを使わせていただきます
ありがとうございました
206:デフォルトの名無しさん
19/05/19 13:00:03.54 C4jenAHt.net
>>201
なにを言ってるのか意味不明だな?
>>200 の rd を echo rd に変えたのなら問題ないだろ
>>198 を使うなら /f "delims=" にしろよ?
あと、>>198 だと \.12\abc とかも消えるぞ
207:デフォルトの名無しさん
19/05/19 13:23:52.91 C4jenAHt.net
分かった
隠し属性かよ
208:デフォルトの名無しさん
19/05/20 07:05:59.13 /nt8UTBS.net
for /f "delims=" %%i in ('dir/adh/s/b .*') do (
set "a=%%~nxi" & call set "a=%%a:~4,1%%"
if defined a if exist "%%i" rd/s/q "%%i")
209:デフォルトの名無しさん
19/05/26 10:45:56.66 nyCVecKy.net
7-Zipスレからこちらに誘導されてきました
バッチファイルを実行して
指定したフォルダを7z圧縮し別の指定した場所へ保存する方法教えてください
210:デフォルトの名無しさん
19/05/26 10:55:25.50 QHGhwB6i.net
>>205
7-zipのコマンドラインオプションみましたか?
211:デフォルトの名無しさん
19/05/26 11:03:44.74 nyCVecKy.net
>>206
見ていません
212:デフォルトの名無しさん
19/05/26 11:10:19.45 nyCVecKy.net
>>206
今見ています
213:デフォルトの名無しさん
19/05/26 17:24:55.92 iePtiDR/.net
>>205
7-Zip のパスは自分の環境に合わせる
@echo off
path C:\WINDOWS\system32;C:\WINDOWS;
path C:\Program Files (x86)\7-zip;%path%
set /p i=圧縮するフォルダのフルパス=
set "i=%i:"=%"
set /p o=書庫を作成するフォルダのフルパス=
set "o=%o:"=%"
set /p n=書庫名(拡張子なし)=
for %%A in ("%i%") do set "d=%%~nxA" & cd /d "%%~dpA"
7z a "%o%\%n%.7z" "%d%"
pause
214:デフォルトの名無しさん
19/05/26 18:42:28.21
215:nyCVecKy.net
216:デフォルトの名無しさん
19/05/26 19:22:25.25 4n4gfKEy.net
>>210
書き換えないといけないのは7zipのパスのところだけであとのところはいじっちゃだめ
なので↓をメモ帳に貼り付けて適当な名前のbatファイルに保存が正解
@echo off
path C:\WINDOWS\system32;C:\WINDOWS;
path C:\Program Files\7-Zip;%path%
set /p i=圧縮するフォルダのフルパス=
set "i=%i:"=%"
set /p o=書庫を作成するフォルダのフルパス=
set "o=%o:"=%"
set /p n=書庫名(拡張子なし)=
for %%A in ("%i%") do set "d=%%~nxA" & cd /d "%%~dpA"
7z a "%o%\%n%.7z" "%d%"
pause
217:デフォルトの名無しさん
19/05/26 19:28:03.67 iePtiDR/.net
>>210
コンソール入力するのが嫌なら
set i=Z:\TE
set o=Z:\zz
set n=a
218:デフォルトの名無しさん
19/05/26 19:35:30.91 nyCVecKy.net
>>211
>>212
これでできました
@echo off
path C:\WINDOWS\system32;C:\WINDOWS;
path C:\Program Files\7-Zip;%path%
set i=Z:\TE
set o=Z:\zz
set n=a
for %%A in ("%i%") do set "d=%%~nxA" & cd /d "%%~dpA"
7z a "%o%\%n%.7z" "%d%"
pause
自分のような者に教えていただきありがとうございました
219:デフォルトの名無しさん
19/05/30 23:24:33.44 D3n586fF.net
CMDの画面でこういうのを入力して実行したら
FOR /L %I IN (1,1,20) DO @CALL ECHO %I
画面の上のタイトルに文字が
うじゃうじゃ出て来るのはなぜ?
220:デフォルトの名無しさん
19/06/01 22:51:37.17 cR7U/Ve2.net
最近の発見
remの前に空白をおける
: でラベルを示すが、:の前後に複数の空白、タブ、全角空白があってもよい
: タブ abc
またラベルの後の空白以降の文字列は無視するのでコメントを書ける
: abc エラーの場合
まあ、あまり使うところないけど
221:デフォルトの名無しさん
19/06/02 00:30:45.28 0ZBCelud.net
最後のは割と便利そうだけど
現場だとコメントはREM使えっていうコーディング規約に阻まれそうだw
222:デフォルトの名無しさん
19/06/02 03:07:05.57 rFF/uYB6.net
>>214
そもそも call の引数はバッチファイル名かラベルだ。
それ以外の、内部コマンドや外部コマンドじゃない。
そんな使い方、help のどこにも書いてない。
一見、正常に動作している様に見えるが、
内部では子プロセスが異常終了している。
だからタイトル名に子プロセスの残骸が残る。
call set なども動作はするが邪道。
223:デフォルトの名無しさん
19/06/04 23:08:45.76 YyzuHNes.net
>>215
REM は「コマンド」だから前に空白が置ける。それは当然として。
ラベルをコメント代わりに使うのは止めとけ。
for や if コマンドの中で「インテンドを使って」コメントに使おうとすると弾かれる。
大人はバッチのコメントは REM で書くものだ。
Intel のドライバーインストーラーのバッチは奇麗だと思うぞ。
224:デフォルトの名無しさん
19/06/09 19:33:03.04 ESLww06V.net
変数のサイズの最大値って何バイトなんだろう
@echo off
setlocal enabledelayedexpansion
set "a=x"
for /L %%i in (1,1,12) do set "a=!a!!a!"
set "b=x"
for /L %%i in (1,1,13) do set "b=!b!!b!"
if !a!==!b! (echo "a=b") else echo "a<b"
pause
結果は
"a=b"
225:デフォルトの名無しさん
19/06/09 20:37:25.93 ESLww06V.net
>>219
8187 バイトかな?
半端な値だな...
226:デフォルトの名無しさん
19/06/10 07:14:20.96 24zpPZFc.net
URLリンク(www.atmarkit.co.jp)
内部的には1つの変数当たり最大32767文字
コマンドプロンプトの入力行は最大で8190文字
システム環境変数やユーザー環境変数の最大値は約2000文字(setxコマンドでは最大1024文字)
@echo off &setlocal
set a=x
set b=x
set /a i=2
:LOOP
set a=%a%x
echo %i%
if not %a%==%b% (
set b=%a%
set /a i+=1
goto :LOOP
)
pause
速くて正確ではないけど4093
227:くらいで落ちた コマンドの制限に掛かるみたいやね
228:デフォルトの名無しさん
19/06/10 07:46:35.61 acT05/Jv.net
>>221
ありがとう、参考にします
1行当たり8190文字がネックだね
229:デフォルトの名無しさん
19/06/10 15:28:36.17 q9TwxOtc.net
>>221
こういうのって統一して何バイトって決めないとやばくないのかな
windowsバージョン、英語、日本語、ヒンズー語など言語で微妙に変化すると、
おかしなことがおきたり、ウィルスの侵入口に利用される
230:デフォルトの名無しさん
19/06/10 18:52:33.54 acT05/Jv.net
遅延展開では変数名1文字なら値は8189文字まで。半角全角は無関係。
変数名が1文字増えると値の最大値は1文字減る
set "a=!b!" の様に二重引用符で囲むと最大値は2文字減る
遅延じゃないと a=%b% 以外のコマンドラインの文字数分が更に減る
変数 a が5000文字の場合
if %a%==%a% echo ng は落ちるが
if !a!==!a! echo ok は落ちない
231:デフォルトの名無しさん
19/06/10 18:58:22.71 OlE51f/u.net
>>223
そもそもそんなギリギリまで使う方がおかしい
あとウィルスとかのセキュリティの話はまた別の話
232:デフォルトの名無しさん
19/06/10 19:19:36.75 acT05/Jv.net
cmdは既に穴だらけなんで
233:デフォルトの名無しさん
19/06/10 20:08:18.95 8z0TGIdq.net
穴だらけなのかもしれないが、外部に開いた穴は無いんで
悪用されるにはその前に侵入を許してしまってる必用がある
まあ侵入されたあとにコマンドプロンプトを使うようなウィルスはあるかは知らないけど
234:デフォルトの名無しさん
19/06/11 05:43:03.21 mwwG6pNT.net
ワンラインで8kか
フルパス200文字位のファイルを40個D&Dしたらもうパンクか
ヘタレ過ぎる
235:デフォルトの名無しさん
19/06/11 16:08:50.98 AKGG1UAL.net
初心者故説明不足でしたらご指摘ください。
調べてもわからなく、ご教示いただけないでしょうか。
やりたいこと
Windowsアップデートのインストール一覧のうち
2019年分のみ抽出したい。
やったこと
一覧を取得するコマンドで情報をテキストファイルに出力。
その後findstrで2019分のみを抽出しようとしたけど
抽出出来なかった。
実行コマンド
Windowsアップデート一覧取得
wmic qfe get InstalledOn,HotFixID > aaa.txt
抽出コマンド
findstr "2019" aaa.txt
抽出コマンド実行後、結果が帰って来ませんでした。
なぜ結果が帰って来ないのかが全くわかりません。
どうか、対処法をご教示いただけないでしょうか。
236:デフォルトの名無しさん
19/06/11 16:21:50.48 mwwG6pNT.net
ユニコードだからじゃない?
type aaa.txt > aaa1.txt
aaa1.txt でやってみろ
237:デフォルトの名無しさん
19/06/11 16:30:25.48 SBjduyI+.net
wmicはリダイレクトするとUTF16LEになるから
230みたいに文字コード変換するか、パイプで
wmic qfe get InstalledOn,HotFixID | findstr /n "2019"
238:デフォルトの名無しさん
19/06/11 16:31:56.22 SBjduyI+.net
あ、/n付けちゃったけどまぁいいか
239:デフォルトの名無しさん
19/06/11 16:53:09.70 AKGG1UAL.net
>>230
>>231
ご教示頂きましてありがとうございます!
文字コードは盲点でした。もっと勉強します。
教えて頂いたコマンドで自身の望む結果が帰って来ました。
ありがとうございます!
240:デフォルトの名無しさん
19/06/13 10:13:44.37 P3O2UGUp.net
Explorerから「送る」SendTo で使うバッチの中の pushd "%~dp1" が失敗するケースて有り得る?
送るから使うって事はアクセス出来てるはずなので失敗する事はないと思うんだけど
pushd "%~dp1"||exit とか失敗した場合の処理書いといた方が良いのかな
241:デフォルトの名無しさん
19/06/13 12:37:34.91 qazE1A0w.net
>>234
パスの中に全角スペースが入っていて半角スペースが入ってない場合なんかは失敗するんじゃないかな
242:デフォルトの名無しさん
19/06/13 14:43:51.
243:05 ID:rRFcU9uI.net
244:デフォルトの名無しさん
19/06/13 14:50:46.43 P3O2UGUp.net
>>235
その問題、失念してた。ありがとう
パスに半角スペースが無くて、全角sp" "、コロン","、セミコロン";"、ハット"^"、イコール"=" の何れかが有る時だね
半角sp有る無し関係なく引数全部""括るようにすれば良いのにまだこの問題残ってたんだね
意図しない動作ではあるものの最初にデリミタ文字を含むフォルダの親フォルダにカレント移動して pushd 自体は成功する
pushd が失敗する事例を知っていたら教えて欲しい
この問題は対応面倒なのでパスに半角スペースを含めるようにして対処するよ
245:デフォルトの名無しさん
19/06/13 15:04:31.95 rRFcU9uI.net
引数いくつか知らんが pushd "%~dp2" は失敗するだろ。
引数1個限定なら %2 が有れば exit するとか。
あるいは >>48 を参考に
246:234
19/06/13 16:36:42.36 P3O2UGUp.net
送るから使う前提で
pushd "%~dp1"||エラー処理
のエラー処理を書く意味あるかな?てのが聞きたかった事なんだ
まあおまじない的にpause&exitしとくよ。ありがとう
247:デフォルトの名無しさん
19/06/13 17:10:58.72 rRFcU9uI.net
引数全部で
if "%~dp1"=="%~dp2"
if "%~dp1"=="%~dp3"
if "%~dp1"=="%~dp4"
とか確認すりゃ問題ない
248:デフォルトの名無しさん
19/06/13 17:24:03.99 rRFcU9uI.net
>>240
でもファイル名使うとダメだな
249:デフォルトの名無しさん
19/06/14 15:25:04.04 /ScwnRxc.net
誰もツッコミ無しか
SendTo とか D&D は何もしなくても自動的に
送り側のディレクトリに移動するんだが
250:デフォルトの名無しさん
19/06/14 15:52:59.01 /ScwnRxc.net
SendTo にバッチ本体じゃなくて
ショートカットを入れたのかね
でもプロパティの作業フォルダを空にすればいい
怪しげな引数を利用するよりマシだろ
251:デフォルトの名無しさん
19/06/15 09:44:04.71 wrdBniJb.net
7-ZIPの 7za.exe でワイルドカード使ったときにサブフォルダを除外するにはどうしたらいいでしょうか?
-r-を付けてもなぜか効かないんですが
7za.exe a XXX.zip -r- *
252:デフォルトの名無しさん
19/06/15 12:34:19.95 /kIGVJHV.net
>>244
7zaは経験ないが7zと同じだろう
引数に*としたらサブディレクトリも含む
サブディレクトリを指定したら、それ以下の全部を含む
そこでスイッチは関係ない
ファイルだけ圧縮したいなら
@echo off
path C:\Program Files\7-Zip;C:\WINDOWS\system32;C:\WINDOWS;
if exist archive.7z del archive.7z
set a=
setlocal enabledelayedexpansion
for %%i in (*) do set a=!a! "%%i"
7z a archive.7z !a%!
pause
253:デフォルトの名無しさん
19/06/15 12:36:06.42 /kIGVJHV.net
ああ、すまん
.zip に置き換えて
254:デフォルトの名無しさん
19/06/15 13:27:41.74 /kIGVJHV.net
>>245はファイル名に!^があると誤動作するので
@echo off
path C:\Program Files\7-Zip;C:\WINDOWS\system32;C:\WINDOWS;
if exist XXX.zip del XXX.zip
for %%i in (*) do 7za a XXX.zip "%%i"
pause
にした方がいいかもね
ちなみにInfo-ZIPのzip.exeでは
zip XXX.zip *
だけでいいが空のサブディレクトリを作成する
255:デフォルトの名無しさん
19/06/17 08:25:16.99 gSWoSWwj.net
.commandでターミナルを開いてpython3 /hoge/test.pyを入力、エンターを送信してpyファイルを実行したいのですがご教授ください。m(_ _)m
echo python3 /hoge/test.pyとするとターミナルに入力はされるのですが、pythonが実行されません。
ちなみに.batでは、
cd C:\hoge\
cmd /k python test.py
でpythonを実行する事ができました。
.commandで同じ事をするにはどうすればいいでしょうか?
256:デフォルトの名無しさん
19/06/17 13:48:44.19 gSWoSWwj.net
248です
解決しました。m(_ _)m
echoなんか付けずに
python3 /hoge/test.py
でpythonが実行できました。ありがとうございます。
257:デフォルトの名無しさん
19/06/17 18:30:49.93 /bUEZ7B5.net
バッチファイルからbeep音を出す
echo ^G >
258:beep.bat ^G は コントロールキーとG beep.batを実行すると音は出るが、エラーも出るので type beep.bat のほうがよい beep.bat 2>nul でエラーは消えるはずだが、なぜか音も出ないことがある こういう基本コマンドがなぜかない
259:デフォルトの名無しさん
19/06/17 21:28:51.00 KEFOQI4b.net
>>250
beep.bat
でエラーが出るのは当然
beep.bat の中身は 「あ」 と一文字書いてあるのと同じようなものだから
コマンドになってない
だから
echo ^G> beep.dat
echo type beep.txt> beep.bat
とするか
echo @echo ^G> beep.bat
とすれば
beep.bat実行でエラーは出ない
ちなみに@echoとしてechoの頭に@をつける理由は
そうしないと、
実行コマンドが表示される時点で一回音が鳴り
echo が実行されることによって音が鳴るので
結果として2回音が鳴ることになるため
260:デフォルトの名無しさん
19/06/17 22:13:21.14 KEFOQI4b.net
無料のエディタでも制御文字を扱えるものがあるので
そういったものを使うと便利かと思います
たとえばNotepad++では制御文字を表示することができます
URLリンク(www.howtonote.jp)
入力は編集-文字コード表から
サクラエディタは制御文字を入力できるのに表示する方法はわかりませんでした
(自分はユーザではなく詳しくないので実際はあるのかもしれない)
URLリンク(sakura-editor.sourceforge.net)
261:デフォルトの名無しさん
19/06/17 22:46:13.03 kzHmUXK8.net
トリッキーだが、コントロールコードを直接書かないで実現することもできるね
ここの過去ログ%11にあったけど
for /f "delims=0" %%I in ('cmd /u /c echo 〇') do set BEL=%%I
echo %BEL%
262:デフォルトの名無しさん
19/06/17 23:09:42.80 +j+1wiRe.net
バッチにバイナリエディタで入力したら
どんな値でも変数に代入出来るのかな?
263:デフォルトの名無しさん
19/06/17 23:10:40.48 KEFOQI4b.net
>>251
訂正
誤:echo type beep.txt> beep.bat
正:echo type beep.dat> beep.bat
264:デフォルトの名無しさん
19/06/18 17:34:44.10 eep67jJ0.net
cls|choice 1>nul 2>nul
265:デフォルトの名無しさん
19/06/18 19:33:08.53 KnqBLmEX.net
>>251
なるほど、どっちもありですね
echo ^G> beep.dat
echo type beep.dat> beep.bat
echo @echo ^G> beep.bat
@echo のこんな使い方は初めて見た、知らなかったです
266:デフォルトの名無しさん
19/06/23 06:51:19.02 dygsK1bo.net
Windows Terminal早速試せるみたい。
Microsoft’s new Windows Terminal now available to download for Windows 10 - The Verge
URLリンク(www.theverge.com)
267:デフォルトの名無しさん
19/06/23 12:23:35.72 Lc+3aX4/.net
>>258 そこに書いてある
Microsoftはまた、Linux用のWindows Subsystem(WSL)の
パフォーマンスを向上させるために、
完全なLinuxカーネルをWindows 10に搭載することに取り組んでいます。
こっちの方が気になるなあ
268:デフォルトの名無しさん
19/06/23 12:41:20.55 8sWJbccc.net
WSL2でしょ
269:デフォルトの名無しさん
19/06/25 00:46:23.52 6j3DQJ1O.net
Windows7からWindows10に変えたら、IME単語登録用ソフトのIMECが動かない。
神は死んだ・・・
270:デフォルトの名無しさん
19/06/25 19:20:48.71 sBqqHKRF.net
chcp 65001
if "hoge"=="hoge" (
echo あああ
echo いいい
)
pause
上みたいなbatをUTF-8で保存して実行すると
'o' is not recognized as an internal or external command,
と言われてエラーになるんですが何故ですか?
271:デフォルトの名無しさん
19/06/25 19:23:12.67 sBqqHKRF.net
272:echoの前に半角スペース3つです
273:デフォルトの名無しさん
19/06/25 19:52:58.06 O4gheXA8.net
良く分からんが >>258 の奴でやると
もしかしたら上手くいくかもね
274:デフォルトの名無しさん
19/06/25 19:58:43.79 O4gheXA8.net
chcp 65001
if "hoge"=="hoge" (
echo あああ& rem
echo いいい
)
pause
275:デフォルトの名無しさん
19/06/25 20:17:53.34 O4gheXA8.net
行末が非asciiだと不味いようだ
276:デフォルトの名無しさん
19/06/25 20:18:26.26 sBqqHKRF.net
>>265
レスありがとうございます
それだとエラーは出なくなりました
でもなんでこんな訳のわからない動作をするのかがわかりません
277:デフォルトの名無しさん
19/06/25 20:34:02.78 O4gheXA8.net
上手く動作しないという事はバグじゃないですかね
それ以上はcmdの作者じゃないので分からん
278:デフォルトの名無しさん
19/06/25 20:49:18.67 yTOc80/J.net
そもそもUTF-8保存バッチなんてまともに動くの見た事無い。
バッチはUS-AsciiかシフトJIS保存が安全。いくらchcpでコードページが動かせようとも
279:デフォルトの名無しさん
19/06/25 20:51:13.72 yTOc80/J.net
"シフトJIS(932) だけ? いいえ、そんなことはありません。例えば、EUC-JP(20932) も可能です。しかし、Unicode(1200)、UTF-7(65000)、UTF-8(65001)、JIS(50220) はダメです。
なので、実際上?は、シフトJIS(932) だけのようなものです。"
URLリンク(scripting.cocolog-nifty.com)
280:デフォルトの名無しさん
19/06/25 21:18:10.64 O4gheXA8.net
ユニコードでしか表示できない文字を表示したいならともかく
"あああ" とか "いいい" じゃ全く意味が無いな
281:デフォルトの名無しさん
19/06/26 07:19:54.19 /FHvjGPn.net
やはりbatをUTF-8で動かすと色々不安定みたいですね
素直にShift_JISで書くことにします
282:デフォルトの名無しさん
19/06/26 08:01:27.89 5bijRuYR.net
ASCIIで書いてもええんやで?
283:デフォルトの名無しさん
19/06/26 08:13:25.58 QearoGxm.net
Asciiで"あああ"や"いいい"が表せるかバカ
284:デフォルトの名無しさん
19/06/26 14:39:32.78 wh3oZ78w.net
シフトJISで表せない文字の例
@echo off
chcp 65000 > nul
set a=+nddRZwDA-
chcp 932 > nul
set a1=%a:~0,1%
set a2=%a:~1,1%
set a3=%a:~2,1%
echo 森%a1%外の「%a1%」
echo %a2%田百閒の「%a2%」
echo アクセント符号付きのアルファベット「%a3%」
pause > nul
285:デフォルトの名無しさん
19/06/26 19:26:37.84 jdth62TN.net
ハードコーディングする必要ないだろ…
286:デフォルトの名無しさん
19/06/26 20:16:33.91 wh3oZ78w.net
ユニコードのバッチでいいなら必要ないな
echoは行末に半角スペース付けると多分ok
setは二重引用符で囲めばいい
287:デフォルトの名無しさん
19/06/27 00:26:23.36 65pELY4n.net
会得したところで今後の人生に役に立たない、もしくは自分の仕事を受け継いだ「標準的な知識の」人間に理解できないことはしない方がいい。
一子相伝の拳法とかじゃねーんだから。
バッチスクリプトに限らず、仕事でそういうことを意識できない奴は、大抵、後から見て自分自身でも読めないコードを書くものだ。
288:デフォルトの名無しさん
19/06/27 00:27:58.62 65pELY4n.net
このスクリプトは自分で終わり…
とかいう書き捨てスクリプトなら大いにやって良いと思う。
使い終わったらちゃんと捨てとけよ。
289:デフォルトの名無しさん
19/06/27 04:32:59.89 41DSIiqO.net
この 低レベルに合わせる事こそ唯一の原則 みたいな風潮すごいイヤ
こんなとこまで啓蒙しなくていいよ気持ち悪い
290:デフォルトの名無しさん
19/06/27 04:53:0
291:5.65 ID:6UZ42pkx.net
292:279
19/06/28 00:34:45.44 khpSyJhs.net
>>280
低レベルに合わせるわけじゃねーよ。
現代的なスクリプト言語を学んできたような人間に対して
「バッチスクリプトだけで通じる特殊で小賢しいハック」
を読ませたり書かせたりするべきじゃない、自分だけに留めとけ、結局誰得になる、って話が何故分からないかな?
今日も
「文字列にASCIIの制御コードを挟めばテスト環境でこの処理通ったんでいいでしょ」
なんつったアホンダラを叱りつけたところだ。
「そのコードが何を意味してるか分かる?」と聞いたら「空白です」だとよ。そりゃ、制御コードは「お前のエディタでは」見えないよ。アホか。
制御コードがテスト環境と違う実環境でどう解釈されるか分かったもんじゃないから却下した。
実際、実環境でこっそりテストしてみたらやっぱり処理はコケた。
293:279
19/06/28 00:39:45.58 khpSyJhs.net
で、バッチにもイディオムがある。
「AをしたいときはBと書け」ってやつ。
そういうものは、たとえ現代的なスクリプト言語とは感覚がかけ離れていてもバッチを書くなら「嫌でも」学習せねばならない。
つまり、
・言語や環境が想定している範囲内ならやってよし。むしろやれ。
・範囲外ならやるな。やるなら自己責任で他人に迷惑を掛けない程度に。
ということ。
これはどんな言語やシステムにも言えること。
294:279
19/06/28 00:51:59.74 khpSyJhs.net
もっと言うと、何かを開発するときにまず最初にやることってのが
「この言語や環境はどこまで想定しているのかを調べる」
だったりする。
自分のやりたいことに沿ってくれるかくれないのか。
くれないなら処理の一部だけやらせるに留めるなり、最初から使わないなり、そういう選択をする。
言語や環境に縛りがある場合なら、責任者の言質を取るなり、書面で誓約を取ってから作る。
見ず知らずの他人が意味も訳も分からないトリッキーなコードをメンテさせられて苦しむのを想像できないならいくらでもトリッキーにやればいい。
「このコード書いた奴、死ねばいいのに」って言われても俺には関係ない、くらいの根性腐った奴ならそうすればいい。
295:デフォルトの名無しさん
19/06/28 04:47:52.79 +wrrcV+u.net
だからキモイって
創価学会員並みにキモイ
狂信者の啓蒙活動と同じ
こんなところではなくおまえの会社でやってろ
296:デフォルトの名無しさん
19/06/28 07:00:46.98 n6DQpX/4.net
しかしWin環境はテキストのBOMマーク推奨なのに、for /fで読み出しするとBOMをわざわざ表示するのバカだよな。
過去の検討不足がまんま固定してる
297:デフォルトの名無しさん
19/06/28 07:22:18.87 utv5/5Cv.net
面倒くさい奴が一人いるな
何を書こうが勝手だが、ここはお前の職場じゃないぞ
298:デフォルトの名無しさん
19/06/28 07:41:24.76 utv5/5Cv.net
>>286
BOM付きのファイルは一行目を空行にしている。
バッチに限らず後で色々トラブルあるから
299:デフォルトの名無しさん
19/06/28 23:56:34.27 b/1HFBuK.net
>>284
> 「この言語や環境はどこまで想定しているのかを調べる」
それはかなり大変なので、�
300:Q、3回やってもうまくいかなかったら別の言語に乗り換えるという便法が別の解決策
301:デフォルトの名無しさん
19/06/29 01:27:00.86 LLveF6E3.net
だから何?
302:デフォルトの名無しさん
19/07/04 08:37:48.34 yoyjVAJo.net
Win10 v1903
メモ帳で新規作成したテキストがtypeで化ける
もはやSJISは既定値ではない
cmdは旧態依然
303:デフォルトの名無しさん
19/07/04 17:34:32.60 9mSpzETW.net
まあ chcpすりゃいいだけだし
304:デフォルトの名無しさん
19/07/04 18:30:22.69 wRHHZz1p.net
日本語レイアウトが崩れるからだめ
305:デフォルトの名無しさん
19/07/04 21:43:07.98 y34WtIiv.net
以前は実行中のバッチファイルを編集保存、行を追加したり減らしたり、すると
エラーになってたと思うんだけど、何かエラーにならなくなった?
Windows10 1903 からの変更?
たまたまなのかな?
306:デフォルトの名無しさん
19/07/04 21:57:41.98 y34WtIiv.net
>>294 自己レスです
すいません、気のせいでした、たまたま起きないように見えただけで
普通にエラーが起きました
307:デフォルトの名無しさん
19/07/05 00:07:51.66 BL7Y7b8G.net
実行中の行やその直後の行を追加したり削ったりすれば、
同じ処理が繰り返しになったり、必要な処理がスキップされる形になって
挙動がおかしくなるな
308:デフォルトの名無しさん
19/07/05 20:30:36.68 Osj0+Img.net
バッチファイルスクリプトって働き方改革になるの?
309:デフォルトの名無しさん
19/07/05 21:19:11.24 zBRgAgd8.net
Powershellが10年経って育った今からバッチを学ぶ意義は薄い
310:デフォルトの名無しさん
19/07/06 08:00:17.95 NPkITZNc.net
>>296
全部メモリーに読み込んでしまうとかファイルロック掛けるとかすれば良いのにね
311:デフォルトの名無しさん
19/07/06 08:01:28.83 NPkITZNc.net
>>298
PowerShellは色々トリッキーなところあるからなぁ
もう少し普通のスクリプト言語で良かったのに…
312:デフォルトの名無しさん
19/07/06 10:23:31.70 OJAqpfME.net
>>299
インタープリターではなくなる
313:デフォルトの名無しさん
19/07/06 10:31:09.33 SnF6bIfm.net
働き方改革?
314:デフォルトの名無しさん
19/07/06 10:53:24.31 NPkITZNc.net
>>301
意味わからん…
315:デフォルトの名無しさん
19/07/06 10:59:51.87 OJAqpfME.net
>>303
そもインタープリターは行単位でのみ読み込み解釈実行する仕様。
行内容を変えても反映されないんじゃインタープリターにならない
316:デフォルトの名無しさん
19/07/06 11:04:50.99 NPkITZNc.net
>>304
> そもインタープリターは行単位でのみ読み込み解釈実行する仕様。
逐次解釈は別にメモリーからでもいいだろ
> 行内容を変えても反映されないんじゃインタープリターにならない
そもそも行内容変えたらおかしくなるって話なんだがw
317:デフォルトの名無しさん
19/07/06 11:12:26.69 OJAqpfME.net
>>305
1の行の処理が終わってから2の行を読み込み解釈するのがインタープリター
メモリ先に読み込んだんじゃ意味ないの。
行内容変えてバグ混入させてバグったなら仕様通り
318:デフォルトの名無しさん
19/07/06 11:45:00.41 ddaI9LPq.net
ディスクキャッシュなしだとクッソ遅いんだよな
319:デフォルトの名無しさん
19/07/06 11:54:17.26 NPkITZNc.net
>>306
読み込み元がファイルかメモリーかなんて関係ないだろ
昔のBASICはインタープリターじゃねーのかよw
> 行内容変えてバグ混入させてバグったなら仕様通り
バカすぎる…
320:デフォルトの名無しさん
19/07/06 12:11:18.65 OJAqpfME.net
本来の仕様・特性を理解しておらず。
メモリに全部読み込んでファイルロックかけちゃえばとか
どっちがアホなんだか
>>296 のようなことをしなければいいだけ
321:デフォルトの名無しさん
19/07/06 12:13:38.81 NPkITZNc.net
> メモリに全部読み込んでファイルロックかけちゃえばとか
日本語の理解力もないのかよ…
322:デフォルトの名無しさん
19/07/06 12:20:37.36 OJAqpfME.net
仕様通りの動作に「仕様を変えるべきだ」というなら「どうぞ、自分で制作しておやりなさい」としか
ディスク上のプロフラムファイルを処理しろと指示しておいて、実行中にプログラムファイル弄る方がバカでしょ?
323:デフォルトの名無しさん
19/07/06 12:45:33.27 SnF6bIfm.net
横から失礼します。
例えば、バッチじゃないけど、
中間コード生成するのは、
インタプリタじゃないの?
324:デフォルトの名無しさん
19/07/06 12:53:22.08 NPkITZNc.net
> ディスク上のプロフラムファイルを処理しろと指示しておいて、実行中にプログラムファイル弄る方がバカでしょ?
うんうん、
> 行内容を変えても反映されないんじゃインタープリターにならない
とか言ってたバカに言ってやれよww
325:デフォルトの名無しさん
19/07/06 13:25:39.62 OJAqpfME.net
>>313
絶望的に頭悪いな
行内容を変えても反映されないんじゃインタープリターにならない
未実行の行内容をにバグ混入させればバグるのは仕様通り。インタープリタだから。
>>299だと行内容変えても帰る前の動作を続けるかファイルが変えられなくなる。
326:デフォルトの名無しさん
19/07/06 13:31:06.82 NPkITZNc.net
> 実行中にプログラムファイル弄る方がバカでしょ?
なのに内容変えたら反映しろとか頭おかしいw
もう自分が何を指摘されてるかもわかってないんだろうな
327:デフォルトの名無しさん
19/07/06 14:13:50.98 OJAqpfME.net
動作がバグらないように行内容をいじる方法もあるからなー
バカには気づけないのかもな
328:デフォルトの名無しさん
19/07/06 14:26:59.31 NPkITZNc.net
しれっと話し変えててウケる~w
329:デフォルトの名無しさん
19/07/06 14:27:43.94 ZOT0kh7c.net
title Win8.1のcmdはPowershellを呼び出すとタイトルが変わってしまう
timeout 5
powershell sleep 5
Powershellを呼び出してもタイトルが変化しない方法ありませんか?
330:デフォルトの名無しさん
19/07/06 15:18:42.27 Mj6xLmMK.net
なんか色々とっちらかってるけど
入力に対して逐次実行を行い内容を出力するための実行エンジンがインタプリタ
まとめて実行する方法がバッチ
バッチを書くための言語の種類がスクリプト
なのでインタプリタ上で動くスクリプトで記述されたバッチが多いのは事実だけど
バッチスクリプトだからって必ずしもインタプリタ上で動作するわけではない
あまり言われることはないけどC言語なんかも手順をまとめて記述するという
意味ではバッチ
そのバッチを効率よく動かすためにハードウェアにネイティブなコードなどに
変換するのがコンパイラ
なので>>312が言うような中間コードを生成するのは処理的にはバッチのコンパイル
C#がやJAVAが典型的だけどバッチとして書かれたスクリプトをコンパイラで
中間コードに変換して.netエンジンとかJAVAエンジンで動かすけど、これらの
エンジンはインタプリタとして作成されているので直接コマンドを逐次実行する
ことも出来るようになっている
インタプリタが何を持って逐次実行の基準にしている(一般的にテキスト入力な
インタプリタはキャリッジリターンだけど)かはインタプリタの実装しだいなので、
バッチの内容がバッチ実行中に書き換わった際に動作が変わる/変わらないって
いうのは実行エンジンがインタプリタであるとかないとか言うのと関係ない
Linuxのシェルスクリプトはshっていうインタプリタで動いてるけど、バッチ
スクリプトは「'(バッククォート)」で囲まれた文字列はコマンドとして実行でき、
文字列は動的に書き換えできるのでバッチファイルを書き換えながらインタプリタで
実行できるバッチスクリプトって言うものも存在する
逆にC#みたいな中間コードを実行するインタプリタシステムは一般的にまとめて
コードを読み込んで実行するので、実行中にファイルを書き換えても読み込まれた
コードが変わるわけではないのでそのまま実行できる
331:デフォルトの名無しさん
19/07/06 15:32:56.64 Es9FYwgG.net
バカの長文ウザい
332:デフォルトの名無しさん
19/07/06 16:47:17.04 edODQM35.net
理解できないときの一行レス乙
333:デフォルトの名無しさん
19/07/06 17:04:06.81 l+THgL+v.net
>>321
多分、その通り。
>>320は、自分以外みんなバカというセンスのかたなのでしょう。
(320著『自分以外みんなバカ』)