【.cmd】 バッチファイルスクリプト %13 【.bat】at TECH
【.cmd】 バッチファイルスクリプト %13 【.bat】 - 暇つぶし2ch211:デフォルトの名無しさん
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著『自分以外みんなバカ』)

334:312
19/07/06 17:45:47.25 SnF6bIfm.net
>>319
レスありがとうございました。

335:デフォルトの名無しさん
19/07/06 18:13:58.11 yCp3HJnn.net
>>321-322
そりゃ、
> あまり言われることはないけどC言語なんかも手順をまとめて記述するという意味ではバッチ
みたいなアホなことを言う奴を理解しろと言われてもなぁw

336:デフォルトの名無しさん
19/07/06 18:30:06.42 edODQM35.net
アホとバカは意味がちゃうで

337:デフォルトの名無しさん
19/07/07 00:42:47.20 YVv/+K6C.net
貴重なメモリをバッチなんかに使われたくない
ましてやファイルハンド�


338:� or FCBを消費するなんて考えたくもない



339:デフォルトの名無しさん
19/07/07 17:57:51.72 sK6+FwWI.net
書いたスクリプトをそのままCMD画面に貼り付けて実行できるのが素晴らしすぎる
これもインタープリタゆえのメリット

340:デフォルトの名無しさん
19/07/17 22:50:53.76 2IS3Ei7C.net
指定したURLをIEで開くバッチファイルを作りたいのですが、以下のいずれの書き方でもうまく起動しませんでした。
どのように記述すれば良いのでしょうか?

start "" """C:\Program Files\internet explorer\iexplore.exe"" URLリンク(www.yahoo.co.jp)
start "" "'C:\Program Files\internet explorer\iexplore.exe' URLリンク(www.yahoo.co.jp)
start 'C:\Program Files\internet explorer\iexplore.exe' URLリンク(www.yahoo.co.jp)
cmd /c start "" """C:\Program Files\internet explorer\iexplore.exe"" URLリンク(www.yahoo.co.jp)
cmd /c start "" "'C:\Program Files\internet explorer\iexplore.exe' URLリンク(www.yahoo.co.jp)
cmd /c start 'C:\Program Files\internet explorer\iexplore.exe' URLリンク(www.yahoo.co.jp)

341:デフォルトの名無しさん
19/07/17 22:52:08.85 2IS3Ei7C.net
↑書き忘れましたが、IEを起動したらバッチファイル自体はすぐに終了して欲しいです。

342:デフォルトの名無しさん
19/07/17 22:58:10.74 t7LU6uHU.net
これで普通に開けたけど
start "" "C:\Program Files\internet explorer\iexplore.exe" "URLリンク(www.yahoo.co.jp)
exit

343:デフォルトの名無しさん
19/07/17 23:41:41.05 2IS3Ei7C.net
>>330
助かりました。ありがとうございます><

344:デフォルトの名無しさん
19/07/22 20:50:29.11 64jFVFKi.net
質問です
chcp を設定後に日本語テキストファイルを type しても
なぜか数行ごとに部分的に文字化けします
正しく表示させる方法はありますか
ファイルをコード変換するしかないでしょうか
20932 (EUC-JP)
50220 (JIS)
65000 (UTF-7)
65001 (UTF-8)

345:デフォルトの名無しさん
19/07/23 00:29:27.63 NmYCCAI2.net
正常に表示できる部分もあるのか?
コマンドプロンプトのフォント設定はレジストリをいじればできるようだが
chcp したとしても
各コードに合わせた日本語フォントがないと思う
ファイルをコード変換には nkf などを利用すればよい
もちろんcp932に変換できない文字がありえる点には注意

346:デフォルトの名無しさん
19/07/23 01:19:58.32 dqAnc0cb.net
横から失礼。多分フォントの問題じゃないなあ。再現してみる。
@echo off
del a.txt
set "a=ああああああああああああああああああああああああああああああああああ"
chcp 65001
for /l %%i in (1,1,10) do echo %a% >> a.txt
start notepad a.txt
type a.txt
pause
goto :eof

347:デフォルトの名無しさん
19/07/23 13:00:19.24 dqAnc0cb.net
>>332 typeの代替えバッチ
@echo off & set /a b=1
for /f "delims=:" %%i in ('type "%~1" ^| findstr /n /r /c:"^$"') do call :x %%i
set /a a%b%=0,b=1,c=1
for /f delims^=^ eol^= %%i in ('type "%~1"') do call :y & echo.%%i
goto :eof
:x
set /a a%b%=%1,b-=-1 & exit /b
:y
set /a d=a%b%
set /a c-=-1 & if %c%==%d% echo.& set /a b-=-1 & goto y
動作文字コードは>>332の4種類とcp932とBOM付UTF-16LE
内部コマンドのtypeの文字化けの原因は不明
得体の知れないバッチが嫌ならnkfでどうぞ

348:332
19/07/23 19:39:52.27 3qcsVE62.net
みなさんレスありがとうございました
>>335 のバッチを実行したら正しく表示されました
なにか不具合があれば nkf で変換します

349:デフォルトの名無しさん
19/08/05 14:25:26.72 KhkfuoHG.net
@ECHO OFF
FOR /L %%I IN (1,1,3) DO (
:ラベルの次に空行だと死ぬようだ
ECHO %%I
)
PAUSE

350:デフォルトの名無しさん
19/08/05 23:40:50.69 uv4O1i4q.net
>>337
FOR コマンドの中に単純にラベルを入れるとそうなる。
諦めろ。そういう腐った仕様だ。

351:デフォルトの名無しさん
19/08/09 07:12:05.83 e+IGCa9q.net
MSはpowershell作っといてcmdも生殺しのまま

352:デフォルトの名無しさん
19/08/09 07:24:42.21 i8+nUA9v.net
後方互換レガシー用だから

353:デフォルトの名無しさん
19/08/10 16:26:14.51 O+qo9jJ2.net
・ループはなるべくラベルgotoで作る
・処理はまとめてCALLで呼び出す
と変な仕様に悩まされなくて済む

354:デフォルトの名無しさん
19/08/12 01:15:40.10 qDWW1IB8.net
>>341
つーか >>337 は FOR コマンドの中に「REM コマンドの代わりとして」ラベルを入れたっぽいよね。
REM コマンドは確かにダサい。クソみたいにダサい。
が、完全な代替手段はないことが今日までの先人たちの研究で分かっている。
「○○な場合正しく動かない」というケースから逃れられない。
素直に REM しとけ、って話なのさ。

355:デフォルトの名無しさん
19/08/12 01:43:33.99 asx4qCxc.net
>>341
そうですね
バッチ作成30年の知恵
バッチ前言語というのをつくり、バッチに変換するツールがあるといいのに

356:デフォルトの名無しさん
19/08/14 08:17:57.87 2+7gdzMY.net
なぜエラー?
@echo off
for /l %%i in (1,1,3) do (^
echo %%i
)
pause

357:デフォルトの名無しさん
19/08/14 12:07:08.56 tEu06J9P.net
空白行があるのがまずいのです。

358:デフォルトの名無しさん
19/08/15 07:26:44.38 mKbuBo/x.net
echo onで見るとechoが消えてる
for /L %i in (1 1 3) do (%i)

359:デフォルトの名無しさん
19/08/15 07:36:02.85 mKbuBo/x.net
今、気付いたけど
for/Lのカウントの区切り文字は半角スペースでもいいんだな

360:デフォルトの名無しさん
19/08/15 12:44:36.23 ALsBqyPd.net
なんで"("のあとでエスケープしてるんだ?

361:デフォルトの名無しさん
19/08/15 18:55:50.85 8DKeAJZl.net
>>348
エスケープすると長い記述を改行分割できる。
下記なら動くのではと想像
@echo off
for /l %%i in (1,1,3) do (^
^
echo %%i
)
pause

362:デフォルトの名無しさん
19/08/15 18:58:32.85 8DKeAJZl.net
こうかも。
違いはechoの前の半角スペースの有無
@echo off
for /l %%i in (1,1,3) do (^
^
echo %%i
)
pause

363:デフォルトの名無しさん
19/08/15 20:14:09.75 bAdklReO.net
>>350
横からだが、だとしても ”(” の直後には不要でしょう
わざわざ地雷踏みにいってるとしか思えない

364:デフォルトの名無しさん
19/08/15 20:20:13.66 hL4sD0l+.net
>>349
そういうことじゃなく、
そんなところにエスケープさえしなければ動く、ということ
空改行があっても同じ
@echo off
for /l %%i in (1,1,3) do (
echo %%i
)
pause

そもそも、エスケープが必要なのは以下のような書き方の場合
@echo off
for /l %%i in (1,1,3) ^
do (
echo %%i
)
pause

365:デフォルトの名無しさん
19/08/16 13:12:21.88 nbkgz595.net
元々^が要らんのは分かるが
何で2行下のechoが消えるんだ?

366:デフォルトの名無しさん
19/08/16 19:53:07.91 tgbth6lv.net
何が正解か良く分からないけど「echo」が消えているのではなく
「echo %%i」が実行された結果「%i」って文字列が出力されて
いるんじゃないかな

367:デフォルトの名無しさん
19/08/17 03:04:11.02 loMKkBUO.net
うん、メッセージを出したかったら、
echo [メッセ-ジ文]
だよね。

368:デフォルトの名無しさん
19/08/17 07:25:02.72 u1p0gnkJ.net
>>346を見ろ

369:332
19/08/17 18:15:26.70 etNorZr1.net
はろー♪
@echo off
(^
rem echo Hello, World!)
pause

370:デフォルトの名無しさん
19/08/17 21:41:43.17 nWccZbx0.net
>>357
cmd のパーサーが馬鹿なだけ。
そういうトリッキーな小賢しい書き方を探しても誰も幸せになれない。

371:デフォルトの名無しさん
19/08/17 23:29:25.24 u1p0gnkJ.net
>>357
そういうのはもういいから

372:デフォルトの名無しさん
19/08/20 20:01:18.85 S2+8M2EA.net
C:\Users\hogehoge\AppData\Local\Microsoft\Windows\InetCache
にIEのキャッシュファイルがあって、コマンドで削除したいのですが
del /f /q C:\Users\hogehoge\AppData\Local\Microsoft\Windows\InetCache\*
を管理者権限のコマンドプロンプトで実行しても消えてくれません。
どうすれば消せるのでしょうか?
環境はWin10です。
ちなみに上記の「del /f /q」を「dir」に変えて実行すると、何もファイルが表示されませんでした。



373:エクスプローラでは表示されるのに…



374:デフォルトの名無しさん
19/08/20 20:06:19.31 WpfDQiIq.net
まずは対象ファイルの属性を確認かな

375:デフォルトの名無しさん
19/08/20 20:39:45.13 WpfDQiIq.net
ここに詳しく書いてある
URLリンク(freesoft.tvbok.com)

376:デフォルトの名無しさん
19/08/30 17:07:15.01 C82bQLaF.net
任意のテキストファイルの各行(1~N)を、
変数のARRAY[1~N]にそのまま代入できますか?
テキストは空行あり、文字化けは無しで。

377:デフォルトの名無しさん
19/08/30 18:13:13.64 C82bQLaF.net
すみません
N行は指定じゃなくて全行です

378:デフォルトの名無しさん
19/08/30 19:43:28.54 hATE1ff9.net
>>363 確認の表示が不要なら消してくれ
 
@echo off & set /A N=0 & if "%~1"==":GETS" goto GETS
for /F "delims=" %%I in ('call "%~0" ":GETS" "%~1"') do (
set /A N+=1 & set %%I)
setlocal enabledelayedexpansion
for /L %%I in (1,1,%N%) do echo ARRAY[%%I]=!ARRAY[%%I]!
goto :eof
 
:GETS
set o="tokens=* delims=0123456789"
for /F %o% %%I in ('findstr /N "^" "%~2"') do (
set /A N+=1 & set s=%%I
setlocal enabledelayedexpansion
echo ARRAY[!N!]=!s:~1!
endlocal)

379:デフォルトの名無しさん
19/08/30 20:46:06.08 C82bQLaF.net
>>365
ありがとうございました
シフトJISで動作しました

380:デフォルトの名無しさん
19/08/31 00:24:30.62 dLbvCDhA.net
発見
call は遅い
自バッチ内であっても繰り返しの中では使わないほうがよい

381:デフォルトの名無しさん
19/08/31 02:06:06.88 KhyCGx+x.net
それは分かる
何かいい方法が有ったら書いてくれ

382:デフォルトの名無しさん
19/08/31 07:34:22.10 KhyCGx+x.net
ループの中では、call setも遅いな
call先はバッチが基本なので
%path%のフォルダ内にset.batが存在しないか
ループの中で毎回、無駄に検索して時間のロスに

383:デフォルトの名無しさん
19/08/31 13:05:56.96 4qIvp+ND.net
フルパスか相対パスで書けばいいのに

384:デフォルトの名無しさん
19/08/31 15:06:36.69 ny+pXiR9.net
クリーンに再実装しようとしてもうまく行かないし、Windows Terminalのオプソ化に期待

385:デフォルトの名無しさん
19/08/31 21:47:05.78 KhyCGx+x.net
内部コマンドsetにフルパス?

386:デフォルトの名無しさん
19/09/17 21:00:42.57 Syn6UaDZ.net
ポータブルデバイスにフォルダ移動したいのですがどのコマンドを使えばよろしいのでしょうか?
宜しくお願いします。

387:デフォルトの名無しさん
19/09/18 07:27:23.31 zCU+H1xg.net
robocopy

388:デフォルトの名無しさん
19/09/18 22:10:15.94 zS9nLp3S.net
>>374
回答ありがとございます。
試してみましたがうまくいきませんでした。

389:デフォルトの名無しさん
19/09/19 17:48:14.75 W0BHkkEI.net
そのポータブルデバイスとやらのスレで聞け

390:デフォルトの名無しさん
19/09/19 19:33:15.60 UaiZGsoz.net
>>373
MTP接続しているデバイスにbatでフォルダ移動したいということ?

391:デフォルトの名無しさん
19/09/19 21:49:07.77 oZTJ7ty8.net
>>377
MTP接続しているデバイスの端末(スマホ)のフォルダをCドライブにコピーしたいのです。
何度もありがとございます。

392:デフォルトの名無しさん
19/09/20 18:54:32.90 YblgUZDU.net
>>378
MTPにWindowsからアクセスする場合にはWDP (Windows Portable Device)という
仕組みを使ってアクセスする必要があるらしいのでPowerShellとかVBSみたいな
COMオブジェクトに対応しているスクリプト言語を使うかプログラミングしないと
無理みたいだけど

393:デフォルトの名無しさん
19/09/20 20:53:45.43 C2+cwByF.net
>>379
なるほどコマンドだけでは出来ないのですね。ありがとうございました。

394:デフォルトの名無しさん
19/09/20 21:22:16.17 CafmkPOq.net
mtpじゃなくftp使えばいいんじゃない

395:デフォルトの名無しさん
19/09/20 23:15:32.97 Va/jwPX


396:C.net



397:デフォルトの名無しさん
19/09/21 09:52:34.32 obXFPJy6.net
>>382
MTPは本来画像とか音声とか映像ファイルを共有するための規格なんだけど
それでは不便なので実装者が拡張して他のファイルも見えるようにしているらしい
でWindowsのexplorerで削除できないファイルってのは何種類かあるけど表示
できないってのは覚えがないのでスマホ側の実装の問題じゃないかな

398:デフォルトの名無しさん
19/09/21 11:24:33.96 aqL81KxG.net
>>383
スマホのandroidがおかしいのかも
explorerでコピペしたら
全数処理できてるか要確認ですね

399:デフォルトの名無しさん
19/09/21 12:19:59.86 Zmbs8cMB.net
>>382
メディアストレージのDBが壊れてるか更新されてないだけでは?

400:デフォルトの名無しさん
19/09/21 12:39:19.92 aqL81KxG.net
>>385
zip圧縮後、繋ぎ直したらzipは表示されたが元ファイルは非表示、
なので更新というより壊れてたみたいね

401:デフォルトの名無しさん
19/09/21 23:40:04.00 bVn3Z6J/.net
>>378
Android Debug Bridge(adb)を使用してはどうでしょうか?
URLリンク(developer.android.com)
例)adb pull remote local
ただしワイルドカードが使用できないので工夫が必要かも

