【.cmd】 バッチファイルスクリプト %13 【.bat】at TECH
【.cmd】 バッチファイルスクリプト %13 【.bat】 - 暇つぶし2ch350:デフォルトの名無しさん
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を使うのかな
あと、ウィンドウを開いている間生きている変数ってファイルへの格納、取り出しって
そんな面倒なことしてるなら表計算ソフトでも使えってか

535:デフォルトの名無しさん
19/11/05 21:30:33.42 HPnxYMOW.net
>>515
出来なくはないけれど set /a では整数しか扱えずバッチのみでやるのは面倒
やるならPowerShell とか wsh, js かな
単に平均出すだけなら電卓アプリの方が楽

536:デフォルトの名無しさん
19/11/05 22:38:05.69 aoMnc07l.net
Dim str
str =""
Dim num
Dim ans
Dim bln_Confirm
Function main()
str = InputBox("数値を入力",,str)
If instr(str,"_") Then
ans = Eval("(" & Replace(str,"_","+") & ")/" & UBound(split(str,"_"))+1)
else
ans = Eval(str)
End If
bln_Confirm = MsgBox("入力数値:" & str & vblf & vblf & "入力の平均:" & ans,3,"続ける?")
str = str & "_"
End Function
Do
main
Loop While bln_Confirm = vbYes
VBSならこうかな?

537:デフォルトの名無しさん
19/11/06 01:50:43.91 ZR40S1lI.net
Ruby で作った。
最後の(終) の部分は、数字とみなされないので、無視される
str = "11.5__11.3__12.4__12.2__13.1__13.9__15.1__15.5__17.3__19.2(終)"
ary = str.split( "__" ) # 数字部分を配列に入れる
ary.map!( &:to_f ) # 文字列を浮動小数点へ変換する
p ary.inject( :+ ) / ary.length # 合計 / 要素数

538:デフォルトの名無しさん
19/11/06 03:37:02 sEBZ5Hrs.net
スレタイも読めないメクラか?
ドヤりたいなら該当スレへ逝け

539:デフォルトの名無しさん
19/11/06 15:19:13.85 Z1XrM+Fl.net
:ALCL
@echo off &setlocal enabledelayedexpansion
echo 少数切り捨て。少数以下は求めたい桁数まで0埋めして入力
echo 少数2位まで求めたい場合 ex: 12.4 -^> 1240
echo 00で Clear, 000で AllClear
set i=
:LOOP
set /a i+=1
:INPUT
set /p N%i%=数値を入力 :
echo !N%i%!|findstr /r /c:"[^0-9]" && (echo 入力無効 &goto :INPUT)
if !N%i%!==000 goto :ALCL
if !N%i%!==00 (
if %i% leq 2 goto :ALCL
if %i% gtr 2 set /a i-=2
)
set s=
set r=
for /l %%a in (1,1,%i%) do (
set s=!s! !N%%a!
set /a r+=!N%%a!
)
set /a r/=%i%
echo %s% : %r%
goto :LOOP

540:デフォルトの名無しさん
19/11/06 15:48:22.56 Z1XrM+Fl.net
set /p N%i%=数値を入力 :
if not defined N%i% (echo 入力無効 &goto :INPUT)
echo !N%i%!|findstr /r /c:"[^0-9]" && (echo 入力無効 &goto :INPUT)
上のに真ん中の行追加で

541:デフォルトの名無しさん
19/11/06 20:50:16.92 wTTuQQRz.net
バッチファイルは難しすぎ!
引数の概念がLinuxと全く違う

542:デフォルトの名無しさん
19/11/06 23:04:29.95 wTTuQQRz.net
空白が入ったパスをバッチファイルにわたすために
ダブルクォートで括らないといけないが、
それをやると、変数にダブルクォートが入るのがクソなんだな
しかも、if "%1" == "" とか書くと、引数がダブルクォート
一個だったときにエラーが出るとかいろいろ破綻してる

543:デフォルトの名無しさん
19/11/07 01:48:00 4r3ojeSB.net
>>522
難しすぎというよりは適当仕様すぎ
仕様を安易に何回も拡張した、増築して迷路化した老舗旅館

544:デフォルトの名無しさん
19/11/07 04:42:48.88 nSoHFrko.net
>>511
@for %%s 以下略じゃダメなの?

545:デフォルトの名無しさん
19/11/07 06:29:37.44 lb8cogBR.net
>>525
それならdoの後のforとxcopyにも@付けろ
何でも一行にすりゃいいわけじゃないがな

546:デフォルトの名無しさん
19/11/07 06:59:41.26 LFqMQC4+.net
>>523
%~1で外せるでしょ?

547:デフォルトの名無しさん
19/11/07 07:54:19.69 isVFtAa0.net
>>520さんありがとうございます
”これこそが私の求めていたものだ”
そんな慣用句?ローマの名文句?ってあったっけと思ってしまいますた。
000と00の入力処理で使いやすくなっているのがセンスというか実際の使用を考えた親切な仕様だなと思います。
訂正できるのは本当に便利だ。
VBSとRubyで書いてくださった>>517さんと>>518さんにも感謝。
自分の要求仕様がどう解釈・解決されるの


548:か勉強になります。



