[過去ログ] 【.cmd】 バッチファイルスクリプト %12 【.bat】©2ch.net (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
593: 2018/07/09(月)22:17 ID:FlHlLFRn(1) AAS
nbspでもなるな
594: 2018/07/09(月)22:21 ID:CF6LQR6B(5/6) AAS
a&b.txtとかはcmd. exeに入る前に対処しないとね
BAT以外の別スクリプトにD&Dして、そっちで引数を加工後にBATを呼んでもらうようにするぐらい
595: 2018/07/09(月)22:25 ID:CF6LQR6B(6/6) AAS
ところでcmdスレなのに、なんでcmd. exeがNGワードなんだよ
596: 2018/07/09(月)22:54 ID:XFrzb5uR(1) AAS
確認してないけどcloudflareがコマンドインジェクション対策で弾いてんるんじゃないの
ls -lとかもできなかったはずだし
597
(1): 2018/07/10(火)07:31 ID:LbQkaO6y(1) AAS
Ruby, PowerShell を使った方が良い

バグるのは低品質だし、時間の無駄
598
(1): 2018/07/11(水)20:28 ID:mCCOIiej(1) AAS
>>597
Ruby は実行環境のインスコがいる。
PoerShell はD&Dできない。
それ以前に、特殊な世界ではいまだに XP が現役だったりする。
Win7SP1以降のアップデートパッチを1個でも当てたら動作保証しませんなどというフザけた業務システムも実在する。
レジストリを汚すインスコは駄目だけど、ネイティブコンパイルしたコマンドをコピーして使う分にはおk、てな環境もある。

とりあえず、スクリプトを使用した D&D のファイルパス問題回避の最大公約数的解決は VBScript しかないんじゃないかな。
(さすがに Win9X な環境はもうないだろう…と思うけど)
使える環境なら検討した方がいいけど、安易な「○○使えばいい」という回答は頭が悪すぎる。
599: 2018/07/11(水)21:11 ID:/R7esjNT(1) AAS
なら環境毎に勝手に使えばいいんだから最大公約数なんて決める必要ないのでは
600: 2018/07/12(木)01:03 ID:MfQE+JgU(1) AAS
NTも現役だよボケ
601: 2018/07/12(木)11:56 ID:72SuVZq5(1) AAS
それ以前に、DOS自体が、現e(ry
602
(1): 2018/07/12(木)14:54 ID:+klw6xr1(1/9) AAS
>>569 無理矢理にバッチで書いてみた

@echo off
set "a=%cmdcmdline:"=""%"
setlocal enabledelayedexpansion
set /a b=0,n=0
set "s=" & set "d=""
:x1
if not "!a:~%b%,1!"=="/" set /a b+=1 & goto x1
:x2
if "!a:~%b%,1!"=="!d!" set /a n+=1
if !n! equ 6 set /a b+=2 & goto x3
set /a b+=1 & goto x2
:x3
set "a=!a:~%b%,-2! " & set /a b=0
:x4
if not defined a goto x8
if "!a:~%b%,1!"=="!d!" set /a n=0 & goto x6

下に続く
603: 2018/07/12(木)14:54 ID:+klw6xr1(2/9) AAS
:x5
if not "!a:~%b%,1!"==" " set /a b+=1 & goto x5
set "s=!s!!d!!d!!a:~0,%b%!!d!!d! " & set /a b+=1
set "a=!a:~%b%!" & set /a b=0 & goto x4
:x6
if "!a:~%b%,1!"=="!d!" set /a n+=1
if !n! equ 4 set /a b+=1 & goto x7
set /a b+=1 & goto x6
:x7
set "s=!s!!a:~0,%b%! " & set /a b+=1
set "a=!a:~%b%!" & set /a b=0 & goto x4
:x8
set "s=!s:""="!"
endlocal & set s=%s%
for %%f in (%s%) do echo "%%~nxf"
pause
604: 2018/07/12(木)20:30 ID:Gmf0IrMF(1/5) AAS
>>602
ファイル名に全角スペースが含まれていない場合に""が一つ余計に出力されます
605: 2018/07/12(木)20:30 ID:Gmf0IrMF(2/5) AAS
訂正
全角スペースが含まれず半角スペースが含まれている場合
606
(1): 2018/07/12(木)20:48 ID:+klw6xr1(3/9) AAS
レスありがとう
でもこちらでは再現できない
出来たら具体例を
607: 2018/07/12(木)21:08 ID:+klw6xr1(4/9) AAS
もしかしたらset文の行末にスペースがありませんかね?
行末のスペースが有ったら全て削除してみて下さい
608: 2018/07/12(木)21:25 ID:Gmf0IrMF(3/5) AAS
>>606
もうちょい検証してこんなファイル名で発生するのを確認しました
"aーa b.txt"
""
専ブラからコピーしたんでスペースとかはありませんでした
長めのスクリプト貼るときはpastebinとか使ったほうがいいかもしれません
609: 2018/07/12(木)21:31 ID:+klw6xr1(5/9) AAS
バッチファイル名にスペースがあると不味いようです
610: 2018/07/12(木)21:37 ID:+klw6xr1(6/9) AAS
違うな...
ファイル名なんですか?
611: 2018/07/12(木)21:39 ID:Gmf0IrMF(4/5) AAS
バッチファイル自体はtest6.batなのでスペースはありません
このファイル名だと処理自体が終わらなくなりました
ーa ーb ーc.txt
612
(2): 2018/07/12(木)21:39 ID:Gmf0IrMF(5/5) AAS
最初に検証したファイル名は
aーa b.txt
です
613: 2018/07/12(木)21:52 ID:+klw6xr1(7/9) AAS
バッチファイル名
"test.bat" がOK, "test - コピー.bat" が NG
"ー" がダメ文字っぽい
なんだこりゃ
614: 2018/07/12(木)22:45 ID:+klw6xr1(8/9) AAS
>>612
とりあえず最初の3行を

@echo off
setlocal enabledelayedexpansion
set "a=!cmdcmdline:"=""!"
set "a=!a:ー=/1!"

最後の5行を

:x8
set "s=!s:/1=ー!"
set "s=!s:""="!"
endlocal & set s=%s%
for %%f in (%s%) do echo "%%~nxf"
pause

ダメ文字の詳細は不明
まだ有ったら、/2 /3 ... 置換
615: 2018/07/12(木)23:31 ID:+klw6xr1(9/9) AAS
これも追加
5行目
set "a=!a:―=/2!"
:x8の次の行に
set "s=!s:/2=―!"
616: 2018/07/13(金)00:39 ID:7GlypEZW(1) AAS
漢字コードが関係しているのかも
shift−jis
chcp 932

utf-8
chcp 65001

で試してみたら
617
(2): 2018/07/13(金)06:59 ID:laaSwUH8(1/3) AAS
if文のバグ?

@echo off
setlocal enabledelayedexpansion
set a=ーー
set b=――
set c=xx
set d=""
if "!a!"=="!d!" echo NG1
if "!b!"=="!d!" echo NG2
if "!c!"=="!d!" echo NG3
pause

結果は
NG1
NG2
618: 2018/07/13(金)19:59 ID:laaSwUH8(2/3) AAS
>>617
if "!a!"=="!b!" echo NG4

結果は
NG4

まあ、見た目は似ているが...
619: 2018/07/13(金)20:29 ID:laaSwUH8(3/3) AAS
ちなみに >>617 をメモ帳にコピペして
変数 a の文字列で検索したら、なぜか変数 b にも一致したりする
逆もまた然り
620
(1): 2018/07/14(土)06:43 ID:8rUsawXH(1/3) AAS
>>612
if文の不具合は引用符絡みのようなので
それを削除して書き直しました

@echo off
call :set_arg arg
if not defined arg goto :eof
for %%f in (%arg%) do echo "%%~nxf"
pause & goto :eof

:set_arg
setlocal enabledelayedexpansion
set a=!cmdcmdline!
set /a b=0,n=0
set "s=" & set "c=/" & set "e= " & set "d=""
:x1
if not !a:~%b%^,1!==!c! set /a b+=1 & goto x1
:x2
if !a:~%b%^,1!==!d! set /a n+=1
if !n! equ 3 set /a b+=2 & goto x3
set /a b+=1 & goto x2

下に続く
621: 2018/07/14(土)06:43 ID:8rUsawXH(2/3) AAS
:x3
set a=!a:~%b%,-1!& set /a b=0
:x4
if not defined a goto x8
if !a:~%b%^,1!==!d! set /a n=0 & goto x6
:x5
if not !a:~%b%^,1!==!e! set /a b+=1 & goto x5
set s=!s!!d!!a:~0,%b%!!d!!e!& set /a b+=1
set a=!a:~%b%!& set /a b=0 & goto x4
:x6
if !a:~%b%^,1!==!d! set /a n+=1
if !n! equ 2 set /a b+=1 & goto x7
set /a b+=1 & goto x6
:x7
set s=!s!!a:~0,%b%!!e!& set /a b+=1
set a=!a:~%b%!& set /a b=0 & goto x4
:x8
if defined s set s=!s:~0,-1!
endlocal & set %1=%s%
622
(1): 2018/07/14(土)09:47 ID:17hM4zE5(1) AAS
>>620
パスに全角半角含むかどうかに関わらず
a.pngがNG
a - コピー.pngがOK
あ.pngがNG
1-
あと 380 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ

ぬこの手 ぬこTOP 0.024s