402:デフォルトの名無しさん
19/09/22 06:16:16.89 9I7oEjtC.net
そもそもAndroidなのか?

403:デフォルトの名無しさん
19/09/23 04:39:39.37 LINEF6Ks.net
>>387
adbを使用したらうまくいきました。
ありがとうございました。

404:デフォルトの名無しさん
19/10/01 22:20:01.40 vtcCH4Ws.net
vbsスクリプト使用者に対話型でURLを入力させようと思い
inputboxを使用していましたが254文字以降は切り捨てられるようで
切り捨てられた場合にcmdを呼んでコマンドプロンプトで
TYPE CONで入力させ標準出力からとろうと思いました。
コマンドプロンプトから
TYPE CON
で文字入力していくと510文字しか打てません
COPY CON
で文字入力していく場合も510文字しか打てません
ただこちらは改行して2回目以降の文字入力は254文字までしか打てません
コマンドプロンプトはwindowsの仕様だともっと入力できたはずだと思うんですけど
TYPE COPYコマンドが原因なのでしょうか?
上限が512-2 256-2なのが気になります

405:デフォルトの名無しさん
19/10/01 22:57:55.77 co/wCjS7.net
>>390
set /p var
で入力すると1023文字入力できるみたい

406:デフォルトの名無しさん
19/10/01 23:08:42.31 vtcCH4Ws.net
>>391
ありがとうございます
環境変数に突っ込んでそっちからとる案ってことですね

407:デフォルトの名無しさん
19/10/01 23:19:31.66 co/wCjS7.net
標準出力がいいなら
echo %var%
を最後に付けとけばうまくいかないかな?

408:デフォルトの名無しさん
19/10/01 23:41:17.62 vtcCH4Ws.net
いえVBSで環境変数からでも取れるんでどちらでもいいんですが
この方法は毎回ファイル書き込みはいるのなら避けたいですね

409:デフォルトの名無しさん
19/10/03 06:03:26.81 qiM7wE73.net
>>390
findstr ^^
ではどうですか?
入力の最後は改行とCtrl+Z
8000文字は入ったが、それ以上は試していない

410:デフォルトの名無しさん
19/10/03 19:45:19.23 +nOn2TPH.net
>>395
ありがとうございます。たしかにfindstr ^^ 試すと長く入力できますね
ただスクリプトが動く動きません(type con copy con以外)
たぶんexecで標準入出力を横取りしてるからなのかなと思ったんですけどならtype conはなぜ動くのかという気もします
//Prompt.vbs


411: Function Prompt(Text,Default) WScript.Echo(Text) Set WshShell = CreateObject("WScript.Shell") Set oExec = WshShell.exec("cmd /c title " & Replace(Replace(Text,vbCr,""),vbLf,"") & " && type con") 'Set oExec = WshShell.exec("cmd /c findstr ^^") Prompt = oExec.stdout.ReadLine() oExec.terminate End Function msgbox Prompt("test dayo","")



412:デフォルトの名無しさん
19/10/03 20:43:23.90 jymbX9V4.net
cmdじゃないけど
powershell -Command $a=read-host; write-host $a
とかどうよ

413:デフォルトの名無しさん
19/10/03 21:20:07.70 +nOn2TPH.net
powershellもちょっと試してたんですけどこっちもキーボード入力がはいってるように見えないです
powershellはcommand移行の注釈がいまいちわからなくてそれが原因なのかなとも思ったんですけど
(""の場合は前に&をつけるとかどうとか)
Function Prompt(Text,Default)
WScript.Echo(Text)
Set WshShell = CreateObject("WScript.Shell")
'Set oExec = WshShell.exec("cmd /c title " & Replace(Replace(Text,vbCr,""),vbLf,"") & " && type con")
'Set oExec = WshShell.exec("cmd /c findstr ^^")
Set oExec = WshShell.exec("powershell -NoExit -NoLogo -NoProfile -ExecutionPolicy RemoteSigned -Command $a=read-host; write-host $a")
Prompt = oExec.stdout.ReadLine()
oExec.terminate
End Function
msgbox Prompt("test dayo","")

414:デフォルトの名無しさん
19/10/04 05:33:06.84 igWxDR2f.net
>>398
いまいちVB.NETがどういう環境で使えるのか分からないし
PowerShellの実行を許可してない環境でも動くのかも分からないが
VB.NETのinputboxには256文字の入力制限が無い模様
Function Prompt(Text,Default)
WScript.Echo(Text)
Set WshShell = CreateObject("WScript.Shell")
Set oExec = WshShell.exec("powershell -NoProfile -ExecutionPolicy Unrestricted -C add-type -AssemblyName microsoft.VisualBasic; [Microsoft.VisualBasic.Interaction]::InputBox('URLを入力してください', 'URL入力');")
Prompt = oExec.stdout.ReadLine()
End Function
'msgbox Prompt("test dayo","")
WScript.Echo Prompt("test dayo","")

415:デフォルトの名無しさん
19/10/04 06:57:13.54 2Xve1BBy.net
>>396
良く分からんが、こんなのでどうですかね?
-------foo.bat
@findstr ^^ < con
-------Prompt.vbs
Function Prompt(Text,Default)
WScript.Echo(Text)
Set WshShell = CreateObject("WScript.Shell")
Set oExec = WshShell.exec("foo.bat")
Prompt = oExec.stdout.ReadLine()
oExec.terminate
End Function
msgbox Prompt("test dayo","")

416:デフォルトの名無しさん
19/10/04 08:44:14.07 2Xve1BBy.net
バッチ不要だな
Set oExec = WshShell.exec("cmd /c findstr /R . < con")
最後に1023文字しか表示されないなReadLineのせいか?

417:デフォルトの名無しさん
19/10/04 12:18:00.19 mgLzdBVB.net
ありがとうございます
Function Prompt(Text,Default)
WScript.Echo(Text)
Set WshShell = CreateObject("WScript.Shell")
'Set oExec = WshShell.exec("cmd /c title " & Replace(Replace(Text,vbCr,""),vbLf,"") & " && type con")
Set oExec = WshShell.exec("cmd /c cmd /c findstr /R . < con")
Prompt = oExec.stdout.ReadLine()
oExec.terminate
End Function
msgbox LEN(Prompt("test dayo",""))
でやると8190でるのでmsgboxの表示制限っぽいです
上限が512から8190まで増えました♪

418:デフォルトの名無しさん
19/10/04 12:44:51.20 2Xve1BBy.net
それは良かった
ところで cmd /c cmd /c と2重になってるのは何か意味が?

419:デフォルトの名無しさん
19/10/04 12:49:02.43 mgLzdBVB.net
単なるミスですw

420:デフォルトの名無しさん
19/10/04 20:33:36.96 igWxDR2f.net
>>402
HTAで作るって方向は無いのかな?
WScriptオブジェクトは使えないけど、IEと違ってローカル処理はできるよ
全部HTAにするのが面倒ならUI部分をHTAで作って
そこから、各々vbsを起動するようにするとか
サンプル URLリンク(www.42ch.net)

421:デフォルトの名無しさん
19/10/05 07:49:09.72 XliNsfqD.net
ありがとうございます
HTAも便利そうですね
アドレスバー,リンクをドラッグドロップで取り込めるのがいいなと

422:デフォルトの名無しさん
19/10/07 16:39:36.79 /M5l0Sli.net
そういやHTAはHighDPI対応してないのかな
サーフェスで苦労した覚えが

423:デフォルトの名無しさん
19/10/09 19:08:15.06 tUBbtl1D.net
文字列の画面表示の桁数はバッチで取得できますか?
半角1で全角2での合計みたいな

424:デフォルトの名無しさん
19/10/10 19:46:16.73 NVkes/cJ.net
>>408
@echo off & if "%~1"=="1" goto x
set c=call "%~0" 1 ^^^| findstr /o /r .*
set o="skip=1 delims=:" & set /p s=文字列=
for /f %o% %%i in ('%c%') do set /a b=%%i-2
echo 桁数=


425: %b% & pause & goto :eof :x setlocal enabledelayedexpansion echo.!s! echo. 入力はシフトJISで表示できる文字のみです。 CP932で正常に動作します。たぶん。



426:デフォルトの名無しさん
19/10/10 23:42:47.50 T8I5o9Ey.net
mode con かも

427:デフォルトの名無しさん
19/10/11 07:29:52.81 D9aa0x5a.net
>>409,>>410
ありがとうございました!
コードページは932でしたので問題ないです
これで複数のデータを右詰めで揃えて表示できました
タブ入りだと表示がズレますが自分で対処します

428:デフォルトの名無しさん
19/10/18 19:14:42.75 MUFbi2Ng.net
特定の2つのフォルダ内を一括削除するbatの作り方がわかりません…。
1つだけならば出来るのですが2つ指定するにはどうすればいいのでしょうか 
お願いします

429:デフォルトの名無しさん
19/10/18 19:26:30.68 sHZx2IDB.net
1行目にAフォルダを削除
次の行にBフォルダを削除でいいんじゃないの?
1行に書きたければ
複数のコマンドを続けて実行する
URLリンク(www.adminweb.jp)

430:デフォルトの名無しさん
19/10/18 19:28:12.11 DNcfAKqA.net
2回やるbatを作ればいいのでは?

431:デフォルトの名無しさん
19/10/18 19:29:32.93 DNcfAKqA.net
あ、かぶってしまった

432:デフォルトの名無しさん
19/10/18 22:56:14.67 ZkRket+3.net
for %%I in ( C:\AAA C:\BBB ) do del /Q %%I\*.*

433:デフォルトの名無しさん
19/10/18 23:57:13.31 uNKAmOCu.net
for /f %%i in ('dir /b^|find "foo"') do pause
fooが無かった場合pauseしてくれないのですが解決策ありませんか?
実際はfooの有無で分岐させるのですがとりあえずpauseで書いてます

434:デフォルトの名無しさん
19/10/19 00:21:50.04 nJ40H8MU.net
>>417
(for /f %%i in ('dir /b^|find "foo"') do pause) || pause

435:デフォルトの名無しさん
19/10/19 00:29:35.02 lUUAms6Y.net
>>418
ありがとう、できたらfor内で分岐したい…

436:デフォルトの名無しさん
19/10/19 00:34:28.69 nJ40H8MU.net
forのループは条件が一致しないとすり抜けて
1回も通らないで次のステートメントにいっちゃうから無理
無理矢理やろうとすると、ダミー項目を与えて必ず一度はforループを実行するようにして
その中でダミー項目だったら~と条件判定することになる

437:デフォルトの名無しさん
19/10/19 00:43:02.67 nJ40H8MU.net
こんな感じ
for /f %%i in ('dir /b^|find "foo"^|^|echo none') do (if "%%i" equ "none" echo ありません)

438:デフォルトの名無しさん
19/10/19 00:49:42.45 nJ40H8MU.net
俺としては>>418の方が見やすくて間違いが少なくて済むと思う

439:デフォルトの名無しさん
19/10/19 01:05:43.14 lUUAms6Y.net
なるほど||つかう手もあるんですね
for入れ子にしてるから||でいきますありがとう

440:デフォルトの名無しさん
19/10/19 01:26:01.92 nJ40H8MU.net
forの後で、%errorlevel%で判断できるかと思ったけど
forのコマンドは子タスクで実行されるから環境を親タスクに引き継がないんだね
こういうことはパイプの右側でも起きるけど

441:
19/10/19 07:15:14 azMLqhGk.net
for /f "delims=" %%i in ('dir/b *foo* 2^>nul ^|^| echo *') do (
if "%%~i"=="*" (echo ないよ) else echo %%i
)

442:デフォルトの名無しさん
19/10/20 07:21:20.34 bUbbfXYV.net
for /f "delims=" %%i in ('"dir/b *foo* 2>&1"') do if not exist %%i echo %%i

443:デフォルトの名無しさん
19/10/21 18:09:26.80 8RixcIVS.net
なんか古代呪文を撃ちあってるみたい(^_^;)

444:デフォルトの名無しさん
19/10/21 21:05:31.60 Sv6Oxatw.net
そう、実は、古代語魔術(ハイエンシェント)を打ち合っているのです。
スレ違いだけれど、
魔法の使い方
URLリンク(eman-physics.net)
を、思い出した。

445:デフォルトの名無しさん
19/10/21 22:05:11 nEQALG6h.net
ザイログニーモニックは忘れた

446:デフォルトの名無しさん
19/10/22 23:09:34.31 jiuE9ZBi.net
詠唱せよ