549:デフォルトの名無しさん
19/11/07 09:58:22.71 d6TMJd25.net
>>528
冗談で書いたんだが。。これなら同様のアプリ探した方がいいんじゃない?
あと以下修正、>>521部分も含む
:INPUT
set N%i%=
set /p N%i%=数値を入力 :
if not defined N%i% (echo 入力無効 &goto :INPUT)
echo !N%i%!|findstr /r /c:"[^0-9]" && (echo 入力無効 &goto :INPUT)
Clear後に空入力繰り返すと消したのが戻ってまたClearしてと繰り返す挙動が直る
実害無いだろうから敢えてそのままにするのも有り
既存の環境変数に set /p で空入力しても 空で上書き初期化されずそのまま残るみたい

550:デフォルトの名無しさん
19/11/07 10:37:33.42 sEmiRyTj.net
>>527
どこ見てもその程度。みんな適当なんだよな。
まず最初に書いた例から。バッチファイル(test.bat)を
1.このように書いた時
if "%1" == "" echo 引数なし
> test.bat "
コマンドの構文が誤っています。
2.このように書いた時
if "%~1" == "" echo 引数なし
> test.bat "
引数なし
※↑間違い。「"」という引数があります。
3. このように書いた時
if %~1 == "" echo 引数なし
> test.bat "
echo の使い方が誤っています。

551:デフォルトの名無しさん
19/11/07 12:19:13.92 Z6Qb1qTa.net
Windowsバッチの仕様がダメダメというのはそのとおりだが、
引数が " だけというのは、かなり特殊な想定だよな。
これが大丈夫という言語ってあるのか?
この場合とは違うが、外部アプリから""でくくったパスなどを渡してもらうときは、
アプリの方で、\"~\"で吐き出すように設定して、
バッチファイルで、この\を削除するようにすることで、
引数展開でおかしな動作をさせないようにしている。
e.g. fxのOpenWithアドオンなど

552:デフォルトの名無しさん
19/11/07 12:32:04.92 sEmiRyTj.net
>>531
言語関係ない。コマンドプロンプトの仕様だから
例えばechoでダブルクォートだけを出力したいなら
echo " と書くしか無い。
PowerShellとかコマンドプロンプトを使わないなら
閉じてないダブルクォートの扱いを変えることは可能だが、
コマンドプロンプトはもうどうしようもないw
そしてこれ(もともとはMS-DOSの仕様)を前提に
Windows版のC言語とかのCRTライブラリが作られ、
mainに渡る前に、そういう文字列を解釈するようになってる。

553:デフォルトの名無しさん
19/11/07 12:33:31.15 sEmiRyTj.net
> この場合とは違うが、外部アプリから""でくくったパスなどを渡してもらうときは、
> アプリの方で、\"~\"で吐き出すように設定して、
いきあたりばったりなんだよなw
本当にここらへんの奴らは適当

