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)
名前とか日付のとこに 長さとか大きさを追加するってことね
672:デフォルトの名無しさん
19/12/13 01:06:50.17 7bx1tfw6.net
かえられないよの?
673:デフォルトの名無しさん
19/12/13 04:06:09.26 t9dRWycX.net
>>645
レジストリ値弄れば出来たと思う。
昔職場の環境統一するのに使ってた。
詳細はRegshotとかで差分とって。
バッチからはRegコマンドで設定するかRegEdit /s で読み込むかのどちらか。
674:デフォルトの名無しさん
19/12/13 04:07:58.73 t9dRWycX.net
>>645
設定後にShellの再起動も必要だったかも。
675:デフォルトの名無しさん
19/12/13 06:18:44.99 SOm460Ps.net
>>646-647
レジストリか
なるほど
ちょっと色々調べてみます
676:デフォルトの名無しさん
19/12/19 16:55:31 l8jrOhSU.net
こういうの実行するとサブフォルダのファイルでは空行ではなくピリオドが出力されるんですが何故ですか?
まあ実用上の問題は無いんですが
@echo off
for /r %%i in (*.*) do (
echo "%%~nxi"
echo.
)
pause
677:デフォルトの名無しさん
19/12/19 17:08:49.51 TZP99wd2.net
ピリオドとかコロンじゃなくて、カンマとかセミコロン使えばいいよ
678:デフォルトの名無しさん
19/12/19 17:16:19.46 TZP99wd2.net
イコールもお仲間で、この3つが特別区切り記号らしいよ
679:デフォルトの名無しさん
19/12/19 17:18:33.06 l8jrOhSU.net
>>650
はい、カンマを使うと問題が起きないことは確認していたのですがピリオドだと何故こうなるのか気になりました
680:デフォルトの名無しさん
19/12/19 17:23:09.51 TZP99wd2.net
特別区切り記号だから
681:デフォルトの名無しさん
19/12/22 19:05:52.87 DvnYZkai.net
/rが悪さをしてるんじゃね
サブフォルダの中でピリオドを2個にして
682:デフォルトの名無しさん
19/12/23 21:26:36.07 qZ1/nSQb.net
startコマンドでAPを起動後、「F11」をバッチファイルから入力するには、どう記述すればいいのでしょうか?
683:デフォルトの名無しさん
19/12/25 01:34:54.95 vipj7N9s.net
echo class Program{static void Main(){System.Windows.Forms.SendKeys.SendWait("{F11}");}}>temp.cs
FOR /F %%i IN ('dir /b /s %WINDIR%\Microsoft.NET\Framework\csc.exe') DO set cscexe=%%i
%cscexe% temp.cs
temp.exe
684:デフォルトの名無しさん
19/12/25 11:28:21.34 E0w5VXt3.net
>>656
ワラタ
685:デフォルトの名無しさん
19/12/25 12:39:52.06 32sm7KoS.net
>>656
すごいな、プロ?
686:デフォルトの名無しさん
19/12/26 00:38:52.07 ocAthgHy.net
ウイルスに使えそうw
687:デフォルトの名無しさん
19/12/26 18:09:54.44 gPRn8RL/.net
職業 プロバッチファイルスクリプター(自称)
688:デフォルトの名無しさん
19/12/27 00:09:22.71 CW1qzWXe.net
%1がフォルダ名の場合、サイズを示す%~z1は0以外の数字になる
何を表しているのか不明
689:デフォルトの名無しさん
19/12/27 07:50:28.51 sZ8rOkNi.net
エントリーレコードのsizeじゃね?テキトーmaybe
690:デフォルトの名無しさん
19/12/28 12:01:21.14 c8Bqzbdx.net
>>662
そんな数字が多いですね
\windows\winsxs や * だと違う表示も出るので意味不明、バグなのか
691:デフォルトの名無しさん
20/01/02 17:54:09.99 LCDlLvJS.net
for の %~tI のみたいに簡単にディレクトリの作成日時を取得する方法教えてください
dir /tc 何か | findstr findstr /e /c:"<DIR> ."
みたいにして取り出して整形するのは何か間違えている気がしてならないので
692:デフォルトの名無しさん
20/01/02 20:56:32.19 gZNl6+48.net
%~t1 とかで出てくるのは更新日時じゃなかった?
作成日時ならそれでいんじゃね?
for /f "skip=3 tokens=1-3,5,6 delims=/: " %a in ('dir /tc %windir%') do (
echo %a%b%c%d%e
goto :LOOPOUT
)
:LOOPOUT
pause
日時はシステム依存で表示形式変わるので整形したい形に適宜tokensやdelims、echoのとこ弄るといい
何に利用するのか知らないけど powershell なら秒まで取得出来るしバッチより痒いところに手が届く
693:デフォルトの名無しさん
20/01/02 20:59:21.16 gZNl6+48.net
修正
%a→%%a
echo %%a%%b%%c%%d%%e
694:デフォルトの名無しさん
20/01/03 08:18:43.19 6GenP8Ub.net
ありがとうございます
何か一発でディレクトリ作成日時を取り出すなら PowerShell 使おう、
って話になるんですね、ミリ秒単位までいけるみたいですし
695:デフォルトの名無しさん
20/01/03 09:56:56.50 +cYn5CAB.net
forfiles でフォルダの更新日時も得られる、ただしファイルが多いと遅い
forfiles /M ファイル名 /C "cmd /c echo @fname @fdate @ftime"
dirだと得られない秒もOK、仕様がばらばら、バッチは不思議
696:デフォルトの名無しさん
20/01/03 13:02:11.21 fh28MJ7p.net
気まぐれに試してみたらskip=2と3の結果が同じでskip=4だった
ifでちゃんと絞った方が良さげ
for /f "tokens=1,3,4* delims= " %a in ('dir /ad /tc %windir%') do @if "%d"=="." @echo %a %b
697:デフォルトの名無しさん
20/01/04 01:23:14.19 /SGph6WX.net
dir ?
親DIRがピリオド2文字なのに
なぜ表示されるのか
698:デフォルトの名無しさん
20/01/04 07:59:26.77 T5YxFwCT.net
. と .. はディレクトリ作成時に同時に作成されルート以外の全ディレクトリに存在する特殊な .link のようなモノ
だから .. の(作成|更新)日時は自ディレクトリと同じ
.. は親ディレクトリを指し示すが親ディレクトリとは別のモノ
なぜと問われても、そういう仕様だから、としか
699:デフォルトの名無しさん
20/01/04 09:10:30.39 /SGph6WX.net
>>671
ピリオドは区切り文字であり、
ワイルドカードの?の文字数のカウントに含まれず。
ピリオドが先頭だと、最初のトークンは空文字列となり、
?は一文字以下の文字列を表すので、それに合致するわけかな。
ちなみに >>670 はそれより前のレスとは無関係
700:デフォルトの名無しさん
20/01/05 07:41:36.68 QOfK3b7c.net
>>670
dir /b ? だと表示しない謎
701:デフォルトの名無しさん
20/01/06 09:00:53.84 VNkic2h1.net
ディレクトリと同じ扱いだから
702:デフォルトの名無しさん
20/01/06 09:51:26.33 8LUwvv7f.net
先頭にドットがあると要注意だよな
ワイルドカードがドットを無視する場合があるから
>copy nul .txt
>copy nul txt
>dir/b
.txt
txt
>del txt*
>dir
ファイルが見つかりません
703:デフォルトの名無しさん
20/01/08 10:00:17.73 cX66OF4O.net
簡単な処理だからbatでいいかと思って書き始めたら思ったより複雑になって、なんでbatで書いちゃったんだろってなるのいい加減�
704:竄゚たい
705:デフォルトの名無しさん
20/01/09 05:17:30.74 yWGnEtOx.net
@echo off
for /L %%a in (1,1,666) do set /a a+=%%a
for /L %%a in (2,2,666) do set /a a+=%%a
echo %a%
pause
for /L で遊んでたらなんか凄いの見付けた
706:デフォルトの名無しさん
20/01/09 07:12:55.26 hqwlnXXW.net
>>676
PowerShellでいいんじゃね?
707:デフォルトの名無しさん
20/01/17 04:34:01.53 AQjsaOZ5.net
ドラッグ&ドロップ したファイル名を表示させようと思ってんだけど
win10です
テスト.bat
-----------------------
@echo off
for %%f in (%*) do (
echo %%f
)
pause
--------------------------
だとドラッグドロップしても画面が速攻消えてうまく起動しないんだけど(
ちなみに
@echo off
echo %1
pause
だけだとちゃんとフルパスで表示されます
%%と%の違いってなんですか?
708:デフォルトの名無しさん
20/01/17 05:40:03.52 FVJQifjo.net
引数が最低1つ以上の場合
:LOOP
echo "%~nx1"
shift
if not "%~1"=="" goto :LOOP
pause
引数が0個の可能性がある場合
:LOOP
if "%~1"=="" pause &exit /b
echo "%~nx1"
shift
goto :LOOP
709:デフォルトの名無しさん
20/01/17 08:29:31 B/evOggr.net
shift使わない方法でお願いします
710:デフォルトの名無しさん
20/01/17 08:39:02 FVJQifjo.net
>>679
その方法だとファイル名やPathに&とか全角spとかダメ文字含む+半角spが無くて
引数がクオートされていない場合に上手く行かない
がこの場合引数欠けるだけだと思うので落ちるのは文字コード(ShiftJIS)と改行コード(CR+LF)を確認
711:デフォルトの名無しさん
20/01/17 18:45:30.02 Xdf1G9+g.net
WSLって専用スレあったりする?
712:デフォルトの名無しさん
20/01/17 18:48:00.37 T5MzU9c3.net
>>680
あー>>680のやり方の方がいいわせか
>>682
できましたありがとう
713:デフォルトの名無しさん
20/01/18 06:36:29 77YAYmoS.net
>あー>>680のやり方の方がいいわせか
そうじゃない。いいも悪いもない。こういう方法もあるよと提示しただけ
バッチはどうやってもバグを内包する。極論動けば何でもいい
バグを発生させないよう限定された条件の元で利用するかバグ避けコードを書くかになる
そういったのを理解した上で簡単な事をやるくらいならいいけど
少し複雑な事をしようとすると確実にあちらを立てればこちらが立たずで行き詰まったり面倒な事になる
面倒を避けたいなら初めからPowerShellとかでやった方がいい
今から覚えるなら尚更
714:デフォルトの名無しさん
20/01/18 08:02:35 UuH5oHRt.net
>>679
ドラッグ&ドロップ したファイル名に
たぶん ) があるんだろう
a(1).txt
とかね
なぜ落ちるか自分で考えてみろ
715:デフォルトの名無しさん
20/01/18 23:29:59.70 jJ2WRqDf.net
>>686
それな
バッチはこういう罠があるからPSに移行したわ
コメント欄に迂闊に括弧も使えないしこわいこわい
716:デフォルトの名無しさん
20/01/23 20:57:19.47 qiuXI8ht.net
ネストされた環境変数が展開されない事象について
URLリンク(social.technet.microsoft.com)
717:デフォルトの名無しさん
20/01/26 21:47:29 Nyn5xlpx.net
2つのウィンドウで別フォルダを表示してファイル存在の有無によって選択/解除ができその後コピーや移動ができる、そんなファイラーがあったら便利だなと探してました。
WinZIP関係のソフトで7-zipというのがあり、なぜか
718:解凍するとその中に7-zip file managerというのが入っていて 起動してみると左右で別フォルダを表示することができオッ、と思ったのですが、存在を比較する機能はありませんでしたorz ファイル存在比較 で検索したら 【バッチ作成】の文字が目にとまりページを開くと次のようなバッチファイルでした。コピー/移動作業前の確認用に 便利だなと思いました。実際はif existでもいいし、自分用に少し書き換えました @echo off echo AにあってBに無いファイル pushd \A for %%X in (*) do if not exist \B\%%X echo %%X popd echo BにあってAに無いファイル pushd \B for %%X in (*) do if not exist \A\%%X echo %%X popd popd、pushdってアスキーのラーニングシステムシリーズ本のMS-DOSのやつで最初に書かれていたんだけどまったく使わないわなんて思ってそのままでした。
719:デフォルトの名無しさん
20/01/26 23:31:16 Jc09ZNe5.net
そんなことまで無理にcmdでやらんでも・・・
WinMergeすら入れさせてもらえない環境なのか?
720:デフォルトの名無しさん
20/01/27 09:15:34 +0QHC3Wk.net
日記?
721:デフォルトの名無しさん
20/01/28 22:49:16 lbmGsP+l.net
"送る"って意外と不自由なんだな…
バッチファイルでワンクッション入れて(゚д゚)ウマー
722:デフォルトの名無しさん
20/01/28 23:14:40 Vj4Y99PX.net
何が不自由なの
723:デフォルトの名無しさん
20/01/30 20:40:29.71 6k+E856c.net
このバッチで何か入力しても a が消える
@echo off
set /p a=data=
rem %a=%
echo data=%a%
pause
724:デフォルトの名無しさん
20/01/30 22:45:14 VR7HU+gm.net
>693
勉強不足があるかも知れんが
・さっさと画面を閉じちゃう(cmd/kで回避)
・%1に入れてくれない
・ファイル名の後ろにオプションが付けられない
725:デフォルトの名無しさん
20/01/30 23:26:29 D5cDwkr0.net
ワンクッションってそういう意味か
昔からスクリプトを送るに登録することなんて当たり前のことだったけどね
むしろexeしか登録しない人はこのスレにはいないとまで思ってた
726:デフォルトの名無しさん
20/01/31 11:16:38 JWfC0/9e.net
>>694 何かエラーすると正常になるよ(笑)
@echo off
set a=123
rem %a=%
if defined a (echo 1) else echo 0
echo a=%a%
nul 2> nul
if defined a (echo 1) else echo 0
echo a=%a%
pause
結果
0
a=
1
a=123
727:デフォルトの名無しさん
20/02/09 18:23:32 62ExnvKA.net
叩いたらスクリーンセーバーをオフにしたく、killでスクリーンセーバーのscrファイルを終了させるバッチを作ったんだけど、Windows10のタブレットモードで動かすとスタートメニューが起動してしまう。
元々立ち上げてたソフトを表示したいんたけど何か良い方法ないかな?
ソフトを立ち上げっぱなし→スクリーンセーバー起動→条件下でスクリーンセーバーkillバッチ→立ち上げてたソフトに戻る
ってのにしたいのにkillバッチ→スタートメニューになってしまう
あと、バッチを走らせると一瞬黒いcmd画面がでるのでvbs経由で画面を出さないようにしようとしたけどこちらもうまくいかない…
728:デフォルトの名無しさん
20/02/10 13:13:43 0DoxGo8j.net
スクリーンセーバー動いてるのに、
どうやってバッチ叩いてんの?
さっぱりわからん
729:デフォルトの名無しさん
20/02/10 23:18:37.16 B/3TWI1a.net
>>698
ネタだよね?
730:デフォルトの名無しさん
20/02/11 12:30:00.59 DitzTCfU.net
何かをトリガーにしてタスクから叩くって事じゃないかな
731:デフォルトの名無しさん
20/02/11 17:11:28 DSTYXSth.net
特定のキー操作で解除するタイプのスクリーンセーバーなのかな?
でもそれならそれでkillするんじゃなくて該当のキーを送ればよいだけな気がするけど
732:デフォルトの名無しさん
20/02/11 17:51:57.47 hksaF/sY.net
Windows7標準のmklink
733:でシンボリックリンクを作ると リンクのタイムスタンプ(作成、更新、アクセスいずれも)は リンク先ファイルのタイムスタンプに関係なくリンク作成時点のものになり 普通のファイルのようにはタイムスタンプを変更できないようだけど 変更する方法ある? ハードリンクなら同じものを見ることになるから勝手に揃うけど 使い分けの方針が定まらなくてあまり使ってない
734:デフォルトの名無しさん
20/02/11 23:47:43 9k84sg+E.net
>>703
シンボリックリンクの実体はファイルだからSetFileTimeで変更できるらしいぞ
らしいってのは俺がシンボリックリンクつかったことないからね
735:デフォルトの名無しさん
20/02/14 23:11:39 2Mmdz3hG.net
Windows Vistaは2017年にサポートが終了しましたがWindows Server 2008向けのセキュリティ更新プログラムを手動でインストールすることができていました。
ところがどの順番でどれをインスコすればいいのか面倒、、、それを解決するバッチプログラムを作った方がいます。
バッチファイルの記述がフムフム、へぇ~という感じで自分にはとても勉強になりました。興味ある方はどぞ
創造の柱
URLリンク(blog.livedoor.jp)
736:デフォルトの名無しさん
20/03/24 10:56:05.36 .net
このスレで聞くべきなのか分かりませんが、Windowsで数千個のPDFを一括処理したいので、取りあえずここで聞いてみます。
PDFをAcrobatで開いた時のプロパティ(「文書のプロパティ」で、"表示"、"ページレイアウト"、"倍率"を設定できますが、
1つ1つ手作業で設定するのはさすがに無理です。
Javaの様なプログラミング言語でも、他のアプリでも何でもいいんですが、この文書のプロパティを一括で設定する方法って何がありますか?
737:デフォルトの名無しさん
20/03/24 18:54:16 k6OnWQi4.net
それってAcrobatのデフォルトの表示方法を変えればいいんじゃない?
738:デフォルトの名無しさん
20/03/24 19:52:05 LC2xv/4E.net
変更前後のAcrobatのレジストリをエクスポートしてdiff比較してどこが変わってるか確認するのが最初にやることだろうね
739:デフォルトの名無しさん
20/03/24 20:27:13.25 .net
>>707
Acrobat側の表示方法を変えるのじゃ無く、PDF側で変えたい
740:デフォルトの名無しさん
20/03/24 20:53:17.46 k6OnWQi4.net
そもそもPDF側に表示方法が保存されてるものなの?
結局Acrobat側の問題じゃない?
741:デフォルトの名無しさん
20/03/24 22:35:05.89 tH0Sn0AY.net
「pdf コマンドライン ページレイアウト」でググったら
cpdf (Coherent PDF Command Line Tools) を紹介するサイトが出てきた
これ、見開きを縦スクロールにしたり単ページにしたりできて面白い
"倍率" が 2017/10 の時点で無理らしいけど
742:デフォルトの名無しさん
20/03/26 01:20:56.78 3WOBAGMl.net
ID消して質問してるのがすげー腹立つな
本当に解決を望んでるなら逆にコテ付けるぐらいできんのか
743:デフォルトの名無しさん
20/03/30 02:44:24 X7klH3J+.net
windowsってことだけどpdfいじるならMac OSのautomatorじゃね?知らんけど
744:デフォルトの名無しさん
20/04/18 11:05:03 6HUykZ9A.net
今でもたまに使うけどUTF8系のスクリプトとの相性がめっちゃ悪いな
いちいちコードページ指定するとなんかウィンドウが切り替わって重いし
cmdをchcp 65001 (UTF8)で常用するって現実的じゃないよね?
745:デフォルトの名無しさん
20/04/18 14:03:40.50 a+OnqKl3.net
MSはレガシーのために保守してるだけだろ
powershell使え
746:デフォルトの名無しさん
20/04/18 16:57:49 Vod
747:BEB+r.net
748:デフォルトの名無しさん
20/04/18 17:12:48 fYZW+FI9.net
このスレで、utf-8 のバッチファイルにするなら、
行末は半角英数な文字にしとけ
というのを学んだ、>>262 からの流れ
なんでなのかはいまだに知らない
749:デフォルトの名無しさん
20/04/18 17:22:50 D5FH+wQt.net
2つめのechoがエラーになってるね
echo テスト
echo テスト
と間に空白行を挟めば正常だがどういう理屈なのか分からん
750:デフォルトの名無しさん
20/04/18 17:31:32 VodBEB+r.net
れすサンクス
751:デフォルトの名無しさん
20/04/21 19:56:52 vK3trFFL.net
%2つというのは、何らかのエスケープですか?
また、forを使うときにfor %iなどとしますが、%の意味がよくわかりません
752:デフォルトの名無しさん
20/04/21 21:11:11 vK3trFFL.net
フォルダ内のファイルを連番つけてリネームする方法はわからないでしょうか
forを使用してインデックスを連番として付与する感じだと思うんですが
ファイルはこんな感じです
犬.txt
猫.txt
猿.txt
753:デフォルトの名無しさん
20/04/21 21:17:03.32 FdhLTsrP.net
>>720
%は互換性や拡張などのおかげで大変ややこしい事になっている
説明するには小一時間かかるのでここでは控える事にする
754:デフォルトの名無しさん
20/04/21 21:26:09.14 M3jMZi3+.net
>>720
%は変数を定義する時に使うよ %iで「iという変数」になるよ
バッチプログラムで使う時は%%iにする必要があるよ
URLリンク(www.pg-fl.jp)
「%」のページも読んだ方が良いよ
755:デフォルトの名無しさん
20/04/21 22:46:58.98 HADG6GDb.net
>>721
Ruby で作った。
ただし、DryRun なので実際には実行されません。
001.txt, 002.txt に変わります
require 'fileutils'
# 絶対パスのディレクトリ名の後ろに、* を付けること!
# . で始まる、隠し directory, file を除く
dir_path = "C:/Users/Owner/test/*"
target_dir = File.dirname( dir_path ) # ディレクトリパスだけを取り出す
Dir.glob( dir_path )
.select { |full_path| File.file?( full_path ) } # ファイルのみ
.each.with_index( 1 ) do |full_path, idx| # index は、1 から始まる
# format で、0埋め3桁表示にする。extname は拡張子
# ファイル名は、001.txt, 002.txt など
dest_path = target_dir + "/" + ( "%03d" % idx ) + File.extname( full_path )
FileUtils::DryRun.move( full_path, dest_path )
end
756:デフォルトの名無しさん
20/04/21 22:54:20 h/bjIQIw.net
rubyはスレ違い
757:デフォルトの名無しさん
20/04/21 23:04:39.20 s3lLVMWt.net
3桁連番付けただけ
@echo off & set n=1001
for %%i in (*.txt) do set a=%%i& call :x
goto :eof
:x
ren "%a%" "%n:~1%-%a%" & set /a n+=1
758:デフォルトの名無しさん
20/04/21 23:14:39.66 J0u+GdjC.net
リネームは結構難しい
リネーム後のファイルが再びリネーム対象となる場合がある
759:デフォルトの名無しさん
20/04/21 23:27:06 alPdontK.net
set N=1000
:LOOP
if "%~1"=="" exit /b
set /a N+=1
ren "%~1" "%N:~-3% %~nx1"
shift
goto :LOOP
760:デフォルトの名無しさん
20/04/21 23:28:37 s3lLVMWt.net
リネーム後のファイル名が既存だったりするし
761:デフォルトの名無しさん
20/04/21 23:49:32 GY5lnYbX.net
リネームは一覧を一旦ファイルに出力してから回した方が安全だよ
それとファイル名にUNICODE文字が混ざってる場合も考慮するとバッチファイルではやらん方がいいよ
762:vbsかjsかpowershell
763:724
20/04/21 23:57:26 HADG6GDb.net
>>724
のRuby では最初に、Dir.glob( "C:/Users/Owner/test/*" )
で、そのフォルダ内のすべてのファイルを取得しているから、
各ファイルを、rename していく途中で、
rename後のファイルを、再びrenameすることはない
764:デフォルトの名無しさん
20/04/22 00:04:16 vEO7RF6u.net
>>730
ファイル出力というかfor/fでdir出力の取り込みでいいんじゃね?
UNICODE文字は関係あるかね?
765:デフォルトの名無しさん
20/04/22 06:52:59.32 gobEj/px.net
>>721
@echo off & set "n=1001" & set t=tmp_dir
md %t% & for %%i in (*.txt) do set a=%%i& call :x
move %t%\* . > nul & rd %t% & goto :eof
:x
move "%a%" "%t%\%n:~1%-%a%" > nul & set /a n+=1
tmp_dirの名前は何でもいいが既存の名前を避けてください。
766:デフォルトの名無しさん
20/04/22 09:12:13 UZ0N9G3p.net
>>732
>UNICODE文字は関係あるかね?
SJISに含まれてない文字が入ってると酷いことになる
767:デフォルトの名無しさん
20/04/22 10:16:03 MJO3kN2U.net
駄目文字のせいでSJISコードがバグると言うならまだわかるが
その逆って意味がわからないな
MSは全くテストしてないってことか
768:デフォルトの名無しさん
20/04/22 11:07:12 /W5c3Vma.net
>>722-735
どうも
勉強中です
769:デフォルトの名無しさん
20/04/22 11:53:22 /W5c3Vma.net
複数行を一行にまとめる場合は、&でつなぐんでしょうか?
これが改行と同じ意味でしょうかね。
770:デフォルトの名無しさん
20/04/22 12:07:17 vEO7RF6u.net
>>736
@echo off & set n=1001& chcp 65001 > nul
for /f "delims="eol^= %%i in ('dir /b *.txt') do set a=%%i& call :x
goto :eof
:x
ren "%a%" "%n:~1%-%a%" & set /a n+=1
>>734 コードページ変えればいいだけ
771:デフォルトの名無しさん
20/04/22 19:08:42.79 nR8TNEgs.net
>>737
複数行をまとめるって、、
文字列の足し算の話?
コマンドを複数行に分割して記述する話?
(継続文字のこと?)
772:デフォルトの名無しさん
20/04/22 19:11:46 nR8TNEgs.net
>>739
または複数コマンドを一行で記述する話?
773:デフォルトの名無しさん
20/04/22 20:05:53.95 j1ZYXyL3.net
>>735
コマンドプロンプトは自体はUNICODE対応
各種コマンドもUNICODE対応
だけどバッチファイルは過去の互換性が必要なので
デフォルトではOSの設定(日本語だとSJIS)の文字コードとして使われる。
その設定はchcpで変えることが出来る
単にコマンド呼び出しをしてるだけならUNICODEとして扱われるが
forでバッチファイルの世界に招き入れたら、
chcpの設定によって文字コードの変換が行われる
テストはしてるだろ。この文字コード変換は仕様なので
バッチファイルでUNICODE文字を扱いたければchcpで
UTF-8に変更しなければならないというだけのこと
774:デフォルトの名無しさん
20/04/23 06:47:17 153+oMoq.net
>>739
バッチファイルではなくて、複数行をコマンドプロンプト上で実行したい場合があったりします
775:デフォルトの名無しさん
20/04/23 08:24:04.38 5iduMLE+.net
>>742
複数行をコピペじゃ駄目なの?
例えば、この内容をメモ帳に記述しておいて
rem ―- ここから ―
dism /online /cleanup-image /restorehealth
sfc /scannow
rem ―- ここまで ―-
4行をコピペする
776:デフォルトの名無しさん
20/04/23 09:07:36 Z6s7Y3Lu.net
>>742
複数コマンドを1行で実行したいということなら、、、
A & B ... A実行後にBを実行
A | B ... Aの実行結果をBに渡して実行
A && B ... Aが成功したらBを実行
A || B ... Aが失敗したらBを実行
長いコマンドを複数行に分割したいなら、、、
Sentence1 ^<改行>
Sentence2
(サーカムフレックスで継続)
777:デフォルトの名無しさん
20/04/23 12:04:05.59 qTwHi2aC.net
()で囲めばいい。
(timeout /t 300
cd d f:\hoge
for %f in ( *.jpg ) do (
・・・
)
)
正式名称が何かは知らないが勝手にブ
778:ロックと呼んでる。
779:デフォルトの名無しさん
20/04/23 14:59:02.07 WFX6w8Jo.net
>>744
そういうのがあるのか、| 以外知らなかった
780:デフォルトの名無しさん
20/04/23 14:59:42.71 WFX6w8Jo.net
>>745
これも知らなかった
781:デフォルトの名無しさん
20/04/23 15:25:29.03 153+oMoq.net
>>743コピペでももちろんいいですが、知っておきたかったです
782:デフォルトの名無しさん
20/04/23 16:03:20.39 eZrYYRVL.net
なんでバッチ嫌なの?
783:デフォルトの名無しさん
20/04/23 17:31:56.25 P2MaiEJS.net
>>748
だったらこんなところで聞くんじゃなくて
一次資料に当たる努力をしなよ
784:デフォルトの名無しさん
20/04/23 21:20:47 M8I+Acr1.net
>>745
それ駄目。
遅延変数展開しないと痛い目に遭うよ。
785:デフォルトの名無しさん
20/04/26 18:05:24 FVxXRtXH.net
連番をつけるコードでまだ躓いています
hoge.txt
hogehoge.txt
を
hoge(1).txt
hogehoge(2).txt
としたいです
echo off & for %i in (*.txt) do (ren %i ???)
このはてな部分に連番を指定するためにインデックスを指定しないといけないと思うんですが、%i自体にはファイル名が入っていると思います。インデックスは取れるんでしょうか?
786:デフォルトの名無しさん
20/04/26 18:36:58 FVxXRtXH.net
バッチでset /aなどのオプションがありますが、/aは計算を伴う場合に使うそうです。
この/aに意味はあるのですか?
何らかの単語の略だと覚えやすいんですが。
787:デフォルトの名無しさん
20/04/26 18:40:50 Pfsg7A5O.net
その程度ぐぐれば出てくるでしょ
インデックスのカウント用変数が必要+変数の遅延展開
丸括弧のエスケープが必要
aはarithmeticの略
788:デフォルトの名無しさん
20/04/26 20:15:42 cczyU4e/.net
@echo off & set n=1& chcp 65001 > nul
for /f "delims="eol^= %%i in ('dir /b *.txt') do set a=%%i& call :x "%%a%%"
goto :eof
:x
ren %1 "%~n1(%n%)%~x1" & set /a n+=1
789:デフォルトの名無しさん
20/04/26 22:00:20.95 zKIVBOto.net
1Point ノウハウ
dir ですべてのファイル、フォルダを表示したい場合は
dir /A
790:デフォルトの名無しさん
20/04/26 22:18:32 DxwpR+0O.net
普通に do call :x "%%~i" でいいと思うんだが何故いちいち set a=%%i とかしてるの?
何か理由あるん?
791:デフォルトの名無しさん
20/04/26 22:22:15 YV1WqKFq.net
>>757
ファイル名に「%」入ってるとマズくない?
792:デフォルトの名無しさん
20/04/28 05:49:29 ceHl0duT.net
シェルスクリプトってお手軽省略表記にこだわりすぎるあまり
エスケープ処理が複雑化しバグりやすくなって本末転倒だよな
793:デフォルトの名無しさん
20/04/28 05:57:02 l2PF55i3.net
そんなところで躓く能なしは、他の言語で書いても同じだよ
794:デフォルトの名無しさん
20/04/28 13:01:40 DKHJb1hS.net
他の言語でもエスケープは必要なことはあるし同じこと
ただbatのように自身を置換して逐次実行するするようなことは
eval系の命令を使う場合なのでほぼ無いに等しいので意識されないだけ
795:デフォルトの名無しさん
20/04/28 16:44:00 3RXW9/E3.net
要するに分かりにくい
ここで初心者にイロハから質問されてもレスがしにくい
リネームソフトでも使え
796:デフォルトの名無しさん
20/04/28 17:37:46 7TaGv6sC.net
>>759
シェルスクリプトでエスケープ処理が複雑なんて
したことがないんだがどういうケース?
むしろバッチファイルのほうがややこしすぎる
バッチファイルでダブルクォートはいつつけるか言える?
スペースが含まれたファイル名とか
バッチファイルでこれの出力結果は
echo "C:\Program Files"
↓これです。(ダブルクォート含む)
"C:\Program Files"
797:デフォルトの名無しさん
20/04/28 18:05:03 3RXW9/E3.net
どういうケースって、すぐ上の奴だろ
798:デフォルトの名無しさん
20/04/28 18:18:07 7TaGv6sC.net
>>764
もしかしてバッチファイルとシェルスクリプトの違いわかってないの?
799:デフォルトの名無しさん
20/04/28 18:19:14 7TaGv6sC.net
シェルスクリプトっていうのはUnixやLinuxの
/bin/shとかbashのことなんだが
800:デフォルトの名無しさん
20/04/28 18:20:52 RB8xSOb3.net
ファイル数�
801:墲ゥらんけどリネームソフト使えば一分かからんで終了
802:デフォルトの名無しさん
20/04/28 20:35:28 C/yTg51l.net
>>766
俺の定義ではバッチファイルはシェルスクリプトだ
config.sysに
shell=command.com /e:1024
とか書いてたからな
803:デフォルトの名無しさん
20/04/28 20:39:22 C/yTg51l.net
ちなみにMS-DOSにはエスケープ文字なんて無い
804:デフォルトの名無しさん
20/04/28 20:40:45 f4hk4dsD.net
>>768
意味わかんないから調べたが、
今では全く通用しない話じゃねーかよ。
てめーの定義を押し付けんな。
805:デフォルトの名無しさん
20/04/28 20:51:25.37 l2PF55i3.net
>>770
頑張ってググってきたんだからほめてやれよ
806:デフォルトの名無しさん
20/04/28 22:38:03.31 0mXw36Cx.net
>>769
Delims句でイコールを区切り文字にしたいときはサーカムフレックスでエスケープする必要があるときがあるけどね。
807:デフォルトの名無しさん
20/04/28 23:55:09.09 3RXW9/E3.net
cmdはシェルだ。定義も糞もない
808:デフォルトの名無しさん
20/04/29 00:05:03 kLiglYQz.net
>>768
cmdじゃないじゃん
809:デフォルトの名無しさん
20/04/29 06:34:57 bLWOmnfL.net
UNIXとかでshやbashがログインシェルとかインタラクティブシェルになるのと同じだよ
shやbash=cmd
シェルスクリプト=バッチファイル
シェアが段違いのWindowsのバッチファイルがシェルスクリプトよりずっと複雑なのは当たり前
810:デフォルトの名無しさん
20/04/29 06:56:52.10 SXZJio07.net
とはいえ逆にunixでバッチがどうとか言うと違和感あるしな
>>766みたいな感覚が一般的
811:デフォルトの名無しさん
20/04/29 07:15:11 sus1L+2H.net
>>775
> シェアが段違いのWindowsのバッチファイルがシェルスクリプトよりずっと複雑なのは当たり前
シェアならLinuxのシェルスクリプトの方が多いよ
今はsystemdに置き換えられつつあるが、起動処理の多くで
シェルスクリプトが使われていた。
各アプリのビルドなどでもシェルスクリプトは使われている。
それに対してバッチファイルは殆ど使われていない。
そもそもWindowsのコマンドは、他のコマンドの出力を読み取って
別のコマンドで処理するように設計されていない
単に呼び出すだけ。だからバッチファイルという名前になってる
例えばcopyコマンドであってもシェルスクリプトであれば、コピーが正常に終了した場合
なにも表示されないのでスクリプトとして使いやすいが
Windowsのcopyは人間用のメッセージがいちいち出る
コマンドの出力を変数に入れるだけでも大変
遅延環境変数の展開を使わなければ変数の中にメタ文字的なものが入るだけで簡単に壊れる
そもそもの設計思想がスクリプトを組むためではなく、単にコマンドを並べるという使い方を
するためだからバッチファイルはシェルスクリプトだけでなく
PowerShellスクリプトやVBScriptよりも使いづらくなってしまっている
一方、PowerShellスクリプトやVBScriptはコマンドをよびだすのが
面倒になってるので両立してるシェルスクリプトにはかなわない
812:デフォルトの名無しさん
20/04/29 07:22:12 VzuV0Enx.net
アスペがうだうだ言ってるだけで全く「会話」が進行していないな
813:デフォルトの名無しさん
20/04/29 07:36:25.95 SXZJio07.net
スレチだから、もうやめろ
814:デフォルトの名無しさん
20/04/29 07:51:09.96 sus1L+2H.net
やなコッタ
815:デフォルトの名無しさん
20/04/29 22:15:38.24 f6LPbIhG.net
パンナコッタ
816:デフォルトの名無しさん
20/04/29 22:43:10 sus1L+2H.net
メロンパンナ
817:デフォルトの名無しさん
20/04/30 00:25:02 6g7fIyNp.net
マンコッタ茶園のアッサムティーをすすりながら仕事するのが何よりの贅沢
818:デフォルトの名無しさん
20/04/30 23:56:54 4NDFLh29.net
アッサムティー好き、いいよね
819:デフォルトの名無しさん
20/05/01 20:45:42 I+dUmCMk.net
カタコッタ
820:デフォルトの名無しさん
20/05/07 18:46:37 jiFNKMfo.net
滅茶苦茶初歩的な質問ですまん
バッチファイルからPythonスクリプト実行してPythonスクリプト側でprintした文字列をバッチファイル側で取得する方法ってある?
821:デフォルトの名無しさん
20/05/07 18:51:16 cw3NlGJG.net
FOR /F ["オプション"] %変数 IN
822:('コマンド') DO コマンド [コマンド パラメーター] または usebackq オプションの場合: FOR /F ["オプション"] %変数 IN (`コマンド`) DO コマンド [コマンド パラメーター]
823:デフォルトの名無しさん
20/05/07 18:51:30 jiFNKMfo.net
もしくはコマンドプロンプトに出力された文字列を出所問わず取得したい
824:デフォルトの名無しさん
20/05/07 19:01:03 jiFNKMfo.net
>>787 ありがとう、いけたわ
logzero使ってるライブラリでこれやろうとすると途中で処理が止まるけど、これは他の問題かもしれんな
825:デフォルトの名無しさん
20/05/07 19:33:24 lct9jPsZ.net
昔だったら tail -f
826:デフォルトの名無しさん
20/05/07 19:34:28 2gF3mugX.net
>>789
標準出力じゃなくて、標準エラー出力の方にprintしてるんだろ
('py foo.py 2^>^&1')
827:デフォルトの名無しさん
20/05/07 19:47:29.96 jiFNKMfo.net
logzeroさらっと調べても設定全く分からんので今回は該当部分の出力だけlogzero.infoからprintにして無駄な出力を省いた
出力取得できたのでまあよし
828:デフォルトの名無しさん
20/05/07 20:17:47 2gF3mugX.net
>>792
@echo off
setlocal enabledelayedexpansion
set n=0
for /f "tokens=*" %%i in ('py test.py 2^>^&1') do (
set IN!n!=%%i
set /a n+=1
)
set /a n-=1
for /l %%i in (0,1,%n%) do (
echo.!IN%%i!
)
endlocal
829:デフォルトの名無しさん
20/05/12 09:27:08.95 hWMQZbFi.net
>コマンドプロンプト入門 Kindle版
2020年にこれを出すとはチャレンジャーすぎるな
830:デフォルトの名無しさん
20/05/12 16:03:14 PeLhefIP.net
amazonで、確認すると、2019/09の出版みたいですね。
どうせなら、power shellの本出したほうが良かったかも。
831:デフォルトの名無しさん
20/05/12 18:45:23 NJ7uTfC9.net
ファイル名に「b」を含むファイルをコピーするときに
たとえば
abc.txt というファイルがあって
copy *b*.txt def.txt
がオッケーで
copy *b* def.txt
がエラーなのはなぜですか?
*は0文字以上の文字列なので
両方とも成功すると思っていたのですが
832:デフォルトの名無しさん
20/05/12 19:05:09 fhydWmjd.net
>>795
KindleストアにPowerShellのがいっぱいあるやん
833:デフォルトの名無しさん
20/05/12 19:55:35 UaCqmgBQ.net
>>796
普通にできるけどどんなエラーが出るの?
ちなみにその書き方だと *a* が複数ある時は連結されてしまうけどな
834:デフォルトの名無しさん
20/05/12 19:59:26 fhydWmjd.net
*b* が一つでもゴミが付くしね(0x1A)
835:デフォルトの名無しさん
20/05/23 20:41:18.51 H5g1ckea.net
Windows Terminal で音を鳴らすにはどうすればいいですか
コマンドプロンプトではControl-Gを出力してたんですが
Windows Terminalでは無視してくれやがります
836:デフォルトの名無しさん
20/05/23 22:23:07.24 105ldQbQ.net
start beep.wav
837:デフォルトの名無しさん
20/05/23 22:45:59.81 H5g1ckea.net
そんなんだったら
>copy con beep.cmd
echo ^G
waitfor /T 3 waiting
^Z
1 個のファイルをコピーしました。
>start /min cmd /d/c beep.cmd
とするけどもっといい手はないかなと
838:デフォルトの名無しさん
20/05/23 23:00:15 H5g1ckea.net
ああstartで自分を呼んで鳴らせばいいんだ
自己解決しました
839:デフォルトの名無しさん
20/05/24 00:25:04.68 VYuvM9gt.net
>>802
echo ^G>beep.dat
としておいて
type beep.dat
beep.dat は 0x07 (1byte)だけ
840:デフォルトの名無しさん
20/05/24 00:40:12.55 f4O9jhZ+.net
その手がWindows Terminalでは使えないって話
URLリンク(aka.ms)
Windows ターミナルの概要 | Microsoft Docs
841:デフォルトの名無しさん
20/05/24 00:46:46 VYuvM9gt.net
>>805
そうでしたか
Windows Terminal、使うか
842:デフォルトの名無しさん
20/06/03 20:30:01 H
843:abAm56l.net
844:デフォルトの名無しさん
20/06/03 20:31:25 5eIQQTQm.net
勉強でなら、そりゃそうだろと言うしかないね
845:デフォルトの名無しさん
20/06/03 20:32:34 HabAm56l.net
実務上はどうです?
バッチの方が情報多いからいいんですか?
846:デフォルトの名無しさん
20/06/03 21:04:50.01 mm84GRB0.net
>>809
どういう現場か知らないけど
Widn7 SP1 PSv2 縛り
なんて現場でPS書きたいとか思わないね。
使わせてくれる現場なら使うべきだし、そうでないならバッチをシコシコ書くしかないのよ。
847:デフォルトの名無しさん
20/06/03 21:27:53 QZ+HyrOs.net
シコシコかくのよ
848:デフォルトの名無しさん
20/06/03 22:11:19 JNM2fzED.net
PSでできること=C#でできることだからバッチとは全然できることが違うよ
PSv2でも十分バッチとは天地の差がある
849:デフォルトの名無しさん
20/06/03 22:22:36 5eIQQTQm.net
元の質問が、「バッチでやるような処理でも」なんだけどな
ちゃんと読んでるか?
850:デフォルトの名無しさん
20/06/03 23:24:38 Gm6SBE/O.net
>>809
情報量ならPowerShellの方が上だし
TechnetフォーラムならPowerShellのカテゴリーあるし
ポケットリファレンスの著者である牟田口大介まで出没している
ストアアプリのインストールとかはPowerShell必須だし
バッチのみじゃ書けない物も割と多い
処理の内容は忘れたけどバッチでやれた事を
PowerShellで書いたらキー入力を要求されて
かえってバッチの方が良かった場合もあるけど
そんなパターンは圧倒的に少ないと思う
でもウチの場合、PowerShell使いがいないから
というのが最大の理由で実務はバッチだらけ
良いか悪いかならきちんとメンテナンスが出来る物が良いであるべき
個人の感想ならばPowerShellって
バージョンが上がって非互換が出そうなので避けたい
851:デフォルトの名無しさん
20/06/04 09:41:35.56 Di3Z81qX.net
9x系(95/98/Me)のWindows用MS-DOSプロンプトとNT系(それ以外)のWindows用コマンド・プロンプトの違いさえ
意識していれば、バッチファイルの利用は難しくないと思う。
VBScript(WSHことWindows Script Host)の場合は9x系とNT系に関係なく、WSHバージョン5.1以降かどうかさえ
気をつけていれば概ね大丈夫だと思う。
それらに比べてPowerShellは、個人的にはハードルが極めて高い。
852:デフォルトの名無しさん
20/06/04 15:05:12.56 iofqxoab.net
>>813
当然「バッチでやるような処理でも」PSなら十二分にこなせるよ
このスレで話題になるような変なクセや制限もないしね
853:デフォルトの名無しさん
20/06/04 15:12:12.70 iofqxoab.net
>>814
PSはバージョン指定(-vオプション)すればそのバージョンが実行される仕組みを持ってるから互換性についてもある程度クリーンだよ
854:デフォルトの名無しさん
20/06/04 15:16:33 efimIni8.net
BATの典型的なものとしては
シーケンシャルに
・外部アプリ呼び出し
・ファイルコピーや移動
・メッセージ表示
であって、こんなものをPowerShellで書く必要は無いし、ステップ数も余分にいる
855:デフォルトの名無しさん
20/06/04 21:18:27 U7KCPoET.net
PSの話したいなら該当スレへ
ここでするのはスレチ
856:デフォルトの名無しさん
20/06/05 09:26:58 YNSaAEsR.net
バッチファイル内で、複数の文字列の一部だけを羅列して、それをまとめて補完したものを変数に入れたい
具体的には
set LOGFILES=%LOG%\tech\*.dat %LOG%\prog\*.dat %LOG%\win\*.dat %LOG%\newsplus\*.dat ...
のように指定するのではなく
setlocal enabledelayed...
for %%f in (tech prog win
857: newsplus) do ( set LOGFILES=%LOGFILES% %LOG%\%%f\*.dat ) のようにして、増減や修正を簡単に出来るようにしたい したいんだけど、なんかうまく動いてくれない 何かヒントもらえますか?
858:デフォルトの名無しさん
20/06/05 10:14:13 YNSaAEsR.net
自己解決
どうやらこんな感じで動きそう
for %%f in (tech prog win newsplus) do (
call :APPEND %%f
)
:APPEND
set LOGFILES=%LOGFILES% %LOG%\%%f\*.dat
goto :EOF
859:デフォルトの名無しさん
20/06/05 11:33:35 xkF+o6Lc.net
>>820
setlocal enabledelayedexpansion
for %%f in (tech prog win newsplus) do (
set LOGFILES=!LOGFILES! %LOG%\%%f\*.dat
)
じゃダメなの?
860:デフォルトの名無しさん
20/06/05 11:53:35.34 YNSaAEsR.net
あれ?出来ますね
実は!で囲むのもやってみた(つもりだった)んだけど
(たぶん、どっか別のちょっとしたところでミスしてて)
その時はうまく動かなかったんですね
失礼しました
861:810
20/06/06 00:36:10 ZNTMwsEj.net
>>817
業務システムのくせに -v の無いPSスクリプトを Win7 上で動かしてるクソシステム、あるよ。改修したくもないけど。
PS は ver.3 で破壊的変更がなされたから、ver.2 に合わせて勉強するだけ無駄だと言われている。
core になって COM も切られたから Word や Excel ファイルへのアクセスも今後どーなんの?的な段階。
また、PS が「管理の自動化」を目指しているのに対して、バッチや WSH は「一般ユーザーの定型操作の自動化」を目指しているから方向性自体が違う。
おまけにバッチとWSHはもう仕様変更が無いという強みがある。
等価なものを個人的に PS でリライトしてみる、はいいと思うけど、本番環境に入れるのはNGかな…。
862:デフォルトの名無しさん
20/06/09 07:37:38.68 xQo5RGeQ.net
長々と更新してもcmd変わらず放置
不具合あればPS使えということか
バッチに未来は無い
863:デフォルトの名無しさん
20/06/09 21:59:44.80 Phlj4K/L.net
cmdはもう更新しないってアナウンス出てなかったっけ?
864:デフォルトの名無しさん
20/06/09 22:16:29.17 aAgqnyde.net
バッチ処理って簡単な定時処理に使ってる人がほとんどだろうし
現状維持でこのまま使えたらそれでいいよ
865:デフォルトの名無しさん
20/06/14 08:05:01.57 Nip9LUw0.net
教えてください。
引数以外でショートカットの情報をバッチに渡すことはできますか?
バッチ自体のファイル名、パス名を取得する方法はよく見かけますが、、
ショートカットのファイル名や親フォルダの情報をバッチに渡す手段ってやっぱりないですかね?
866:デフォルトの名無しさん
20/06/14 10:09:40.34 Rvue1P4U.net
ショートカットって何の?起動したバッチファイルのもの?
ショトカ自体は dir *.lnk で取れるけど複数あると特定は面倒臭かったり無理かも
どのlnkからバッチが起動されたか?は作業ディレクトリがそのlnkと同じだとか限定条件下でないと無理じゃないかな
867:デフォルトの名無しさん
20/06/14 10:41:39.28 Nip9LUw0.net
>>829
やっぱり無理そうですね。
ショートカットのファイル名をショートカットのコマンドラインに渡してバッチに引き渡そうと企んだのですが、、、
%0とか%~dp0とか記述しても記述そのままで%1に渡るだけでした。
何か方法ないのかなと思い、、あきらめます。
ご回答ありがとうございます。
868:デフォルトの名無しさん
20/06/14 11:24:19.06 2FaHAA2B.net
ショートカットのプロパティで作業フォルダを弄ればいいだろ。
リンク先のバッチで%cd%参照。
ファイル名なんてリンク先に合わせりゃいいだろ。
869:デフォルトの名無しさん
20/06/14 11:26:00.19 Q6c7IGAp.net
>>830
もしショートカットファイルから元のファイル名を取得したいってことなら
wmicコマンドとか使えば良いんじゃない?
URLリンク(stac)
870:koverflow.com/a/29650022
871:デフォルトの名無しさん
20/06/14 11:45:22.44 2FaHAA2B.net
プロパティのリンク先に自分のフルパスを追加してもいい
リンク先のバッチで%1参照。
872:デフォルトの名無しさん
20/06/14 12:14:20.27 Nip9LUw0.net
>>831
仰る通り。
それがメンドーだな、と思っただけです。
プロパティ弄らずにファイル名変更だけで挙動変えようかと、、、
873:デフォルトの名無しさん
20/06/14 12:15:45.60 Nip9LUw0.net
>>832
そういうの、いろいろありますね。
VBSとかPSとか。
後者をSendToに入れてフォルダ内調査に使ったりしてます。