447:デフォルトの名無しさん
19/10/27 14:29:49.16 Lik42TLZ.net
cmd.exe /c start ってネットワークドライブのファイル開けないんでしたっけ?
cmd.exe /c start t:\test.txt ってやると
アクセスが拒否されました。って表示される。c:\以下なら大丈夫
cmd.exe /c start file:\\t:\test.txt ってやれば開けるからいいんだけど

448:デフォルトの名無しさん
19/10/27 19:40:17.02 n+Gkmfbl.net
cmd /c start t:\test.txt

start t:\test.txt
の違いは?

449:デフォルトの名無しさん
19/10/27 19:45:47.81 QHyOIS3t.net
startが内部コマンド

450:デフォルトの名無しさん
19/10/27 19:54:44.57 n+Gkmfbl.net
なんで cmd /c が必要?

451:デフォルトの名無しさん
19/10/27 22:46:50.23 8uvk7ayg.net
>>434
ぐぐれかす

452:蟻人間
19/10/27 23:17:38.75 cNZwDfUU.net
>>434
内部コマンドは実行可能なモジュールではなく、cmd内部でのみ実行可能だから。
内部コマンドはcmdで解釈・実行される。

453:デフォルトの名無しさん
19/10/28 01:22:07 YqbFbBrf.net
>>434
バッチでは cmd /c は不要ですね。
cmd /c があれば子プロセスになります。
どっちも結果は同じ。エディタが起動します。
「ファイル名を指定して実行」の入力なら、
cmd /c start は不要かと思います。
でも、あっても間違いではないです。

454:デフォルトの名無しさん
19/10/28 02:10:13 t0sY5Haq.net
そんなこと聞いてないから、>>431に答えてくれ

455:438
19/10/28 02:18:17.09 bqlyCkZ6.net
ネットワークフォルダをドライブに割り当てた問題かと思えば
関係なさそうだ。でも不思議だ
cmd.exe /c start \\server\folder だとフォルダが開ける
cmd.exe /c start \\server\folder\subfolder でも問題ない
cmd.exe /c start \\server\folder\test.txt だとアクセスが拒否される
でもエクスプローラーのアドレスバーに ↑ を入れるとメモ帳で開ける

456:デフォルトの名無しさん
19/10/28 03:05:07.76 ML+fUsJB.net
管理者権限でやってみては?

457:438
19/10/28 03:54:57.58 bqlyCkZ6.net
アクセスが拒否されました

458:デフォルトの名無しさん
19/10/28 07:04:53 YqbFbBrf.net
>>438 すみません。私には分かりません。
cmd/c を省略、 さらに start を省略しても同じアクセス拒否ですか?

459:デフォルトの名無しさん
19/10/28 08:16:04.60 kjzN6NI8.net
>>439
>cmd.exe /c start \\server\folder\test.txt だとアクセスが拒否される
>でもエクスプローラーのアドレスバーに ↑ を入れるとメモ帳で開ける
このコマンドには、メモ帳を起動すると書いていないから、起動できないだろ
拡張子から、起動するアプリを取得できないだろ?
そういう情報は、レジストリに入っているから、
バッチファイルから、そこへアクセスできるか?

460:443
19/10/28 08:20:10.88 kjzN6NI8.net
普通に「notepad パス付きファイル名」なら、起動できるだろ?

461:デフォルトの名無しさん
19/10/29 07:53:25 SHkVBveq.net
>>439
エクスプローラーのバーに書くのも cmd/c start は要らんぞ

462:デフォルトの名無しさん
19/10/29 11:55:42.58 w4Uxvw1j.net
>>443
バッチからでも関連付け起動できるぞ

463:デフォルトの名無しさん
19/10/29 12:51:26.56 SHkVBveq.net
file:\\C:\Program Files (x86)\TeraPad\TeraPad.exe

>>446
>>443 は.txtの関連付けはメモ帳とは限らんと言ってる

notepad.exe がネットワークドライブのファイル名を処理できるかは知らんが
notepad file:\\t:\test.txt
みたいなのではダメだろうな
start file:\\t:\test.txt
なら良さそうだが

464:デフォルトの名無しさん
19/10/29 12:53:59.00 SHkVBveq.net
ああ1行目にゴミが付いたw 無視してくれ

465:デフォルトの名無しさん
19/10/29 13:09:40.06 YQKoC2Uo.net
コマンドプロンプトの文字コードがよくわからん。
なんでchcp 932なのにUnicodeが表示できてるんだ?
chcpの設定とは無関係に画面はUnicodeで変換してるんか?

466:デフォルトの名無しさん
19/10/29 13:26:49.20 SHkVBveq.net
バッチはSJIS
リダイレクトするとSJIS
画面はユニコード
set はユニコード特有文字でも入る(cmd画面で入力なら)
cmdの内部処理はユニコード

467:デフォルトの名無しさん
19/10/29 13:34:20.85 spBBwL/I.net
Unicodeはいいが文字コードは何なんだ?
UTF-8なのか?UTF-16なのか?

468:デフォルトの名無しさん
19/10/29 13:37:09.01 SHkVBveq.net
16

469:デフォルトの名無しさん
19/10/29 13:40:11.15 spBBwL/I.net
>>452
と思うやろ?
typeコマンドは文字コード変換してるかもしれんなと思って
copy ファイル名 CON なら、そのまんま表示されるだろうと
思ってやってみたら、
UTF-8は問題なく表示されて、UTF-16は文字化けしてるんだよ。
Windows 10で仕様でも変わったんか?

470:デフォルトの名無しさん
19/10/29 13:47:51.80 SHkVBveq.net
変わらず
後は自分で調べろ

471:デフォルトの名無しさん
19/10/29 13:53:47.92 spBBwL/I.net
わからんのかーいw

472:デフォルトの名無しさん
19/10/29 14:01:37.87 SHkVBveq.net
図に乗るな

473:デフォルトの名無しさん
19/10/29 14:15:50.84 spBBwL/I.net
やっぱり仕様が変わってた。
Windows 7だとchcp 932の時、
copy test.txt CON で正しく表示できるのはShiftJISだけ
UTF-8でもUTF-16LEでも文字化けする。
Windows 10だと逆に、UTF-8(BOMなし)、UTF-16LEは
正しく表示できるが、ShiftJISは文字化けする。

474:デフォルトの名無しさん
19/10/29 14:23:41.56 SHkVBveq.net
そうなのか
でも内部が16だと思うが
分からん

475:デフォルトの名無しさん
19/10/29 14:27:54.02 spBBwL/I.net
Windows 7でもdirコマンドでShiftJISにない文字は表示できてるから
最終的にはUnicodeなんだろう(おそらくUTF16だと思うが)
その途中になんかあるんだろうな。
Windows 10でcopy CONつかってるのに、UTF-8とUTF-16の両方が
文字化けしないのが不思議だ・・・って思ったら、
あれ?UTF-16文字化けしてた。んん?間違ってtypeで表示してたか。
これなら理解できる。

476:デフォルトの名無しさん
19/10/29 14:44:03.37 XkpxJQc3.net
>>457
いつのWindows10だね?

477:デフォルトの名無しさん
19/10/29 14:52:33.20 spBBwL/I.net
>>460
今の最新の公式リリース

478:デフォルトの名無しさん
19/10/29 14:56:43.68 spBBwL/I.net
なんかわかりづらくなったので再掲
copy test.txt CONで検証
Windows7、chcp 932・・・text.txt が ShiftJIS だと正しく表示される
Windows10、chcp 932・・・text.txt が UTF-8(BOMなし) だと正しく表示される

479:デフォルトの名無しさん
19/10/29 16:52:33.42 spBBwL/I.net
なんかいろいろ勘違いしてたっぽい
copy CONつかってもどこかの誰かが変換かましてるっぽい
こんな漢字でバイナリ直接吐き出したら、chcp 932ではSJISしか正しく表示されなかった。
chcp 65001にしたらUTF8だけ
Windows 10でだけど、たぶんWindows 7でも同じじゃないかな?
#include <iostream>
int main()
{
unsigned char str[] = { 0xE6, 0xBC, 0xA2, 0xE5, 0xAD, 0x97, 0xE2, 0x9D, 0xA4 };
std::cout.write((char*)&str, sizeof(str));
}

480:デフォルトの名無しさん
19/10/29 17:46:22.44 4a4kNF+Q.net
一つわかった気がする。
コマンドプロンプトはUnicode対応してるけどバッチファイルはUnicode対応じゃないんだ。
(正確にはchcp 65001を実行すれば、UTF-8のバッチファイルを実行できる)
だからchcp 932のままコマンドプロンプトでUnicode文字を使うことができるけど
バッチファイルにするとそれができない。

481:デフォルトの名無しさん
19/10/29 17:46:59.43 wQOUEDyj.net
テキストストリームだけしか通さないから何らかの変換が入ってるのかも知れないね
copy /b hoge.txt con
指定されたデバイスに書き込めません。
0 個のファイルをコピーしました。

482:デフォルトの名無しさん
19/10/29 18:03:33.66 4a4kNF+Q.net
あ、copyに/bオプションなんてあったのか・・・

483:デフォルトの名無しさん
19/10/29 18:10:48.74 4a4kNF+Q.net
そんな馬鹿な・・・。Windows 10でもShiftJISじゃないと表示されなくなっただと?
何度も確認したはずだぞ???

484:デフォルトの名無しさん
19/10/29 18:37:30.30 tLCpEMn0.net
Windows10については徐々に更新されているらしい
Windows Command-Line: Unicode and UTF-8 Output Text Buffer
URLリンク(devblogs.microsoft.com)

485:デフォルトの名無しさん
19/10/29 19:04:08.72 SHkVBveq.net
少し前にここ�


486:ナ同様の話題が有ったが UTF-8(BOM無し) のテキストは たとえ chcp 65001 しても type で一部分文字化けする findstr ^^ foo.txt で正常に表示されるはず(chcp 65001 で)



487:デフォルトの名無しさん
19/10/29 19:08:30.96 SHkVBveq.net
あと chcp 65001 しても UTF-8 のバッチは
正常に動作しないと思った方がいい

488:デフォルトの名無しさん
19/10/29 20:31:39.34 ltL5L5Cn.net
あぁ、クソ。意味がわからんけど、理由がわかった。
1. まず、utf8.txt の中身をUTF-8で作る。ShiftJISにない文字も入れておく。
2. chcp を実行。「現在のコード ページ: 932」と表示されることを確認する。
3. コマンドプロンプトを起動して、type utf8.txt にして文字化けすることを確認する
ここまではなんの変哲もない。
4. powershell.exe -Command [Console]::OutputEncoding = [Text.Encoding]::UTF8 を実行する
5. type utf8.txt を実行すると文字化けしない(!)
6. chcp を実行。「Active code page: 932」と表示される。932なのになぜか英語(!)
chcpを変更してもとに戻すと、元に戻るし、
powershell -Command [Console]::OutputEncoding = [Text.Encoding]::Default を実行しても元に戻る
子プロセスであるはずのpowershellがなにかコマンドプロンプトの状態を変えてやがる。
なんだこれ?コマンドプロンプトに英語モードとかあったっけ?

489:デフォルトの名無しさん
19/10/29 20:34:10.83 ltL5L5Cn.net
コマンドプロンプトを起動するのは2の時の間違いな

490:デフォルトの名無しさん
19/10/29 20:38:52.72 ltL5L5Cn.net
この話から気づくと思うけど、
powershell -Command [Console]::OutputEncoding
初期状態は、日本語 (シフト JIS)
powershell -Command [Console]::OutputEncoding = [Text.Encoding]::UTF8
これでUTF-8に変更して
powershell -Command [Console]::OutputEncoding
現在の設定を確認すると、UTF-8になってる。
chcpの値は変わらんのに、コードページを変えることができてしまっているかのようだ。

491:デフォルトの名無しさん
19/10/29 21:33:51.82 ltL5L5Cn.net
Windows 7にPowerShell6をインストールしてやってみたけど、
pwsh -Command [Console]::OutputEncoding = [Text.Encoding]::UTF8 で
コードページが変わるな。Windows 7はまともに動かないので画面がバグるw

492:デフォルトの名無しさん
19/10/29 21:41:58.40 ltL5L5Cn.net
なるほど、SetConsoleOutputCPでコマンドプロンプトのコードページを変更できるらしい
URLリンク(tooljp.com)

493:デフォルトの名無しさん
19/10/30 07:47:21.02 WNRoeYsC.net
おれもコードページ弄って色々やったが上手くいかなかった
typeは一部ダメ、moreは全くダメ、findstrはリダイレクトするとダメ、
copy~conは utf-7とjis が一部ダメ、
for~do echoでやると空行が抜けてダメという具合

494:デフォルトの名無しさん
19/10/30 08:50:12.52 BvOaIOcB.net
エディタがあれば必要ない

495:デフォルトの名無しさん
19/10/30 11:07:44.00 iT3/p0k9.net
>>476
なんとなく画面に表示する部分にバグがあるから
バッチファイル内で閉じて画面に表示しなければ、chcp 65001で動くような気がする。
あとWindows 10ではそこらへんが直ってるので同じように考えるのは早計

496:デフォルトの名無しさん
19/10/30 11:25:55.22 iT3/p0k9.net
Windows 7でこれが文字化けせずに動いた
chcpで画面はクリアされるが、正しく出力される。
↓UTF8 + CRLFで作成
@echo off
chcp 65001
set A=ユニコード文字
chcp 932
echo %A%

497:デフォルトの名無しさん
19/10/30 12:04:53.93 BvOaIOcB.net
>>262 みたいのは今でも化けるね
>>476 はWindows10だと思う
どっちにしろ不具合を把握しとくのは大事だね

498:デフォルトの名無しさん
19/10/30 12:11:59.20 n2bLSC2q.net
chcp 65001 にしてもcmd /u で開き直さなきゃバグるんじゃない?

499:デフォルトの名無しさん
19/10/30 12:17:27.39 4eNYSN+t.net
chcpやってモード変更したとしても
既に開いたハンドルは開いたときのモードのままだろうからね

500:デフォルトの名無しさん
19/10/30 12:27:14.70 iT3/p0k9.net
>>480
化けると言うよりか、文字の終わりを正しく認識できてない感じ
これならうまくいく。
まずchcpをifの()内でやるとおかしくなる。
その上でsetする文字をダブルクォートでく


