【.cmd】 バッチファイルスクリプト %15 【.bat】 (819レス)
1-

715
(6): 05/26(月)08:47 ID:iONSO6k9(1) AAS
>>714
それでもいいけど最近シンプルなのに書き換えたので参考にどうぞ

ドラッグアンドドロップ用バッチのサンプル
@echo off & set arg=& set a="%cmdcmdline:"=" "%"
set a=%a:""=%& call :x %%a:*%~x0" =%%
echo コマンド %arg%
pause & exit
:x
set a=%1& if not defined a exit /b
if "%a:~1,1%"==" " set a=%a: =" "%
set arg=%arg% %a:""=%& shift & goto x
716: 05/26(月)20:59 ID:mOG76bz3(1) AAS
>>715
何かわからんけど横からありがとう(・∀・)
717: 05/26(月)23:38 ID:sddMzjz1(2/2) AAS
>>715
今でも改良を続けているんですね
調べてみて導入を検討してみようと思います
718
(4): 714 06/09(月)23:42 ID:XIEmLRR3(1) AAS
>>556,715
2つを参考にして作ってみました

ドラッグ アンド ドロップ用
@echo off & set a="%cmdcmdline:"=%"
for /f "tokens=3* delims=:" %%i in (%a%) do (set a=%%i& set b=%%j)
set "a=%a:~-1%"
call :x "%a%:%%b: %a%:=" "%a%:%%"
:x
echo コマンド %*
pause & exit
719: 06/10(火)16:46 ID:HbVriPvf(1) AAS
UNCパスに:は無い
おれの環境では試せないけど
どうなのかな
720: 714 06/11(水)23:47 ID:h2Pmz4k5(1) AAS
UNCパスというのはネットワーク上のパスということですか
詳しくないのでよくわからないですけど
それがこのバッチに関係があるのでしょうか
721
(1): 06/12(木)06:01 ID:KDNtxLme(1) AAS
サーバの共有していないなら関係ない。
あるいはnet useでドライブ名を割当済でも関係ない。
問題なのはエクスプローラーで直接にUNCパスで移動して
そこでD&Dしたら"%~d1"は"\\"になるのでコロンが無いので
>>556>>718では引数の分離ができない
722: 714 06/12(木)23:37 ID:3VNaC5iR(1) AAS
>>721
説明ありがとうございます
UNCパスで移動中はこのバッチだと対応できないということですか
難しいですね
723: 06/13(金)01:33 ID:QWIL1FR+(1/2) AAS
もう
@echo コマンド %1 %2 %3 %4 %5 %6 %7 %8 %9
@pause
で手を打とうよ。あとは運用。
724
(1): 06/13(金)01:41 ID:Vx46a8qY(1) AAS
>>715 で問題無いようだが
725
(1): 06/13(金)11:27 ID:QWIL1FR+(2/2) AAS
通りすがりで正直なにしてるのかわからんけど、もしかしてやりたいのはこゆこと?

@echo off
setlocal
set ARGS=
set ORIG_ARGS=%*
call :main %ORIG_ARGS: =[全角空白]%
goto :eof

:main
if x%1 == x goto :sort
set ARG=%1
set ARG=%ARG:[全角空白]= %
if not %ARG:~0,1%%ARG:~0,1% == "" set ARG="%ARG%"
set ARGS=%ARGS% %ARG%
shift
goto :main

:sort
for /F "delims=" %%F in ('dir /S/B/OD %ARGS%') do echo コマンド "%%F"
pause
726: 06/13(金)17:53 ID:u+rmpblt(1) AAS
もういいからそれ
727
(1): 06/13(金)23:37 ID:lvrE3au7(1) AAS
>>725
試してみました
パスに全角スペースや半角スペースがあっても対応できるようですね
似たような方法を使ってるバッチをQiitaで見たことがあります
上手に回避できてると思いますがパスに&があると問題があります
%1 や %* では限界がある感じがするわ
728: 06/13(金)23:50 ID:BURDJDsC(1) AAS
ややこしい処理は
呼び出し側で処理したいデータを環境変数にセット
BATは何もせずPythonを呼び出す
にすればすべて解決
729: 06/14(土)04:23 ID:/OCzCvqy(1/2) AAS
環境変数てサイズに制限あるんで
大量のデータを渡す場合は普通にファイル渡しがいいかと。
親フォルダに半角スペースを入れてD&Dする方法もあるけど
それでも ab%cd%e.txt みたいのは化けるわけで
%* や %1 は取得時にすでに壊れてるのでどうにもならんわ
730
(2): 06/14(土)08:25 ID:yDCgYQHw(1/4) AAS
なるほど、あれの/Cオプションの引数にはあるけれど、あれがバッチに渡さないわけね
理解したんで あれ起動時のコマンドラインを愚直にパースするとこんな感じか

