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


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

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



1 名前:デフォルトの名無しさん mailto:sage [2018/11/21(水) 14:52:07.84 ID:v84I4o+L.net]
拡張子が .cmd または .bat のバッチファイルのスクリプティング(プログラミング)に関わる
質問,テクニック(JScript,Perl等の埋め込みなど含む),関連情報のためのスレです。

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

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

414 名前:デフォルトの名無しさん mailto:sage [2019/10/04(金) 05:33:06.84 ID: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 名前:デフォルトの名無しさん mailto:sage [2019/10/04(金) 06:57:13.54 ID: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 名前:デフォルトの名無しさん mailto:sage [2019/10/04(金) 08:44:14.07 ID:2Xve1BBy.net]
バッチ不要だな
Set oExec = WshShell.exec("cmd /c findstr /R . < con")
最後に1023文字しか表示されないなReadLineのせいか?

417 名前:デフォルトの名無しさん mailto:sage [2019/10/04(金) 12:18:00.19 ID: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 名前:デフォルトの名無しさん mailto:sage [2019/10/04(金) 12:44:51.20 ID:2Xve1BBy.net]
それは良かった
ところで cmd /c cmd /c と2重になってるのは何か意味が?

419 名前:デフォルトの名無しさん mailto:sage [2019/10/04(金) 12:49:02.43 ID:mgLzdBVB.net]
単なるミスですw

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

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

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



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

424 名前:デフォルトの名無しさん mailto:sage [2019/10/10(木) 19:46:16.73 ID: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 名前:デフォルトの名無しさん mailto:sage [2019/10/10(木) 23:42:47.50 ID:T8I5o9Ey.net]
mode con かも

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

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

429 名前:デフォルトの名無しさん mailto:sage [2019/10/18(金) 19:26:30.68 ID:sHZx2IDB.net]
1行目にAフォルダを削除
次の行にBフォルダを削除でいいんじゃないの?

1行に書きたければ

複数のコマンドを続けて実行する
https://www.adminweb.jp/command/action/index1.html

430 名前:デフォルトの名無しさん mailto:sage [2019/10/18(金) 19:28:12.11 ID:DNcfAKqA.net]
2回やるbatを作ればいいのでは?

431 名前:デフォルトの名無しさん mailto:sage [2019/10/18(金) 19:29:32.93 ID:DNcfAKqA.net]
あ、かぶってしまった

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



433 名前:デフォルトの名無しさん mailto:sage [2019/10/18(金) 23:57:13.31 ID:uNKAmOCu.net]
for /f %%i in ('dir /b^|find "foo"') do pause

fooが無かった場合pauseしてくれないのですが解決策ありませんか?
実際はfooの有無で分岐させるのですがとりあえずpauseで書いてます

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

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

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

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

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

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

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

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

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



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

444 名前:デフォルトの名無しさん mailto:sage [2019/10/21(月) 21:05:31.60 ID:Sv6Oxatw.net]
そう、実は、古代語魔術(ハイエンシェント)を打ち合っているのです。
スレ違いだけれど、

魔法の使い方
https://eman-physics.net/columns/magic.html

を、思い出した。

445 名前:デフォルトの名無しさん mailto:sage [2019/10/21(月) 22:05:11 ID:nEQALG6h.net]
ザイログニーモニックは忘れた

446 名前:デフォルトの名無しさん mailto:sage [2019/10/22(火) 23:09:34.31 ID:jiuE9ZBi.net]
詠唱せよ

447 名前:デフォルトの名無しさん [2019/10/27(日) 14:29:49.16 ID:Lik42TLZ.net]
cmd.exe /c start ってネットワークドライブのファイル開けないんでしたっけ?

cmd.exe /c start t:\test.txt ってやると
アクセスが拒否されました。って表示される。c:\以下なら大丈夫

cmd.exe /c start file:\\t:\test.txt ってやれば開けるからいいんだけど

448 名前:デフォルトの名無しさん mailto:sage [2019/10/27(日) 19:40:17.02 ID:n+Gkmfbl.net]
cmd /c start t:\test.txt

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

449 名前:デフォルトの名無しさん [2019/10/27(日) 19:45:47.81 ID:QHyOIS3t.net]
startが内部コマンド

450 名前:デフォルトの名無しさん mailto:sage [2019/10/27(日) 19:54:44.57 ID:n+Gkmfbl.net]
なんで cmd /c が必要?

451 名前:デフォルトの名無しさん [2019/10/27(日) 22:46:50.23 ID:8uvk7ayg.net]
>>434
ぐぐれかす

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



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

454 名前:デフォルトの名無しさん mailto:sage [2019/10/28(月) 02:10:13 ID:t0sY5Haq.net]
そんなこと聞いてないから、>>431に答えてくれ

455 名前:438 mailto:sage [2019/10/28(月) 02:18:17.09 ID:bqlyCkZ6.net]
ネットワークフォルダをドライブに割り当てた問題かと思えば
関係なさそうだ。でも不思議だ

cmd.exe /c start \\server\folder だとフォルダが開ける
cmd.exe /c start \\server\folder\subfolder でも問題ない

cmd.exe /c start \\server\folder\test.txt だとアクセスが拒否される
でもエクスプローラーのアドレスバーに ↑ を入れるとメモ帳で開ける

456 名前:デフォルトの名無しさん mailto:sage [2019/10/28(月) 03:05:07.76 ID:ML+fUsJB.net]
管理者権限でやってみては?

457 名前:438 mailto:sage [2019/10/28(月) 03:54:57.58 ID:bqlyCkZ6.net]
アクセスが拒否されました

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

459 名前:デフォルトの名無しさん mailto:sage [2019/10/28(月) 08:16:04.60 ID:kjzN6NI8.net]
>>439
>cmd.exe /c start \\server\folder\test.txt だとアクセスが拒否される
>でもエクスプローラーのアドレスバーに ↑ を入れるとメモ帳で開ける

このコマンドには、メモ帳を起動すると書いていないから、起動できないだろ

拡張子から、起動するアプリを取得できないだろ?

そういう情報は、レジストリに入っているから、
バッチファイルから、そこへアクセスできるか?

460 名前:443 mailto:sage [2019/10/28(月) 08:20:10.88 ID:kjzN6NI8.net]
普通に「notepad パス付きファイル名」なら、起動できるだろ?

461 名前:デフォルトの名無しさん mailto:sage [2019/10/29(火) 07:53:25 ID:SHkVBveq.net]
>>439
エクスプローラーのバーに書くのも cmd/c start は要らんぞ

462 名前:デフォルトの名無しさん mailto:sage [2019/10/29(火) 11:55:42.58 ID:w4Uxvw1j.net]
>>443
バッチからでも関連付け起動できるぞ



463 名前:デフォルトの名無しさん mailto:sage [2019/10/29(火) 12:51:26.56 ID: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 名前:デフォルトの名無しさん mailto:sage [2019/10/29(火) 12:53:59.00 ID:SHkVBveq.net]
ああ1行目にゴミが付いたw 無視してくれ

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

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

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

468 名前:デフォルトの名無しさん mailto:sage [2019/10/29(火) 13:37:09.01 ID:SHkVBveq.net]
16

469 名前:デフォルトの名無しさん [2019/10/29(火) 13:40:11.15 ID:spBBwL/I.net]
>>452
と思うやろ?

typeコマンドは文字コード変換してるかもしれんなと思って
copy ファイル名 CON なら、そのまんま表示されるだろうと
思ってやってみたら、

UTF-8は問題なく表示されて、UTF-16は文字化けしてるんだよ。
Windows 10で仕様でも変わったんか?

470 名前:デフォルトの名無しさん mailto:sage [2019/10/29(火) 13:47:51.80 ID:SHkVBveq.net]
変わらず
後は自分で調べろ

471 名前:デフォルトの名無しさん [2019/10/29(火) 13:53:47.92 ID:spBBwL/I.net]
わからんのかーいw

472 名前:デフォルトの名無しさん mailto:sage [2019/10/29(火) 14:01:37.87 ID:SHkVBveq.net]
図に乗るな



473 名前:デフォルトの名無しさん [2019/10/29(火) 14:15:50.84 ID: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 名前:デフォルトの名無しさん mailto:sage [2019/10/29(火) 14:23:41.56 ID:SHkVBveq.net]
そうなのか
でも内部が16だと思うが
分からん

475 名前:デフォルトの名無しさん [2019/10/29(火) 14:27:54.02 ID:spBBwL/I.net]
Windows 7でもdirコマンドでShiftJISにない文字は表示できてるから
最終的にはUnicodeなんだろう(おそらくUTF16だと思うが)
その途中になんかあるんだろうな。

Windows 10でcopy CONつかってるのに、UTF-8とUTF-16の両方が
文字化けしないのが不思議だ・・・って思ったら、
あれ?UTF-16文字化けしてた。んん?間違ってtypeで表示してたか。
これなら理解できる。

476 名前:デフォルトの名無しさん mailto:sage [2019/10/29(火) 14:44:03.37 ID:XkpxJQc3.net]
>>457
いつのWindows10だね?

477 名前:デフォルトの名無しさん [2019/10/29(火) 14:52:33.20 ID:spBBwL/I.net]
>>460
今の最新の公式リリース

478 名前:デフォルトの名無しさん [2019/10/29(火) 14:56:43.68 ID:spBBwL/I.net]
なんかわかりづらくなったので再掲

copy test.txt CONで検証

Windows7、chcp 932・・・text.txt が ShiftJIS だと正しく表示される
Windows10、chcp 932・・・text.txt が UTF-8(BOMなし) だと正しく表示される

479 名前:デフォルトの名無しさん mailto:sage [2019/10/29(火) 16:52:33.42 ID: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 名前:デフォルトの名無しさん mailto:sage [2019/10/29(火) 17:46:22.44 ID:4a4kNF+Q.net]
一つわかった気がする。

コマンドプロンプトはUnicode対応してるけどバッチファイルはUnicode対応じゃないんだ。
(正確にはchcp 65001を実行すれば、UTF-8のバッチファイルを実行できる)

だからchcp 932のままコマンドプロンプトでUnicode文字を使うことができるけど
バッチファイルにするとそれができない。

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

482 名前:デフォルトの名無しさん mailto:sage [2019/10/29(火) 18:03:33.66 ID:4a4kNF+Q.net]
あ、copyに/bオプションなんてあったのか・・・



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

484 名前:デフォルトの名無しさん mailto:sage [2019/10/29(火) 18:37:30.30 ID:tLCpEMn0.net]
Windows10については徐々に更新されているらしい

Windows Command-Line: Unicode and UTF-8 Output Text Buffer
https://devblogs.microsoft.com/commandline/windows-command-line-unicode-and-utf-8-output-text-buffer/

485 名前:デフォルトの名無しさん mailto:sage [2019/10/29(火) 19:04:08.72 ID:SHkVBveq.net]
少し前にここ

486 名前:ナ同様の話題が有ったが UTF-8(BOM無し) のテキストは
たとえ chcp 65001 しても type で一部分文字化けする

findstr ^^ foo.txt

で正常に表示されるはず(chcp 65001 で)
[]
[ここ壊れてます]

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

488 名前:デフォルトの名無しさん [2019/10/29(火) 20:31:39.34 ID: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 名前:デフォルトの名無しさん mailto:sage [2019/10/29(火) 20:34:10.83 ID:ltL5L5Cn.net]
コマンドプロンプトを起動するのは2の時の間違いな

490 名前:デフォルトの名無しさん mailto:sage [2019/10/29(火) 20:38:52.72 ID:ltL5L5Cn.net]
この話から気づくと思うけど、

powershell -Command [Console]::OutputEncoding
初期状態は、日本語 (シフト JIS)

powershell -Command [Console]::OutputEncoding = [Text.Encoding]::UTF8
これでUTF-8に変更して

powershell -Command [Console]::OutputEncoding
現在の設定を確認すると、UTF-8になってる。

chcpの値は変わらんのに、コードページを変えることができてしまっているかのようだ。

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

492 名前:デフォルトの名無しさん mailto:sage [2019/10/29(火) 21:41:58.40 ID:ltL5L5Cn.net]
なるほど、SetConsoleOutputCPでコマンドプロンプトのコードページを変更できるらしい

tooljp.com/language/C-Languate/sample-code/SetConsoleOutputCP-sample-code.html



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

494 名前:デフォルトの名無しさん mailto:sage [2019/10/30(水) 08:50:12.52 ID:BvOaIOcB.net]
エディタがあれば必要ない

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

496 名前:デフォルトの名無しさん mailto:sage [2019/10/30(水) 11:25:55.22 ID:iT3/p0k9.net]
Windows 7でこれが文字化けせずに動いた
chcpで画面はクリアされるが、正しく出力される。

↓UTF8 + CRLFで作成

@echo off
chcp 65001
set A=ユニコード文字
chcp 932
echo %A%

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

498 名前:デフォルトの名無しさん mailto:sage [2019/10/30(水) 12:11:59.20 ID:n2bLSC2q.net]
chcp 65001 にしてもcmd /u で開き直さなきゃバグるんじゃない?

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

500 名前:デフォルトの名無しさん mailto:sage [2019/10/30(水) 12:27:14.70 ID: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 名前:デフォルトの名無しさん mailto:sage [2019/10/30(水) 12:29:13.59 ID:iT3/p0k9.net]
ちなみに >>483 はchcp65001した状態でバッチファイルを実行すれば
バッチファイルの中でchcpせずに動く

あとファイルの文字コードはUTF8な



503 名前:デフォルトの名無しさん mailto:sage [2019/10/30(水) 12:32:44.17 ID:iT3/p0k9.net]
>>482
そうとは限らない。

chcpはどうやら内部でSetConsoleOutputCPを呼び出してるんだろうけど

SetConsoleOutputCPっていうのはConsole APIの一つで、
コマンドプロンプトのコードページを変更する。

このAPIは子プロセスから親プロセスをたどって見つけた
コンソール(コマンドプロンプト)のコードページを変更できる。

ハンドルのモードは関係なく、コンソールのコードページの話

504 名前:デフォルトの名無しさん mailto:sage [2019/10/30(水) 12:38:00.67 ID:iT3/p0k9.net]
>>252の改良でこれならうまく動くんだよな
ダブルクォートはいるけど。
あとecho あああa みたいに最後をASCII文字にしても動く

@echo off
chcp 65001
if "hoge"=="hoge" (
echo "あああ"
echo "いいい"
)

505 名前:デフォルトの名無しさん mailto:sage [2019/10/30(水) 12:45:45.44 ID:iT3/p0k9.net]
こうすりゃいいのかw

@echo off
chcp 65001
if "hoge"=="hoge" (
call :echo "あああ"
call :echo "いいい"
)

exit /b

:echo
echo %~1

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

507 名前:デフォルトの名無しさん mailto:sage [2019/10/30(水) 13:25:11.54 ID: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 名前:デフォルトの名無しさん mailto:sage [2019/10/30(水) 13:41:42.20 ID:zJjGNXoj.net]
それは
>これは、$OutputEncoding が Default だと US-ASCII になっているので、S-JIS 文字列を渡そうとしてもリダイレクト時に日本語がうまく扱えないからです。
>結論から言うと、$OutputEncoding を S-JIS に変更して clip.exe にリダイレクトすれば文字化けしません。
これが関係するのかな?

509 名前:デフォルトの名無しさん mailto:sage [2019/10/30(水) 13:53:29.35 ID: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 名前:デフォルトの名無しさん mailto:sage [2019/10/30(水) 13:53:40.11 ID:iT3/p0k9.net]
どこの記事だよw まあググったが。
https://www.vwnet.jp/Windows/PowerShell/CharCode.htm

511 名前:デフォルトの名無しさん mailto:sage [2019/10/30(水) 14:08:53.46 ID: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 名前:デフォルトの名無しさん mailto:sage [2019/10/30(水) 14:13:56.47 ID:iT3/p0k9.net]
ここはPowerShellのスレじゃないんだがw

$OutputEncoding と [Console]::$OutputEncoding は別もんなんか!?
[Console]は[Console]::WriteLine とか使うときだけかな?



513 名前:デフォルトの名無しさん mailto:sage [2019/10/30(水) 14:16:01.69 ID:n2bLSC2q.net]
>>491
"usebackq delims="

514 名前:デフォルトの名無しさん mailto:sage [2019/10/30(水) 14:21:07.12 ID:iT3/p0k9.net]
[Console]::OutputEncoding と $OutputEncoding の







[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<294KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef