winのbatで複数ファイルのD&Dに対応させたい

このQ&Aのポイント
  • Windows7で、ドラッグアンドドロップしたファイル名を全角から半角に変換するbatファイルを作成したい。
  • 現在は1つずつドラッグアンドドロップして変換しているが、複数まとめて対応したい。
  • 他のサイトを参考に作成したが、いくつか無駄なコマンドがある可能性もあるので、効率的な方法を知りたい。
回答を見る
  • ベストアンサー

winのbatで複数ファイルのD&Dに対応させたい

windows7で、ドラッグアンドドロップしたファイル名を全角から半角に変換するbatファイルを作成しています。 1つ1つD&Dして変更させることは出来たのですが、複数まとめてD&Dしても対応出来るようにしたいのですが、どのようにしたら良いのでしょうか。 ネットでいろんなサイトを見ながら作ったので、無駄なコマンドがあるかもしれません。 効率の悪いこともしているかもしれません。 いろんなサイトを見ても、よく理解出来なかった為、見よう見まねでやったらとりあえず動いたというレベルです。 ====== echo on for %%f in ( "%~n1.*" ) do call :sub "%%f" exit /b :sub set fname=%1 set fname=%fname:A=A% set fname=%fname:B=B% set fname=%fname:C=C% set fname=%fname:D=D% set fname=%fname:E=E% set fname=%fname:F=F% set fname=%fname:G=G% set fname=%fname:H=H% set fname=%fname:I=I% set fname=%fname:J=J% set fname=%fname:K=K% set fname=%fname:L=L% set fname=%fname:M=M% set fname=%fname:N=N% set fname=%fname:O=O% set fname=%fname:P=P% set fname=%fname:Q=Q% set fname=%fname:R=R% set fname=%fname:S=S% set fname=%fname:T=T% set fname=%fname:U=U% set fname=%fname:V=V% set fname=%fname:W=W% set fname=%fname:X=X% set fname=%fname:Y=Y% set fname=%fname:Z=Z% set fname=%fname:a=a% set fname=%fname:b=b% set fname=%fname:c=c% set fname=%fname:d=d% set fname=%fname:e=e% set fname=%fname:f=f% set fname=%fname:g=g% set fname=%fname:h=h% set fname=%fname:i=i% set fname=%fname:j=j% set fname=%fname:k=k% set fname=%fname:l=l% set fname=%fname:m=m% set fname=%fname:n=n% set fname=%fname:o=o% set fname=%fname:p=p% set fname=%fname:q=q% set fname=%fname:r=r% set fname=%fname:s=s% set fname=%fname:t=t% set fname=%fname:u=u% set fname=%fname:v=v% set fname=%fname:w=w% set fname=%fname:x=x% set fname=%fname:y=y% set fname=%fname:z=z% set fname=%fname:1=1% set fname=%fname:2=2% set fname=%fname:3=3% set fname=%fname:4=4% set fname=%fname:5=5% set fname=%fname:6=6% set fname=%fname:7=7% set fname=%fname:8=8% set fname=%fname:9=9% set fname=%fname:0=0% ren %1 %fname% ================= 複数のD&Dへの対応、効率化などご教示いただけますと幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4834/10234)
回答No.1

echo on :LOOP for %%f in ( "%~n1.*" ) do call :sub "%%f" shift if not "%~1"=="" goto LOOP exit /b 以下同じ。 D&D下ファイルだけを対象にするなら、 echo on :LOOP call :sub "%~1" shift if not "%~1"=="" goto LOOP exit /b で良いように思いますけど。

tukikageran
質問者

お礼

ありがとうございます! 無事複数ファイルのD&Dに対応しました。