@echo off
setlocal enableDelayedExpansion

set CMDLINE=!CMDCMDLINE:*cmd" ="!
set Q="
set "S= "

set i=1
set ARG=

:loop
if !CMDLINE:~%i%! == !Q! goto :pause
set c=!CMDLINE:~%i%,1!
if !c! == !Q! (
call :Q
) else if not !c! == !S! (
call :NQ
) else (
set /a i += 1
)
goto :loop

続く
731
(1): 06/14(土)08:25 ID:yDCgYQHw(2/4) AAS
:Q
set ARG=!ARG!!c!
set /a i += 1
set c=!CMDLINE:~%i%,1!
if not !c! == !Q! goto :Q
set ARG=!ARG!!Q!
call :exec
set ARG=
set /a i += 1
goto :eof

:NQ
set ARG=!ARG!!c!
set /a i += 1
set c=!CMDLINE:~%i%,1!
if not !c! == !Q! if not !c! == !S! goto :NQ
set ARG="!ARG!"
call :exec
set ARG=
goto :eof

:exec
echo コマンド !ARG!
goto :eof

:pause
pause
732: 06/14(土)08:41 ID:yDCgYQHw(3/4) AAS
あ、ソート忘れたけどいいよね
文字化けするならforの前にchcp 65001入れておくれ
733
(1): 06/14(土)15:14 ID:eF2X+eHO(1) AAS
なにかおかしいと思ってたんだが
これ拡張子が.cmd のバッチファイルを想定してあるんだな
.bat だと無限ループするから変だと思った
734
(2): 外野 06/14(土)16:09 ID:/OCzCvqy(2/2) AAS
>>718 参考に作ってみた。拡張子bat。UNCパスOK。違ってたらごめん

@echo off & set "a=%cmdcmdline:"=%"
set "a=%a:*.bat=%" & call set arg="%%a: %~d1=" "%~d1%%"
echo コマンド %arg:* =% & pause
735: 06/14(土)16:43 ID:yDCgYQHw(4/4) AAS
>>733
そういうことなら set CMDLINE= の行を
set CMDLINE=!CMDCMDLINE:*%~x0" ="!
にすれば .cmd でも .bat でも .Cmd でも .BAT でもおけだな
736
(2): 06/15(日)07:57 ID:sG85beXD(1) AAS
>>730-731 に重大な欠陥があった

全角空白 とアンパサンド&echo.この文が単独で表示されたらダメ&pause

というファイル名を試したらダメだった
最後の行のpauseの後にexitを入れてcmd.ехеを終わらせる必要があった

これで >>727 は直せたはずだけどまだあったら指摘してください
なおUNCパス上でも動作に問題なし
737: 外野 06/15(日)10:50 ID:ZhGW5ICb(1/2) AAS
>>718
>>736さんの件で >>734 もexitを追加する必要があるようだ
738: 06/15(日)13:37 ID:E4ppjALA(1) AAS
>>736
試したけどファイル名の表示までは問題ないし
意図していない動作には違いないけど
余計な文字とpauseが1回余分に出るだけだね
739: 外野 06/15(日)14:22 ID:ZhGW5ICb(2/2) AAS
pauseだと無害だけどdelだったらヤバいみたいな
740
(1): 06/16(月)07:47 ID:FL2oCcdJ(1/6) AAS
>>734
2行目を

call set "a=%%a:*%~x0 =%%" & call set arg="%%a: %~d1=" "%~d1%%"

にすると .cmd 派としては嬉しい
ついでに %arg% に手を加えなくてもすむ
741
(1): 06/16(月)12:04 ID:3rn8pxf/(1/4) AAS
>>740さんの指摘で訂正しました。ありがとう

@echo off & set "a=%cmdcmdline:"=%"
call set "a=%%a:*%~x0 =%%" & call set arg="%%a: %~d1=" "%~d1%%"
echo コマンド %arg%
pause & exit

ちなみに最後の exit が無いと a&b.txt をD&Dしたら
バッチ終了後に既存の b.txt が勝手に開きました
(フルパス空白無しの場合)
742: 06/16(月)12:25 ID:CXTiNK7e(1) AAS
こんな有様でもDOSの頃は良かったんだけどね
Windowsで規制解除した時にエスケープ決めておけば
743
(1): 06/16(月)12:56 ID:h70+cne9(1/2) AAS
昔はD&Dなんて無かったからなあ
744
(1): 06/16(月)20:18 ID:FL2oCcdJ(2/6) AAS
>>741
改良提案したのにごめん、%1に依存してるからNGかもと気づいた
ファイル名でなくディレクトリ名に & があって、パス全体では空白がない場合たぶんNG
1-
あと 75 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ

ぬこの手 ぬこTOP 0.015s