501:くらなかったらおかしくなった なのでダブルクォートくくって、出力時に外してる。 @echo off chcp 65001 set A= set B= if "hoge"=="hoge" ( set A="あああ" set B="いいい" ) chcp 932 call :output %A% %B% exit /b :output echo %~1 echo %~2



502:デフォルトの名無しさん
19/10/30 12:29:13.59 iT3/p0k9.net
ちなみに >>483 はchcp65001した状態でバッチファイルを実行すれば
バッチファイルの中でchcpせずに動く
あとファイルの文字コードはUTF8な

503:デフォルトの名無しさん
19/10/30 12:32:44.17 iT3/p0k9.net
>>482
そうとは限らない。
chcpはどうやら内部でSetConsoleOutputCPを呼び出してるんだろうけど
SetConsoleOutputCPっていうのはConsole APIの一つで、
コマンドプロンプトのコードページを変更する。
このAPIは子プロセスから親プロセスをたどって見つけた
コンソール(コマンドプロンプト)のコードページを変更できる。
ハンドルのモードは関係なく、コンソールのコードページの話

504:デフォルトの名無しさん
19/10/30 12:38:00.67 iT3/p0k9.net
>>252の改良でこれならうまく動くんだよな
ダブルクォートはいるけど。
あとecho あああa みたいに最後をASCII文字にしても動く
@echo off
chcp 65001
if "hoge"=="hoge" (
echo "あああ"
echo "いいい"
)

505:デフォルトの名無しさん
19/10/30 12:45:45.44 iT3/p0k9.net
こうすりゃいいのかw
@echo off
chcp 65001
if "hoge"=="hoge" (
call :echo "あああ"
call :echo "いいい"
)
exit /b
:echo
echo %~1

506:デフォルトの名無しさん
19/10/30 12:46:49.70 iT3/p0k9.net
まあバッチファイルでchcp 65001を使うのはやめたほうがいいと思うけど
ワークアラウンドでどうにか対応できなくはないかもしれないw

507:デフォルトの名無しさん
19/10/30 13:25:11.54 iT3/p0k9.net
上の方でcmdがだめならPowerShellを使えばいいじゃないみたいなことが書いてあるけど、
UTF8の出力に関しては、コンソールの問題だから
Windows 7、8.1 ではPowerShellでもバグるんだよな
Windows 7にPowerShell6を入れてみたが、デフォルトで
「あいう」というファイル名が「ああいいうう」と表示される上に
[Console]::OutputEncoding = [Text.Encoding]::UTF8 すると
出力できませんみたいなエラーが発生するw
つまりWindows 7+PowerShell6だと日本語ファイル名は正しく表示されない
標準搭載のPowerShell 2なら問題ないんだけどね

508:デフォルトの名無しさん
19/10/30 13:41:42.20 zJjGNXoj.net
それは
>これは、$OutputEncoding が Default だと US-ASCII になっているので、S-JIS 文字列を渡そうとしてもリダイレクト時に日本語がうまく扱えないからです。
>結論から言うと、$OutputEncoding を S-JIS に変更して clip.exe にリダイレクトすれば文字化けしません。
これが関係するのかな?

509:デフォルトの名無しさん
19/10/30 13:53:29.35 ecgQNQwo.net
hoge ディレクトリに
 test_1.txt  …半角スペースなし
 test 2.txt  …半角スペースあり
 test 3.txt  …全角スペースあり
がある場合に
@echo off
for /f "usebackq" %%I in (`dir /b "hoge"`) do echo %%I
というバッチファイルを実行すると
 test_1.txt
 test
 test 3.txt
となって、普通に dir /b "hoge" を実行した結果と異なり、
半角スペースのある文字列(test 2.txt)を渡せないのだけれど、
どうしたらいいですか?

510:デフォルトの名無しさん
19/10/30 13:53:40.11 iT3/p0k9.net
どこの記事だよw まあググったが。
URLリンク(www.vwnet.jp)

511:デフォルトの名無しさん
19/10/30 14:08:53.46 iT3/p0k9.net
clipは使ったのことがないので実験。
あとPowerShellのバージョンで色々変わるので、
その記事の内容から検証しないといかんw
■コマンドプロンプトより
・chcp 932の場合
OK: echo あいう | clip.exe
NG: echo (ユニコード文字) | clip.exe
・chcp 65001の場合
OK: echo あいう | clip.exe
OK: echo (ユニコード文字) | clip.exe

■Windows 10 の PowerShell 5.1より
・[Console]::OutputEncoding = [Text.Encoding]::Default (Code Page 932)
NG: echo あいう | clip.exe
NG: echo (ユニコード文字) | clip.exe
・[Console]::OutputEncoding = [Text.Encoding]::UTF8
NG: echo あいう | clip.exe
NG: echo (ユニコード文字) | clip.exe

■PowerShell 6.2より
・[Console]::OutputEncoding = [Text.Encoding]::Default (Code Page 65001)
NG: echo あいう | clip.exe
NG: echo (ユニコード文字) | clip.exe
ただし、コマンドプロンプトおよびPowerShell 5.1では
?になるのにたいしてこっちは文字化けする

512:デフォルトの名無しさん
19/10/30 14:13:56.47 iT3/p0k9.net
ここはPowerShellのスレじゃないんだがw
$OutputEncoding と [Console]::$OutputEncoding は別もんなんか!?
[Console]は[Console]::WriteLine とか使うときだけかな?

513:デフォルトの名無しさん
19/10/30 14:16:01.69 n2bLSC2q.net
>>491
"usebackq delims="

514:デフォルトの名無しさん
19/10/30 14:21:07.12 iT3/p0k9.net
[Console]::OutputEncoding と $OutputEncoding の



515:両方をUTF8にしたらユニコード文字含めて文字化けしなかった。 ■Windows 10 の PowerShell 5.1より ・[Console]::OutputEncoding = [Text.Encoding]::UTF8 ?になる: echo あいう | clip.exe ?になる: echo (ユニコード文字) | clip.exe ・$OutputEncoding = [Text.Encoding]::UTF8 ?文字化け: echo あいう | clip.exe ?文字化け: echo (ユニコード文字) | clip.exe ???・[Console]::OutputEncoding + $OutputEncoding = [Text.Encoding]::UTF8 ?OK: echo あいう | clip.exe ??OK: echo (ユニコード文字) | clip.exe



516:デフォルトの名無しさん
19/10/30 14:22:18.15 iT3/p0k9.net
なぜか書き込みにゴミが入った・・・
■Windows 10 の PowerShell 5.1より
・[Console]::OutputEncoding = [Text.Encoding]::UTF8
?になる: echo あいう | clip.exe
?になる: echo (ユニコード文字) | clip.exe
・$OutputEncoding = [Text.Encoding]::UTF8
文字化け: echo あいう | clip.exe
文字化け: echo (ユニコード文字) | clip.exe
・[Console]::OutputEncoding + $OutputEncoding = [Text.Encoding]::UTF8
OK: echo あいう | clip.exe
OK: echo (ユニコード文字) | clip.exe

517:デフォルトの名無しさん
19/10/30 14:24:19.49 ecgQNQwo.net
>>495
あら、そんなことだったんだ
どうもありがとう