関連するQ&A

  • JavaScriptの配列について

    var old_array = Array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '<', '#', '/', '>', '%', '.', '*', '0', '!', '?', ':', '=', '|'); var new_array = Array('b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '<', '#', '/', '>', '%', '.', '*', '0', '!', '?', ':', '=', '|'); のような配列があり、 abcと入力するとbcd DEFと入力するとEFG 012と入力すると!23 というようなものを作りたいのですがどうすればいいでしょうか。

  • 変換テーブルを使った、文字列置換[JavaScript]

    以下のような、変換テーブルがあるとします。 var ascii = [' ', '!', '"', '#', '$', '%', '&', "'", '(', ')', '*', '+', ',', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '<', '=', '>', '?', '@', 'A', 'B', 'C', 'D', 'E', 'F','G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', '\\', ']', '^', '_', '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~']; var htmlChar = [' ', '!', '"', '#', '$', '%', '&', ''', '(', ')', '*', '+', ',', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '<', '=', '>', '?', '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', '\', ']', '^', '_', '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~']; ブラウザの「ソースを見る」で、ソースを見るとHTMLのフォームのテキスト入力フィールドのvalueに特殊文字コード「'」と表示されているとします。 例;ブラウザの「ソースを見る」で、ソースを見た場合: <input type="text" value="'" /> これを変換テーブルを使って、ブラウザの「ソースを見る」で、ソースを見たときに、特殊文字(' なら '(シングルクォート)に表示させたいのですが、可能でしょうか? 変更後の例;ブラウザの「ソースを見る」で、ソースを見た場合: <input type="text" value="'" />

  • JavaScriptの文字のエンコードについて

    フォームの入力欄で、「'」(シングルクォート)を入力してサブミットすると、ブラウザ(Firefox3.5)で見ると「'」と表示されていますが、ブラウザのソースを見るとvalueの¥ところには、「'」と表示されています。 これは、PHPでエンコードされているせいなのですが、 PHPでエンコードされた「'」を、JavaScriptを使って、ブラウザからソースを見たときに「'」と表示できるでしょうか? ソースは、こんな感じで書いたのですが、動作しませんでした........。 function chChar(){ var keyValue = document.getElementById("delete_key").value; var ascii = new Array(' ', '!', '"', '#', '$', '%', '&', "'", '(', ')', '*', '+', ',', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '<', '=', '>', '?', '@', 'A', 'B', 'C', 'D', 'E', 'F','G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', '\', ']', '^', '_', '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~'); var htmlChar = new Array(' ', '!', '"', '#', '$', '%', '&', ''', '(', ')', '*', '+', ',', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '<', '=', '>', '?', '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', '\', ']', '^', '_', '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~'); var re = new RegExp(htmlChar); if(keyValue.match(re)){ for(i=0; i<ascii.length; i++){ keyValue = keyValue.replace(htmlChar[i], ascii[i]); } } return keyValue; }

  • 多次元配列の初期化

    多次元配列の初期化を行いたいのですが、 下記の方法では、配列の値が多くなったときに大変 なので他に良い方法はありませんでしょうか? char lesson[7][6] = { {'A', 'B', 'C', 'D', 'E', 'F'}, {'G', 'H', 'I', 'J', 'K', 'L'}, {'M', 'N', 'O', 'P', 'Q', 'R'}, {'S', 'T', 'U', 'V', 'W', 'X'}, {'Y', 'Z', 'a', 'b', 'c', 'd'}, {'e', 'f', 'g', 'h', 'i', 'j'}, {'k', 'l', 'm', 'n', 'o', 'p'}, };

  • 順列・数え上げ

    よろしくお願いします。 ここに下のような390個の文字があります。 (A,B,C,D,E,F,G,H,I,J,K,L,M がそれぞれ10個ずつ、 N,O,P,Q,R,S,T,U,V,W,X,Y,Z がそれぞれ20個ずつあります。) この390個の文字から235文字を選んで一列に並べる方法は全部で何通りありますか。 A B C D E F G H I J K L M A B C D E F G H I J K L M A B C D E F G H I J K L M A B C D E F G H I J K L M A B C D E F G H I J K L M A B C D E F G H I J K L M A B C D E F G H I J K L M A B C D E F G H I J K L M A B C D E F G H I J K L M A B C D E F G H I J K L M N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z 以下、私が考えたことを書きます。 この390個の文字から235個の文字を選ぶ組み合わせの総数は、 (Σ[k=0~10]x^k)^13*(Σ[k=0~20]x^k)^13 を展開したときのx^235の係数ですから、 23463540513956137996043929988 通りだということは分かります。 この23463540513956137996043929988 通りのそれぞれについて235個の文字 の順列(同種のものを含む順列)を数え上げれば答えは出ると思いますが、これは あまりにも大変な作業です。 何かよい知恵はないでしょうか。

  • THE TREASURE HUNT - 準決勝戦開始メールの文字化け

    上記メールを受け取りましたが、下記のように文字化けしております 送信元に再送信を依頼しましたが、なしのつぶてです。 ここで、問題内容を教えていただくことはできますでしょうか。 THE TREASURE HUNT - 準決勝戦開始メール $B#8$D$NL\ $,#1$D$r=|$-Ey$7$-J8;z$r8+$k (B $B$=$N:G8e$N#8J8;z$N80$r8+$D$1$h (B THE TREASURE HUNT $B8x<0%5%$%H (B $B$NH,$DL\ $N%+!!>^IJ!' (B " $B#V#o#l#v#o (B $B#X#C#9#0 (B $B1G2h (B $B!X%Q%$%l!<%D!&%*%V!&%+%j%S%"%s!?%G%C%I%^%s%:!&%A%'%9%H!Y%9%Z%7%c%k!&%(%G%#%7%g%s (B" $B#1Bf (B $B1G2h$N!X%Q%$%l!<%D!&%*%V!&%+%j%S%"%s!?%G%C%I%^%s%:!&%A%'%9%H!Y$K$A$J$s$@;EMM$N (B $B#V#8 (B $B%(%s%8%sEk:\ $H%f%K!<%/$JAuHw$,<+K}$N (B $B#V#o#l#v#o (B $B#X#C#9#0 (B $B$G$9!# (B $B$3$N@$$K (B 1 $BBf$7$+$J$$L%OG$N%^%7%s$,$"$J$?$rBT$C$F$$$^$9 (B... $B@$3&$N$I$3$+$G!# (B

  • コマンドプロンプトで.batファイルを作っています。

    古いバックアップディレクトリを削除するバッチファイルを作りたいです。 cd /d e:\fileDir REM:【最終のディレクトリを削除】 for /F %F in ('dir /b /o:-d') do set fname=%F rmdir /s /q %fname%  をコマンドプロンプト画面に貼り付ければ上手く動作しますが*.batと名前を付けて保存したものをダブルクリックでは全く動作しません。  コマンドプロンプト上で実行するのとバッチファイルで実行することの違いについて調べてみましたがなかなか動作するものになりません。  どなたかご教示いただけないでしょうか    

  • 複数ファイルの出力

    質問があります。1600個のデータを読み込んで(16個ずつの組で100組)、1番目、3番目、5番目、7番目のデータをss[1].txtとして出力し、同様に2番目、4番目、6番目、8番目のデータをsk[1].txt、9番目、11番目、13番目、15番目のデータをks[1].txt、10番目、12番目、14番目、16番目のデータをkk[1].txtとして出力させます。以下、ss[2].txt,sk[2].txt,ks[2].txt,kk[2].txt・・・に関してはそれぞれ直前のファイルに16を足したデータ(例えばss[2].txtなら、17番目、19番目、21番目、23番目のデータを出力)を出力させるというプログラムです。 以下に自分で作ったプログラムを掲載します。 void ecg_rr(fp,data_max) FILE *fp; { int i,j=0; int c=1; char fname[64]; data[0][i]=trend_data[0][i]; for(i,j=0;i<100,j<100;i++,j++) { sprintf(fname,"ss[%d].txt",1+i); fp = fopen(fname,"w"); fprintf(fp,"%4d\n",c); fprintf(fp,"%8.8f\n",data[0][0+j*16]); fprintf(fp,"%8.8f\n",data[0][2+j*16]); fprintf(fp,"%8.8f\n",data[0][4+j*16]); fprintf(fp,"%8.8f\n",data[0][6+j*16]); sprintf(fname,"sk[%d].txt",1+i); fp = fopen(fname,"w"); fprintf(fp,"%4d\n",c); fprintf(fp,"%8.8f\n",data[0][1+j*16]); fprintf(fp,"%8.8f\n",data[0][3+j*16]); fprintf(fp,"%8.8f\n",data[0][5+j*16]); fprintf(fp,"%8.8f\n",data[0][9+j*16]); fclose(fp); /*ks,kkに関しても同様*/ } } これだと100個ずつファイルを出力できるのですが、データが全て0として出力されてしまいます。

  • 【Ruby】n=2;eval$s=%q{Z=?\s

    【Ruby】n=2;eval$s=%q{Z=?\s;eval"$><<S=Z*4"+(%w{+"n=#{-~n%3};eval$s=%q{#$s}#YE";$>.isat ty&& (r="\e[43;3#{C="#{n*5%9+1}m"}#{T}\e[4"+C+S[1568,79]+E="\e[0m";r[81,21]="\e[37m# {(["Ca f\u00e9_au_lait","Yogurt","Fruit_mix"][n].chars*Z).tr(?_,"").center(21)}\e[3"+C ;a=%~POS A[`ER]`PASX1cTc22V6NNP.QOYGMXXIG7KK:bCCaVN8WZ[]UQMMS`cBFFJJHHY`QTUIUURRPTOcRV_a LLUT`WXL W]a_c_bV`XXYa_9}+[T=' B A L A N C E D F O O D ']*0+%w{bZZYb_][9cc ????`9^acG G,,N9DU`DKcUKU3K4!4!4!QXTSSS""9`9`#U`KcK--S;;/GOT<QE$U=>F==Q0@%U/P/B=S0Q`PM&XVV V15CMRHMSH RKO>==QMQVR 'b`&DK>BS<XE$T>T33DDDUM<V@@E(((TCT0A<0A"')5CXPcQa54X@@Y#KcK--S;; /GOT<Q`$)T)T :a4A%%#X VS6a ' b`&DK>BS<T7**] ^^b6+++]~; P=Str uct.new(:x,:d,:p,:v );M=(-5**7.. b=0).m ap{[]};A=s =[];t=Time.now;q=?y.succ;( s=S .scan(/.+/ );M[0]<<P [25i-b%3*5i- 9,0,0 ,2+1 i] ;6 0.t ime s { |i |j= i %2 0 ;i< 40 ? [ M[j -1],m=M[j],M [j+1 ]]. ea ch {| n| m. ea ch {| p| n. ea ch {| q| d=p .x -q .x ;w=d.abs-4;w <0& &( i<2 0? p. d+= w *w: p. p+= w *( d *(3 -p. d- q.d) +(p.v-q.v)*4 )/p .d )} } } :M . shif t .ea c h{ |p| y, x= ( p. x+= p.v +=p.p/10).re ct; p.p = [4 3- b/9 .0-y,1 ]. m in- [x,p .d=0 , x -9 2].s ort[1]*2i;p. v/=[ 1,p.v.a bs/2].max;M[20-j+[0 ,(x+ 4).div(5 ),19].sort[1]]<<p;35.tim es{|w|v=x.to _i-3+w %7;c=s[w=y.div(2)-2+ w/7];(x-v)**2+(y-w*2)**2<16&&0<=w&&c &&(k=(w*2-21 )**2/99)<=v&&c[v]&&k+79!=v&&c[v]=q}}};(24-b/18..21).map{|k|s[k]=Z*(k=(k*2-21)** 2/99)+q*79 +Z+q*2*(6-k)};s*="\e[B\r";" Your favorite flavor ";b+=1;A<<"\e[A\r"*21+s.gsub (/\172+/){ "\e[43m"+$&.tr(q,Z)+E})while+s.count(q)<1950;A.map{|q|sleep([t-Time.now+3,2e-2] .max);$> <<s=q};$><<s.gsub(?m,";33m").gsub(Z){S.slice!(/./)};b=?]*33.upto(91){|i|a=~/../ ;a=$'.gs ub(i.chr,$&)}*2;Z<<8;(b+a.gsub(?^,"^]"*41)+b).bytes{|c|c-=86;c<8?sleep(3e-2):$> <<(c<( 'CalorieMate-Liquid-Quine';9)?r.slice!(/\e.*?m|./):c>9?"\e[%X"%c:Z)});puts})*"" }#YE 質問 これを実行すると結果は何と表示されますか? オンラインエディタ上で実行しても何も結果がコンソール画面に表示されませんでした。 これはルビーコードではないのですか?どういう意味が含まれているソースコードですか?

    • ベストアンサー
    • Ruby
  • フォルダー内の複数ファイル名を一括で変名するbat

    フォルダー内の複数ファイル名を一括で変名するbatを教えてください。 batは、デスクトップに配置して 処理するフォルダーをD&Dして処理させる形式をとしたいです。 以下のような形式です。  No1 aaaa bbbb [com : *********].zip を  No1 aaaa bbbb.zip に変名する。   (*******は任意の文字列) 例えば、 No1 aaaa bbbb [com : taken2110221100014].zip であれば No1 aaaa bbbb.zip に変名する。 以下が参考になりそうなので https://oshiete.goo.ne.jp/qa/9263608.html 記事中の助言を元に以下のようにコードを修正してみましたが うまく処理できませんでした。 bat(test,bat,test2.bat)のどこを再修正すれば希望の処理ができますか ? 希望は、下記ですが 「batは、デスクトップに配置して 処理するフォルダーをD&Dして処理させる形式をとしたいです。」 batを修正してもこのbatでは、D&Dで処理することは可能で無い場合は アドバイス又は他の参考なりそうなURLを紹介ください。 '------------------------------------------ rem test.bat echo off for /F "delims=" %%f in ('dir /*.mp4') do call :sub "%%f" exit /*.mp4 :sub set fname=%~1 set n=0 :loop call set c=%%fname:~%n%,1%% set /a n=n+1 if "%c%"=="" goto :EOF if "%c%"=="[com" goto break goto loop :break set /a n=n-1 set ext=%~x1 call set newname=%%fname:~0,%n%%% call set newname=%newname%%ext% if "%newname%"=="" goto :EOF if "%newname:~0,1%"=="." goto :EOF ren "%fname%" "%newname%" goto :EOF '-------------------------------------- rem bat2.bat for /F "tokens=1* delims=[com" %%F in ('dir /b *.mp4') do echo move %%F[com%%G %%F.mp4 '--------------------------------------

専門家に質問してみよう