554:デフォルトの名無しさん
19/11/07 12:40:37.56 sEmiRyTj.net
URLリンク(thinca.hate)
nablog.com/entry/20100210/1265813598
\ は、
ダブルクォートの内外を問わず、" の前に \ を前置すると " 自身を表現できる。
\\" とすると \" の \ をエスケープしたことになり、 \" になる。この " は特殊文字である。
\\\" とすると \\ + \" になり、 \" になる。この " は " 文字自身である。
以下、\ が増える度に上記のようなエスケープを繰り返す。
\\\\" → \\" (" は特殊文字)
\\\\\" → \\" (" は通常文字)
上記以外の場所にある \、つまり後に " が続かない \ は、いくつ重なっていてもその文字自身になる。

555:デフォルトの名無しさん
19/11/07 12:53:05.11 LDERshfw.net
>>528
バッチ/シェルスクリプトは、複雑なプログラミングをするものじゃない!
Ruby, PowerShell, VBScript などを使うべき
まず、データの仕様を作るべき。
その程度のデータなら、普通は、CSV 形式とか
1. どこかのサイトから、データの集積物を取得する
2. それをパースして、CSV 形式に変換する
一旦、CSV へ変換すれば、
その後は、Rubyなど、様々なプログラミング言語で処理できる
1の部分は、Ruby, Selenium WebDriver などで、クローラー・スクレイピングも出来る

556:デフォルトの名無しさん
19/11/07 12:58:16.29 lb8cogBR.net
>>531
まったくスレチだけどG


557:nuPGのパスワードを思い出した 引用符だけのパスワードを渡す場合は pass " >gpg -c --passphrase ^""" hoge.txt pass "" >gpg -c --passphrase """""" hoge.txt pass """ >gpg -c --passphrase ^""""""""" hoge.txt 何でこうなるかは知らんがGnuPGだけの話さ コマンド側でどう引数処理するかだよな バッチでは普通ダメだね



558:デフォルトの名無しさん
19/11/07 13:04:39.19 sEmiRyTj.net
ダブルクォートを"""と3個やっても動かないときは、
"""" に増やして動くか
""""" に増やして動くか
""""" に増やして動くか
これぐらいまで試す
あるある

559:デフォルトの名無しさん
19/11/07 13:26:56.23 Z6Qb1qTa.net
>>536
クォートの先頭にエスケープが必要な場合でも、
後ろの方は何故かエスケープが不要なことがあるんだよな。
*nix系から移植したプログラムで、こういう事がたまに起きる。
いずれにしても、謎仕様…

560:デフォルトの名無しさん
19/11/08 05:39:07.91 78hADO4V.net
set x=echo
%x% qqq
set a=y
set %a%=3
echo %y%
どちらもできた

561:デフォルトの名無しさん
19/11/09 12:37:18.78 9Z+ynpem.net
もう無理だw
if "%value%" == "" echo match
こんな感じのコードで、%value% にどんな文字
(ダブルクオート、スペース、カンマ、その他記号)が
入っていてもエラーにならないというコードを
バッチファイルで書くのは不可能だw
お手上げ\(-o-)/

562:デフォルトの名無しさん
19/11/09 12:55:41.49 hmJLHo7y.net
IF NOT DEFINED VALUE

563:デフォルトの名無しさん
19/11/09 13:02:21.70 9HGwW/1Y.net
>>541
あ、ごめん。実際は右側、値が入ってる。
if "%value%" == "abc" echo match

564:デフォルトの名無しさん
19/11/09 13:03:25.05 hmJLHo7y.net
setlocal enabledelayedexpansion
if "!value!"=="abc" echo match
endlocal

565:デフォルトの名無しさん
19/11/09 13:14:34.88 9HGwW/1Y.net
あれ?マジで?それだけでいけちゃうの?

566:デフォルトの名無しさん
19/11/09 13:22:47.16 hmJLHo7y.net
これな、"abc"の方が要注意なんよ
^とか!とか入ってるとやばいかも
setlocalの前に代入して
if !a!==!b! とかやった方がええかもな

567:デフォルトの名無しさん
19/11/09 13:53:03.27 9HGwW/1Y.net
>>545
右側、固定値なら大丈夫だよね?

568:デフォルトの名無しさん
19/11/09 14:00:20.08 hmJLHo7y.net
うん多分、変な文字入って無けりゃね
遅延モードだと全角文字のリテラルにも一部副作用が有るかも

569:デフォルトの名無しさん
19/11/09 14:07:53.35 9HGwW/1Y.net
なんだよ、全角文字の副作用って・・・
せっかく進んだのにw

570:デフォルトの名無しさん
19/11/09 14:15:55.11 hmJLHo7y.net
setlocalの外で代入すりゃ問題ない
遅延の中では書くな
あと、if !a!==!b! に " はたぶん不要

571:デフォルトの名無しさん
19/11/09 14:26:55.47 9HGwW/1Y.net
setlocalの中で代入するとなにか問題があるのか・・・

572:デフォルトの名無しさん
19/11/09 14:37:46.76 hmJLHo7y.net
ええと
setlocal enabledelayedexpansion ~ endlocal の中だよ

573:デフォルトの名無しさん
19/11/09 15:15:35.38 hmJLHo7y.net
>>550
すまん。おれの勘違いだった
全角文字は関係無かった。無視してください
でも^や!は要注意だけど

574:デフォルトの名無しさん
19/11/09 17:06:16.41 hmJLHo7y.net
でもif文自体が挙動不審だからなあ
if "ーー"=="""" echo 同じ

575:デフォルトの名無しさん
19/11/09 20:49:07.09 9HGwW/1Y.net
>>553
ShiftJISだとだめだけど、バッチファイルをUTF8で保存したら大丈だったよ!
ただし、それでも引数で渡すとダメだったけどwww

576:デフォルトの名無しさん
19/11/09 20:57:33.36 9HGwW/1Y.net
>>553
それも enabledelayedexpansion 使えば大丈夫じゃない?
setlocal enabledelayedexpansion
set A=%1
if !A! == "" echo 同じ

もうやだこの言語(?)

577:デフォルトの名無しさん
19/11/09 21:14:31.85 9HGwW/1Y.net
@echo off
echo %1
call :LABEL %1
exit /b
:LABEL
echo %*

> test.bat a
a
a
 これが普通
> test.bat ^^
call :LABEL exit /b
ECHO は <OFF> です。
 頭痛いけどなんとなく理解できる
> test.bat "^"
"^"
"^^"
 なんで^増えてんだよwww

578:デフォルトの名無しさん
19/11/09 21:24:41.89 9HGwW/1Y.net
@echo off
setlocal enabledelayedexpansion
echo %1
set A=%1
call :LABEL "%A%"
call :LABEL !A!
call :LABEL "!A!"
exit /b
:LABEL
echo %1
> test.bat "^"
"^"
""""
"^^"
""""
もう意味がわかんないw
これ人間が制御できるものなんか?

579:デフォルトの名無しさん
19/11/10 09:44:25.06 fP398yW4.net
setlocal enabledelayedexpansion は >>540対策で使えるけど、
それ以外はもっと制御が難しいかも・・・
基本は通常のsetlocalで比較のときだけ
部分的に使ったほうが良さそう
今回は頑張ったけど、もうやらない。

580:デフォルトの名無しさん
19/11/10 15:37:42.63 noq81T2Q.net
スレ伸びてると思ったらほぼ ID:9HGwW/1Y だったでござる

581:デフォルトの名無しさん
19/11/10 20:23:39.65 u8+xJCBj.net
for in って for %%i in (*) みたいにワイルドカードが含まれていればファイルを検索する機能で
for %%i in (a b c) みたいにワイルドカードが含まれてない場合は
ファイルがあるなしに関係なく、a、b、cを繰り返す機能ってことであってますか?

582:デフォルトの名無しさん
19/11/14 15:51:47.87 MT98n7t2.net
多重フォルダの中身を
一番上のフォルダにまとめるスクリプトってどうやるの?
できればフォルダをドラッグ&ドロップしたいんだけど

583:デフォルトの名無しさん
19/11/14 21:52:50.32 ah6E9oLX.net
>>561
for /r %1 %%i in (*) do move "%%i" \

584:デフォルトの名無しさん
19/11/18 20:56:52.03 /+k2TWLn.net
なんかこんなバッチファイルがあったけどうまく動かない
for /f "usebackq tokens=1" %%A in (`tasklist /fi "imagename eq SKRWATCH*" /fo "table" /nh`) do
if "SKRWATCH.EXE"=="%%A" (echo %%A & exit) else (START /D C:\Users\user1\Downloads\skrw021 SKRWATCH)

585:デフォルトの名無しさん
19/11/18 21:18:40.00 45qFz0UJ.net
>>563
うまく動かないでは状況が不明(エラーxxxが表示とか具体的に)
・tasklistは動くのか?(tasklist /?)
・そのままコピペしてるのなら動かなくて当然
 (doの前に全角空白があるし、doの後も改行されてる
  起動するパスがexeと空白で区切られてるがタイプミスか)
・対象はそのEXEで間違いないのか、パスに間違いはないか

586:デフォルトの名無しさん
19/11/18 21:26:40.79 45qFz0UJ.net
>起動するパスがexeと空白で区切られてるがタイプミスか
これはフォルダ指定だから記述に問題はなかったね

587:デフォルトの名無しさん
19/11/19 00:58:21.49 f1OS2g5Q.net
>問題はなかったね
問題あるから動かねーんだろwwバカじゃね?
いきなりバッチじゃなくてプロンプトでコマンドひとつひとつ動作するか確認してみろやボケ

588:デフォルトの名無しさん
19/11/19 03:01:51 DFw2Dz+B.net
pause & exit
コンソール入力で起動なら exit/b

589:デフォルトの名無しさん
19/11/20 12:24:50.17 2S7bcPNj.net
テキストファイルの[version]ってタグの上に任意の文字列を追記したいんですけどなにかいい方法ありませんかね?
↓なイメージです
key = value
[version]

590:デフォルトの名無しさん
19/11/20 13:04:27.56 Tu0gcZfO.net
batじゃしらんけどperlかawk使えるスクリプトのほうが簡単だと思う

591:デフォルトの名無しさん
19/11/20 13:53:46.39 xBPN5HFi.net
エディタでの置換じゃ無理な処理数なん?
batで文字列操作は事故の元
JSかP


592:Sでも使えば?



593:デフォルトの名無しさん
19/11/20 17:43:27.76 jZ8vbKIX.net
>>569
>>570
やりたいことはローカルセキュリティーポリシーテンプレートを書き換えたいんですよ
seceditってコマンド使うんですけどその書き換えの部分を自動化したいんです
因みにPSでは使えないです

594:デフォルトの名無しさん
19/11/20 19:20:58.96 Tu0gcZfO.net
これでいけないかな
URLリンク(qiita.com)

595:デフォルトの名無しさん
19/11/20 19:53:19.75 p2TBD6cq.net
一行ずつぐるぐる回しながら表示して
[version]だったら、その表示の前に追加すればいいだけじゃん

596:デフォルトの名無しさん
19/11/21 09:08:09.78 YDFq+t9K.net
いいやPS使ってもらう

597:デフォルトの名無しさん
19/11/21 10:25:48.48 Wg+WlOX1.net
ファイルを一行ずつ読み込んで出力する処理に
ちょこっと手を加えるだけだから簡単だな

598:デフォルトの名無しさん
19/11/21 11:16:31.45 LvODftpp.net
簡単だったら早く教えろよな
キレちゃうぞこのやろう

599:デフォルトの名無しさん
19/11/21 11:47:37.77 xinrmZtD.net
PSで簡単にできたからもういいわ

600:デフォルトの名無しさん
19/11/21 12:46:53.45 7xPdmDWo.net
>>572
行頭が数字なのにeolの指示は無意味
delimsを数字にしないとまずいし
他人のバッチを鵜呑みにして理解していないバッチ

601:デフォルトの名無しさん
19/11/21 15:03:03.19 8WRatKwZ.net
EUCテキストだから、ファイル名をそのままfindstrに突っ込むのは無理だな

602:デフォルトの名無しさん
19/11/21 16:04:24.91 7xPdmDWo.net
>>579 これでどうかな?
@echo off
chcp 20932
set s="%~1"
set "a=key = value"
set "b=[version]"
call :x > "%~2"
goto :eof
:x
for /f "delims=" %%i in ('findstr /n "^" %s%') do (
set c=%%i
setlocal enabledelayedexpansion
set d=!c:*:=!
if /i !d!==!b! echo.!a!
echo.!d!
endlocal)

603:デフォルトの名無しさん
19/11/21 16:15:57.27 7xPdmDWo.net
>>580 を実行前は chcp 932

604:デフォルトの名無しさん
19/11/21 20:46:01.60 8WRatKwZ.net
EUCじゃなくてUnicode(UTF16)だった

605:デフォルトの名無しさん
19/11/21 22:34:33.13 2C4HvUZs.net
コード変換ソフトがないと、無理かな。

606:デフォルトの名無しさん
19/11/21 22:42:46.40 8WRatKwZ.net
いやfindstrにファイル名渡さないようにすればそれでいい
'type %s%^|findstr /n ^^'
cmd /u /c hoge.bat in.txt out.txt

607:デフォルトの名無しさん
19/11/21 22:47:11.20 8WRatKwZ.net
^^じゃダメだった
^^^^か"^"だね

608:デフォルトの名無しさん
19/11/21 23:14:31.55 t93OqxgW.net
>>568
Ruby で作った
text = <<"EOT"
[version]
a
[version]
EOT
re = /^\[version\]$/
text.gsub!( re ) { |matched| "key = value\n#{ matched }" } # 置換
puts text
出力
key = value
[version]
a
key = value
[version]

609:デフォルトの名無しさん
19/11/21 23:21:01.84 8WRatKwZ.net
ただBOMが付かないね
BOMが無いと使えないかどうかは怖いので試してない

610:デフォルトの名無しさん
19/11/22 00:14:32.18 UfmR8W/F.net
>>587
@echo off & if "%~1"==":x" goto x
set "a=key = value" & set "b=[version]" & set s="%~1"
chcp 65000 > nul
cmd/u/c "set/p a=+/v8-<nul"> "%~2"
chcp 932 > nul
cmd/u/c "%~0" :x >> "%~2" & goto :eof
:x
for /f "delims=" %%i in ('type %s% ^| findstr/n/r .*') do (set c=%%i
setlocal enabledelayedexpansion
set d=!c:*:=!& if /i !d!==!b! echo.!a!
echo.!d!
endlocal)

611:デフォルトの名無しさん
19/11/22 00:20:53.00 UfmR8W/F.net
>>588
あらかじめbom付き空テキスト用意しておけば
もっと簡単なバッチになるけどね

612:デフォルトの名無しさん
19/11/22 02:00:26 iZoP+Nd2.net
FINDSTR: // は無視されました。

/n /rとするか、/nだけにするか

613:デフォルトの名無しさん
19/11/22 02:02:44 iZoP+Nd2.net
/nrで良いか

614:デフォルトの名無しさん
19/11/22 02:47:17 UfmR8W/F.net
そうだ


615:な。直ぐ消えるので気付かなかった 動作はするようだが スペース入れた方が無難だね



616:デフォルトの名無しさん
19/11/22 08:47:38.56 wKGQ5j7v.net
rubyきちがいきてるね

617:デフォルトの名無しさん
19/11/22 09:49:43.81 VuiommTl.net
無視無視

618:デフォルトの名無しさん
19/11/22 12:09:43.22 f2CG40En.net
point of no return

619:デフォルトの名無しさん
19/11/23 16:13:10.37 x4sN5Hm0.net
質問した人は登場しないね
ひょっとして>>577が最後?

620:デフォルトの名無しさん
19/11/23 16:50:58.80 xep2e/TT.net
awkが手軽で楽そうだがユニコードできたっけ?

621:デフォルトの名無しさん
19/11/25 13:59:48.96 6F6igyhI.net
WindowsならPSで良いだろ
文字コードもドトネトで扱える範囲で指定できるし

622:デフォルトの名無しさん
19/11/26 10:19:19 NW9y+uW0.net
用途:エクセルにある複数の画像URLを、指定したフォルダにDLさせたい
コマンドでやりたい理由:
ダウンロードソフトは一つのフォルダに全部DLするか、
一つのURLを開いてから一つづつDL先を指定するか、
URLをフォルダ構造に分解して保存するからDL後探すのが面倒で嫌
DownloadThemALLとか、DL雨とか、Tab Saveとか、Image Downloader…
全部ダメ;

bitsadmin /transfer [name] [URL][DL path]
bitsadmin /transfer [name] [URL][DL path]
bitsadmin /transfer [name] [URL][DL path]
…こんな風に並べて書いたところ、リストの最後らへんの二つぐらいを除いて
PRIORITY:NORMAL FILES:1/1 BYTES:0/0 (0%)
Transfer complete.

でDL開始する前に次の行にいってしまうようです。しかも0バイトの指定したファイルを作ってしまいますw
MS見ると複数やるなら1行に続けろとあるので
bitsadmin /transfer [name] [URL] [DL path] [name2] [URL2][DL path2]
としたが状況変わらず。

どうしたらいいでしょうか。timeoutでは変わりませんでした。

623:デフォルトの名無しさん
19/11/26 10:20:48 NW9y+uW0.net
>並べて書いた
batファイルにしてからダブクリのため

624:デフォルトの名無しさん
19/11/26 12:23:55 ImxGWCjG.net
httpのみでhttps未対応だしリファラやUA見られてても落ちないと思う
ダウンローダーはその辺勝手にやってくれてるんだよ
取り敢えずこれ真似してforでlist読んでやってみれば?
URLリンク(automationlabo.com)

625:デフォルトの名無しさん
19/11/26 12:32:29.83 NW9y+uW0.net
>>601
ありがとう、そこのサイトみてやってるんだ
ちなみに今はHTTPS対応してるようで
URLリンク(maku77.github.io)
URLリンク(qiita.com)
一件づつコピペだったらできるんだ
ダウンローダーについては気軽にスレで聞いてるけど、
画像ごとにフォルダを指定して一気に保存ができるものはないみたい
昔懐かしいirvineができる的な噂見てやってみたけど、フォルダ指定ができないorz

626:デフォルトの名無しさん
19/11/26 13:46:11 ISv3uuWx.net
しらんけど
前の行の処理が完了する前に次の物が始まるのがまずいなら
Call でいんじゃないの?

627:デフォルトの名無しさん
19/11/26 14:15:56.61 ImxGWCjG.net
call または start "" /wait コマンド

628:デフォルトの名無しさん
19/11/26 14:16:12.39 JyI6kWkc.net
特定に箇所にダウンロードして、ダウンロードが終わったら移動するんじゃダメなの?
なんでダウンロードするアプリにフォルダ指定の機能まで期待するんだろう
頭硬いのかな

629:デフォルトの名無しさん
19/11/26 14:22:21.16 Rh/VLF1h.net
bitsadmin の代わりに cURL を試してみては

630:デフォルトの名無しさん
19/11/26 14:40:23.78 jwtMC5+Q


631:.net



632:デフォルトの名無しさん
19/11/26 14:41:21.48 ISv3uuWx.net
たしかにそれぞれのファイルのフォルダ指定をすること自体がめんどくさそう
ダウンロードフォルダにその人が望む各保存先フォルダのショートカットおいてまとめて突っ込む方が楽そう

633:デフォルトの名無しさん
19/11/26 14:51:14 NW9y+uW0.net
pushd %~dp0
for /f "tokens=1-3" %%A in (list.txt) do (
bitsadmin /TRANSFER FILEDOWNLOAD %%B %~dp0\%%A\%%C
)
echo
listの内容
[dir] [url] [ファイル名]

ダメでした…%%Aで留めれば行けるけど、他のフォルダにいれたいやつを上書きしちゃう
curl…Linuxコマンドだと思ってスルーしていたけど調べてみます。thx

>>605
100も200もあるURLごとのフォルダからぽちぽち移動できるもんならやればいいよ
DownloadThemALLとか、古いFirefoxでしか動かんけどScrapbookとか、あなたが
言うような奴ならごまんとある。
私はそれはやってられんから他の方法探してます。
hogehoge.jp/moemoechan/hogenull/img/image/hoge-hoge-hoge-hoget.jpg
というURLをそのままフォルダにされても、今回の場合は探し出すのが大変なんだよ、
ファイルに行くまでに何回クリックいる?×100だよやりたいならどうぞ私は嫌ですw
(単なるスクラップならせいぜい1サイトくらいだからむしろそれでいい)

つか、あなたのそのやり方やるぐらいなら、URLのリストをいっこづつコピペで
開いてブラウザから保存したいフォルダにD&Dしたほうが何十倍も速いぞたぶん。
だってDLしたあとで探す手間いらないですよね?

634:デフォルトの名無しさん
19/11/26 14:55:31 JyI6kWkc.net
>>609
>だってDLしたあとで探す手間いらないですよね?

なにを探すの?
空のディレクトリに一個だけダウンロードしたらmoveするだけじゃん
しかもダウンロードするファイル名分かってるんだろ?
まとめてダウンロードしてからでも人間が探す必要なんかないじゃん
ダウンロードディレクトリにあるんだから
脳みそ足りて無くない?

635:デフォルトの名無しさん
19/11/26 14:59:19 NW9y+uW0.net
>>607
!!
調べてみます!

まあそりゃねぇ
管理ナンバー URLっていう100個のリストにある画像集める必要があって
素直にそのURLをブラウザで開いてD&Dもしてましたよ…けど開いてる時間すら
面倒になってきまして…
ダウンローダーいろいろ探したけど、ブラウザのダウンロードフォルダ固定とか
ダウンロードする画像ごとにフォルダ指定しろダイアログとか、そーじゃねーよとw
もうそのいちいちダイアログがうぜえwでも振り分けずぜんぶいっしょくたも困る。
で、GoogleスプレッドでIMPORTXMLで画像リスト出していまここって感じ。
599の状態でビャーってなればよかったのだが。(もっといい方法あったらそっちがいいけど!)

636:デフォルトの名無しさん
19/11/26 15:05:17 NW9y+uW0.net
>>610
これが見えないですか。そうですか。
>hogehoge.jp/moemoechan/hogenull/img/image/hoge-hoge-hoge-hoget.jpg
>というURLをそのままフォルダにされても、今回の場合は探し出すのが大変なんだよ、

元々は
123 hogehoge.jp/moemoechan/hogenull/tio/hoge-hoge-hoge-hoget.html
124 hogehoge.jp/moemoechan/hogenull/star/hoge-hoge-hoge-hoget.html
125 hogehoge.jp/moemoechan/hogenull/maru/s/hoge-hoge-hoge-hoget.html
126 hogehoge.jp/moemoechan/hogenull/otto/s/hoge-hoge-hoge-hoget.html
というエクセルのファイルにある各URLのにある画像をそれぞれ分けたい、ということ。
ちなみにこれ4つだからぽちぽちやってもいいんだけどさ…100行あるとしたらどう?w

637:デフォルトの名無しさん
19/11/26 15:25:21 XdTMGSyO.net
batで外部プログラムの実行完了まで待つ呼び出し方法は
start /wait
って上で誰かが言ってるだろ

638:デフォルトの名無しさん
19/11/26 15:33:34 ISv3uuWx.net
ツリー上に保存しなけりゃいいし
ダウンロードフォルダのルートで


639:*でサブフォルダ含めて検索してもすぐまとめて表示されるしなあ



640:デフォルトの名無しさん
19/11/26 15:49:02.22 NW9y+uW0.net
ツリーに保存しないとダメだからそうしてるんだけど。
この管理番号の画像これですよーと明示できなければならないからリストがあるわけで。
必ず4つ、必ず5つならDL時即時リネーム連番にしてもいいけど…3しかなかったり6あったりする
それを検索するにしても画像リストと照合しながら?工程増えすぎ。元の手順より面倒になってもw
waitはダメでした。
trancefar ~
wait
trancefar ~
は使い方間違ってますか?
trancefar ~複数URL
wait
もだめでした…

641:デフォルトの名無しさん
19/11/26 15:54:58.38 SASMXjiT.net
start "" /wait bitsadmin
でしょ

642:デフォルトの名無しさん
19/11/26 15:56:32 ISv3uuWx.net
いちいち一個ずつ保存先指定するより楽だよ
検索っていっても保存先フォルダことにダウンロードすれば*でやりゃいい

643:デフォルトの名無しさん
19/11/26 16:10:59 XdTMGSyO.net
とにかくダウンロードが正常に終わるようにならないと先に進めないだろ
ダウンロード時にフォルダが決まるならそれで問題解決だし
外部ダウンローダを使うのなら、落としたファイルとurlとの対応が取れるのかが問題
それが可能(例えばファイル名が行番号になってるとか)なら
落とした後にファイルを対応するフォルダに移動すればいい
もちろんbat等の自動化で

644:デフォルトの名無しさん
19/11/26 16:20:26 ImxGWCjG.net
start "" /wait bitsadmin /TRANSFER FILEDOWNLOAD %%B %~dp0\%%A\%%C
urlに&とか%は無いの?

645:デフォルトの名無しさん
19/11/26 16:26:58.84 NW9y+uW0.net
>>617
それ、ブラウザでURL開いて、保存先フォルダ開いてD&Dのほうが早いよ?
今時のブラウザ、コピペと同時に開くんだから。
>>618
それな;
>>616

そういう使い方になるのか!ありがとうございます!
でも空ファイルだったw
Dirとmdで生きてるのでもう脳みそ煮えてますわ…

646:デフォルトの名無しさん
19/11/26 16:34:10.52 NW9y+uW0.net
>>619
ある。%20とか?とか。
URLリンク(hoge.hoge.com)
URLリンク(hoge.hoge.com)
こんな感じ。
bitsadmin~を一つだけ書いた場合はちゃんと動作するから大丈夫な・・・
えっ??まさか%%

647:デフォルトの名無しさん
19/11/26 16:50:52 ISv3uuWx.net
>>620
一個ずつドラッグドロップする気?

648:デフォルトの名無しさん
19/11/26 16:51:59 ISv3uuWx.net
>>618
ダウンローダーなら正常に終わるでしょ

649:デフォルトの名無しさん
19/11/26 16:57:32 XdTMGSyO.net
>>623
一般的なダウンローダなら、urlの末尾がファイル名になるが
名前の重複も多く起き、その場合、ダウンローダは自動的にリネームする
aaa.jpg, aaa(1).jpgのように
しかも(1)が付くのは早くダウンロードが終わったものでリストの上から順というわけでもない
これとリストにあるurlとの対応をとるのは大変だと思わん?

650:デフォルトの名無しさん
19/11/26 17:03:32 JyI6kWkc.net
>>624
結局一つずつダウンロードする必要があるだろ?
やっぱり何を探せなないのが全くわからんなぁ

651:デフォルトの名無しさん
19/11/26 17:04:08 ISv3uuWx.net
>>624
重複はツリー上で保存すりゃ起きない

652:デフォルトの名無しさん
19/11/26 17:07:32 NW9y+uW0.net
>>622
その方が早いと言ってます。どっちが早いか試してみたら?
URLリンク(www.yahoo.co.jp) ロゴとその左右のアイコン
URLリンク(www.rakuten.co.jp) ロゴから購入履歴までのアイコン
URLリンク(www.nikkei.com) ロゴと、その下の写真3つ
DL先のフォルダ開く、URLひらく、D&D 3工程
URLをまとめてダウンローダーに入れる、ダウンロードフォルダにまとまって入ってるから開く、移動先のフォルダを開く、該当のファイルを検索する D&D 5工程
フォルダごとにURLをダウンローダーにいれる、ダウンロードフォルダにまとまって入ってるから開く、移動先のフォルダを開く、D&D 4工程

653:デフォルトの名無しさん
19/11/26 17:10:41 ImxGWCjG.net
>>621
詰み
&なら "%%~B" とすれば行けたかもだけど
バッチで%~%のエスケープは出来なくないもののかなり面倒くさい
powershellとか行�


654:チた方がいい どうせ自動化するのなら>>612の元listから抽出してDLする方法をPSスレとかで相談してみれば?



655:デフォルトの名無しさん
19/11/26 17:15:21 NW9y+uW0.net
で、私はその3工程ですらめんどくっせーってなって、3工程とも省けんかなと考えた
#今後も同じ作業あるから、今なんとかできてると今後が楽。

ダウンローダーのダウンロード先の問題って、こうなるんだよね
URLリンク(imepic.jp)
ふ、ふかい。(これはFirefoxアドオンのスクラップブック。DownloadAllThemもこういう感じ)
お気に入りのサイト見るだけならアドオンからわかるんだけど、画像を取り出すとなると
エクスプローラーに行く必要がある

656:デフォルトの名無しさん
19/11/26 17:15:53 ISv3uuWx.net
>>627
エクセルに入れてるってんだから
まとめてURL処理してるんでしょ
D&Dをファイル数分しなくちゃならんのを言ってるんだが
まとめてURL処理してるならD&Dは1回でいい

657:デフォルトの名無しさん
19/11/26 17:18:49.77 NW9y+uW0.net
>>628
うへwわろすwそういうことか!
Powershellはこっち以上に全くわからんな…
画像リストはGoogleスプレッドにぶんなげて作れてはいる
ありがとう

658:デフォルトの名無しさん
19/11/26 17:19:23.77 ImxGWCjG.net
0バイトになるのは書き込み権限とか
管理者で実行しても変わらない?

659:デフォルトの名無しさん
19/11/26 17:23:52.25 NW9y+uW0.net
>>632
transfarされる前に次にいっちゃって、でもファイル作れって言ってるから空のファイルつくりましたって感じに見える
transfar実行画面のBYTE:0/0のところが、いっこづつやったときはにゅーーーって動いてファイル捕れるんですが
ここが0/0のままで次を始めてしまう
Wait入れようが、Pauseいれようが、そこは同じですね

660:デフォルトの名無しさん
19/11/26 17:42:23 NW9y+uW0.net
>>631
エスケープさせてできました!!
コマンド自体もスプレッドシートに関数くんでやってるので、どこかの時点で%
を置き換えてやることにします。
ヒントありがとうございました。
みなさまもたくさんヒントありがとうございました。

661:デフォルトの名無しさん
19/11/26 17:50:12 XdTMGSyO.net
>>634
""で括ってやれば?
ダメならちょっと上のsetlocal enabledelayedexpansionを参考に

pushd %~dp0
for /f "tokens=1-3" %%A in (li.txt) do (
if not exist "%~dp0\%%A\." mkdir "%~dp0\%%A"
start "" /wait bitsadmin /TRANSFER FILEDOWNLOAD "%%B" "%~dp0\%%A\%%C"
)

662:デフォルトの名無しさん
19/12/07 09:30:10 /m01ABgd.net
>>634
おい逃げるなよ

663:デフォルトの名無しさん
19/12/08 23:47:18 wNkvi2te.net
>>636
こわいよw
もはや逃げることはできぬぞ、か。

664:デフォルトの名無しさん
19/12/09 14:56:56 0+3TB6cR.net
トレンドに#業務ハックというのが上がってた。フーン
ここにいるわるいオジサン達は徹底的に省力化して、あとは仕事するフリして過ごすようなことは
まさかしていませんよね?

665:デフォルトの名無しさん
19/12/10 05:01:38.65 CfjKoCjD.net
無理そうな気はしつつも質問
苗字<tab>名前<tab>年齢<tab>住所
田中<tab>太郎<tab>27<tab>大阪
山田<tab>花子<tab><tab>東京
佐藤<tab><tab>35<tab>
こんな表のテキストファイルを<tab>を区切り文字として列指定して読み込みたいんだけど
tokens=2,4
にしても連続した<tab>は一括りに扱われて山田と佐藤は対象の列がずれちゃうよね
これはもうvbsやVBAじゃないと無理ぽかな

666:デフォルトの名無しさん
19/12/10 07:15:07 BTxKZMwl.net
>>639
delimsに指定してもダメなの?

667:デフォルトの名無しさん
19/12/10 07:44:27 CfjKoCjD.net
半角スペースは文字列として扱いたいから<tab>だけを指定してるけどダメよー

668:デフォルトの名無しさん
19/12/10 09:16:41.59 3V5uc2tI


669:.net



670:デフォルトの名無しさん
19/12/11 01:05:38 hz4JPg2Q.net
おお、値の無い列には半角スペースを入れてしまうわけか
こりゃ気付かんかったサンクス

671:デフォルトの名無しさん
19/12/13 01:06:30.14 7bx1tfw6.net
バッチでフォルダの表示方法とかかえられないよ?
詳細にして 表示の種類に長さとか大きさとか
いれたいんだけど
それをワンクリックでやりたい
URLリンク(i-bitzedge.com)
名前とか日付のとこに 長さとか大きさを追加するってことね


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