518:デフォルトの名無しさん
19/10/30 14:27:47.60 iT3/p0k9.net
[Console]::OutputEncoding は chcp 相当のことをしていて、
コンソールのコードページを変更しているのに対して、
$OutputEncoding は出力の文字コード変換の制御をしてるっぽい

519:デフォルトの名無しさん
19/10/30 14:46:57.29 iT3/p0k9.net
[Text.Encoding]::UTF8 じゃなくて [Text.Encoding]::Unicode を使ってもうまくいく
テキスト出力には、ASCII(?)モードとUnicodeモードというのがあるってのはわかってるんだよね
URLリンク(blog.miz-ar.info)
> Unicode mode はさらに UNICODE モード (_O_WTEXT)、UTF-8 モード (_O_U8TEXT)、
> UTF-16LE モード (_O_U16TEXT) の3つに細分できる
んで仮説
[Console]::OutputEncoding は OutputEncoding と書いているけど、
実際にはコンソールのコードページを変更するもので
コマンドプロンプトとPowerShellのプロンプト入力の文字コードも変えてしまうから
名前に反して入力にも影響を及ぼしてるんじゃないだろうか?
[Console]::OutputEncoding + $OutputEncoding = [Text.Encoding]::UTF8
というのは、つまりプロンプトからの入力をUTF8、出力をUTF8にするという意味
Powershell で文字コードを変更する(clip.exe へのリダイレクトもね)
URLリンク(www.vwnet.jp)
とかは、コンソールのコードページを変更してない=デフォルトのcp932状態で
echoしてるから入力がcp932、そしてデフォルトの$OutputEncoding=US-ASCIIで
文字化けするから(入力と同じ)cp932で出力しましょうねって話なんだと思う。
Windows 10以前は、コンソールのコードページ65001にバグが有って
使い物にならなかったけど、Windows 10で修正されたから
コードページ65001でコマンドプロンプトもPowerShellも正しく動くようになったんだと思う
(ただしこれは画面出力の問題であって、UTF8でバッチファイルを書いた時のパース処理は別の話)

520:デフォルトの名無しさん
19/11/02 13:44:45.56 +w7z2z4x.net
URLリンク(duckduckgo.com)
URLリンク(duckduckgo.com)
!you "Batch File"
!tw バッチファイル
!tw "Batch File"
!ig BatchFile
!r BatchFile
!so "Batch File"
!gnuk "Batch File"
!msd cmd
URLリンク(docs.microsoft.com)

521:デフォルトの名無しさん
19/11/02 14:20:34.65 +UvDifof.net
!hatebu バッチファイル
!qiita バッチファイル

522:デフォルトの名無しさん
19/11/03 23:33:41.85 /0rS8sv9.net
質問なのですが、以下の内容を実行するバッチプログラムを作りたいのですが、どなたかご教示頂けないでしょうか。
Cドライブにある「A、B、C、D」という4つのフォルダとサブフォルダの中身全部を、
Dドライブにある「XXXX」のフォルダの中に存在するフォルダにコピーしたいのですが、コピーする際以下の条件があります。
1.フォルダが1つしかない場合、その中だけにコピーする。
2.フォルダが複数ある場合は、それぞれのフォルダに1.と同様にコピーする。

宜しくお願いします。

523:デフォルトの名無しさん
19/11/03 23:37:03.86 Xh3slsXc.net
>>503
自分で作ってください

524:デフォルトの名無しさん
19/11/04 09:25:52.62 0uHh5Wp4.net
宜しくお願いします。と書けば誰かがやってくれるとでも?
xcopy robocopy move for if set call dir findstr
この辺使えりゃ出来るから自分で調べろ
"バッチ バックアップ" とかでググれば腐るほど例が出るだろ

525:デフォルトの名無しさん
19/11/04 13:01:25.95 Zu03xGz4.net
>>493-500
Ruby で、クリップボード内の複数行文字列の、各行の先頭・末尾から、
連続する空白類を除去して、クリップボードに入れる
str = `powershell Get-Clipboard`
str.encode! Encoding::UTF_8, Encoding::CP932 # UTF_8 へ変換
ary = str.each_line.map( &:strip ) # 連続する空白類を除去する
IO.popen( 'clip', 'w:cp932' ) do | clip | # CP932 へ戻す
clip.print( ary.join "\n" )
end
>>503
そんな複雑な条件を、バッチでプログラミングするのは無理!
Ruby などのプログラミングで、再帰的にコピーするか、
PowerShell で、robocopy を使うとか

526:デフォルトの名無しさん
19/11/04 13:46:43.19 UHaJ6Kuw.net
> Ruby で、クリップボード内の複数行文字列の、各行の先頭・末尾から、
> str = `powershell Get-Clipboard`
Rubyでできないなら、もう全部powershellで書いちゃえよw

527:506
19/11/04 15:48:40.94 Zu03xGz4.net
>>503
Ruby で作った。
FileUtils::DryRun では、実際には実行しない
require 'fileutils'
src_dirs = [ "C:/Users/Owner/Documents/A/", "C:/Users/Owner/Documents/test/B/" ]
target_dir = "D:/何々/*"
# target の子フォルダの配列
dest_dirs = Dir.glob( target_dir ).select { |path| File.directory?( path ) }
return if dest_dirs.length == 0 # フォルダが存在しない
src_dirs.each do |src_dir| # 2重ループ
dest_dirs.each do |dest_dir|
FileUtils::DryRun.cp_r( src_dir, dest_dir )
end
end

528:デフォルトの名無しさん
19/11/04 22:13:40.62 mdzUzifN.net
>>505 >>508
有難うございます。
それらでググって調べてやってみます。

529:デフォルトの名無しさん
19/11/05 12:51:32.26 3/4kxzup.net
>>509 参考にどうぞ
@echo off
set s="C:\"
set d="D:\XXXX"
cd/d %s%
for %%i in (A B C D) do call :x "%%~fi" "%%~i"
pause & exit/b
:x
pushd %d%
for /d %%j in (*) do xcopy /e /i %1 "%%~j"\%2
popd

530:デフォルトの名無しさん
19/11/05 18:52:56.56 ykrQtfUP.net
>>510
そんな複雑なことをしなくても、@echo offを除いて1行で書けるだろ。
@echo off
for %%s in (A, B, C, D) do for /d %%d in (D:\XXXX\*) do xcopy "C:\%%s" "%%d\%%s" /e /i

531:デフォルトの名無しさん
19/11/05 20:10:31.32 3/4kxzup.net
多分 %%~fd やね

532:デフォルトの名無しさん
19/11/05 20:28:07.61 ykrQtfUP.net
%%dだけでフルパスになるから~fは不要。

533:デフォルトの名無しさん
19/11/05 20:42:07.32 3/4kxzup.net
そうか失礼いたしました

534:デフォルトの名無しさん
19/11/05 20:50:46.27 kqXSHliE.net
火【22】義母と娘ブルース 11.5__11.3__12.4__12.2__13.1__13.9__15.1__15.5__17.3__19.2(終)________14.15
これはドラマ視聴率のデータですがコマンドプロンプトで値を入力していって、
その時点での相加平均値を表示してくれるバッチファイルってできますか?
INPUTを使うのかな
あと、ウィンドウを開いている間生きている変数ってファイルへの格納、取り出しって
そんな面倒なことしてるなら表計算ソフトでも使えってか


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch