[前の記事]« [2000]XCOPY「複数ファイル除外」の指定方法(/EXCLUDE)
[次の記事][NT系]attribコマンドのパラメータ指定方法 »

関連オンラインソフト配布サイト:
Vector>ダウンロード(top) |>MS-DOSまたは汎用 | >WindowsVista/XP/2000/NT

▲カテゴリー「バッチファイルの起動、引数の取得」索引へ

[NT系]起動時に指定したファイル名ごとにバッチ処理を分岐したい

300.
ファイル名を自分で指定
2005年03月04日(金) 16時20分
sona
●DOS/Windowsのバージョン
2000↓

(以下ご自由に質問文をお書きください)
よろしくお願いします。
downlodeフォルダーにつねに複数のテキストファイルがあります。
その中のひとつをMS-DOS バッチ ファイルで行うときに、自分でファイル名を指定することは可能でしょうか?
301.
Re:ファイル名を自分で指定
2005年03月04日(金) 22時08分
YanaKen
sonaさん

>downlodeフォルダーにつねに複数のテキストファイルがあります。
>その中のひとつをMS-DOS バッチ ファイルで行うときに、

「テキストファイルをMS-DOSバッチファイルで行う」
 って、どうも日本語としてよくわからないですけど、

「あるフォルダー内の複数のテキストファイルの中のどれか一つを選んでバッチファイルで処理したい場合、そのテキストファイル名はどう指定すればバッチファイルに与えられるか?」

 みたいなことでしょうか?
 仮にそうだとすれば答えは簡単で、

・バッチファイル(のアイコン)に何かのファイルをマウスでドラッグ&ドロップすると、
・そのバッチファイルが起動し、ドロップされたファイルの名前はそのバッチファイル内では%1で参照できる。

 ……というふうにできてます。
 たとえば下記のような内容のバッチファイルを作って、少し試してみられるとよいかと思います。

@echo off
echo あなたは「%1」を指定しました。
pause

YanaKen
305.
Re2:ファイル名を自分で指定
2005年03月07日(月) 15時42分
sona
YanaKenさん
ありがとうございます。
ドラッグするほうほうがあるんですね。
勉強になります。 <(_ _)>

@echo off

rem download フォルダ内の料と税の *.datファイルをFDへ名前を変更しコピーします。
if %1 EQU c:\download\*209010.dat copy %1 a:\RYO.TXT

if %1 EQU c:\download\*209020.dat copy %1 a:\ZEI.TXT

echo 「%1」です。!!
pause

echo 処理が終了しました。
pause

としてみたのですが、うまくいきません。

%1 には c:\download\20050307209010.dat とはいっているはずなのですが、この場合、ユニークは使えないのでしょうか?
それと、echo 「%1」です。!!ではすべてのパスは表示されないのでしょうか?
307.
Re3:ファイル名を自分で指定
2005年03月07日(月) 17時07分
otn
>それと、echo 「%1」です。!!ではすべてのパスは表示されないのでしょうか?

ドラッグドロップすれば、%1 にはフルパスで渡るはずです。そうなっていませんか?

>@echo off

>rem download フォルダ内の料と税の *.datファイルをFDへ名前を変更しコピーします。
>if %1 EQU c:\download\*209010.dat copy %1 a:\RYO.TXT

>if %1 EQU c:\download\*209020.dat copy %1 a:\ZEI.TXT

こういう * を使ったマッチングは出来ません。

rem HEAD=ドライブ名とフォルダ名
set HEAD=%~dp1
rem FILE=ファイル名     
set FILE=%~nx1
rem TAIL=FILEの末尾10文字
set TAIL=%FILE:~-10%
if /i "%HEAD%%TAIL%" == "c:\download\209010.dat" copy %1 a:\RYO.TXT
if /i "%HEAD%%TAIL%" == "c:\download\209020.dat" copy %1 a:\ZEI.TXT

というような感じですね。うまく行くまでは先頭の@echo offを取って確認しながらがいいでしょう。
310.
Re4:ファイル名を自分で指定
2005年03月07日(月) 17時33分
sona
ありがとうございます。

>ドラッグドロップすれば、%1 にはフルパスで渡るはずです。そうなっていませんか?

ファイル名のところが略されてしまっています…


>rem HEAD=ドライブ名とフォルダ名
>set HEAD=%~dp1
>rem FILE=ファイル名     
>set FILE=%~nx1
>rem TAIL=FILEの末尾10文字
>set TAIL=%FILE:~-10%
>if /i "%HEAD%%TAIL%" == "c:\download\209010.dat" copy %1 a:\RYO.TXT
>if /i "%HEAD%%TAIL%" == "c:\download\209020.dat" copy %1 a:\ZEI.TXT

はじめたばかりで、%~dp1 %~nx1の意味がわからないです。
良ければどういうことなのかおしえてもらえませんか?

あと、何かいいHPはないでしょうか?
312.
Re4:ファイル名を自分で指定
2005年03月07日(月) 18時09分
sona
>rem HEAD=ドライブ名とフォルダ名
>set HEAD=%~dp1
>rem FILE=ファイル名     
>set FILE=%~nx1
>rem TAIL=FILEの末尾10文字
>set TAIL=%FILE:~-10%
>if /i "%HEAD%%TAIL%" == "c:\download\209010.dat" copy %1 a:\RYO.TXT
>if /i "%HEAD%%TAIL%" == "c:\download\209020.dat" copy %1 a:\ZEI.TXT
pauseを入れて、ひとつずつ確認したのですが、set TAIL=%FILE:~-10%でTAILに何も入りませんでした…
-10%を8%に変更してやり直してみたんですが、TAIL=03~1.DATになってしまいます…

入力Fは、20050307209010.datなのですが、どうしてなのでしょう? 
313.
Re5:ファイル名を自分で指定
2005年03月07日(月) 18時18分
YanaKen
sonaさん

>あと、何かいいHPはないでしょうか?

 誰にとっても「いい(わかりやすい)HP」かどうかはまあ、自信ないですけど(^^;、当掲示板では右上に親サイト「DOS/Vコマンド・リファレンス」の検索窓を設けてありますので、掲示板ともども活用してください。

↓サイトトップへのリンク
http://fpcu.on.coocan.jp/dosvcmd/
↓バッチファイル関連
http://fpcu.on.coocan.jp/dosvcmd/batch.htm

>はじめたばかりで、%~dp1 %~nx1の意味がわからないです。
>良ければどういうことなのかおしえてもらえませんか?

 %1,%2...といったパラメータの参照書式の拡張機能です。下記に概略をまとめてありますので参照してみてください。

http://fpcu.on.coocan.jp/dosvcmd/batch.htm#param

YanaKen
314.
Re6:ファイル名を自分で指定
2005年03月07日(月) 18時38分
sona
YanaKenさんありがとうございます。
さっそくみさせていただきました。
http://fpcu.on.coocan.jp/dosvcmd/batch.htm#param

%0~%9までだということはわかったのですが、
20050307209010.datのotnさんに教わった、-10%はできるのでしょうか?
%10でやってみたところ、TAIL=ATになってしまいます。
その前の処理のFILEを取得するときに結果が、
FILE=200503~1.DATになっているためだとおもうのですが、
FILE=20050307209010.DATと全ての名前を取得するにはどうしたらいいのですか?
315.
Re7:ファイル名を自分で指定
2005年03月07日(月) 20時57分
YanaKen
sonaさん

>%0~%9までだということはわかったのですが、
>20050307209010.datのotnさんに教わった、-10%はできるのでしょうか?
 まったく初めということで、無理もないとは思いますが、知識が整理されていない感じです。あまり焦って結論を求めず、まずは手元に1冊はしかるべき参考書をお持ちになることをおすすめしたいところです。

 otnさんのコメント中の"%FILE:~-10%"という部分で使われているのは、setというコマンドに対する文字列操作の命令です。%0~%9とは別のものであって、
「環境変数FILEのうしろから10文字分を抽出しなさい」
 ……という意味あいになります。
 (わかりづらい内容なのでますます混乱するかもしれませんが)、このあたりについては、
 set /?
または help set
 ……でヘルプをご覧になってみてください。

>その前の処理のFILEを取得するときに結果が、
>FILE=200503~1.DATになっているためだとおもうのですが、
>FILE=20050307209010.DATと全ての名前を取得するにはどうしたらいいのですか?

 本来の名前ではなくMS-DOS互換の「短いファイル名」が環境変数に格納されてしまったようですね。
 otnさんのサンプルを見る限り、そのような結果が生じる可能性は薄そうに思われますが、いずれにせよ第三者がコメントするには、

・sonaさんが現在手元で動かしているバッチファイルそのものの内容。
・それをどのような操作で起動したか
・その結果、どの行の実行結果ではどのような表示が出たか。
 ……などの情報が必要になると思います。
316.
Re8:ファイル名を自分で指定
2005年03月07日(月) 21時58分
sona
家のPCで実行してみたら、ちゃんとうごきました。
ファイル名もきちんと取得できています・・・
なにが原因で、ファイル名が省略されてしまうんでしょうか?
317.
Re8:ファイル名を自分で指定
2005年03月07日(月) 22時53分
sona
rem HEAD=ドライブ名とフォルダ名
set HEAD=%~dp1
pause

rem FILE=ファイル名     
set FILE=%~nx1
pause

rem TAIL=FILEの末尾10文字
set TAIL=%FILE:~-10%
pause

:ZEI
if /i "%HEAD%%TAIL%" == "c:\download\209010.dat" copy %1 a:\RYO.TXT else goto RYO
pause

if /i "%HEAD%%TAIL%" == "c:\download\209010.dat" goto REND
pause

:RYO
if /i "%HEAD%%TAIL%" == "c:\download\209020.dat" copy %1 a:\ZEI.TXT else goto ZEI
pause

if /i "%HEAD%%TAIL%" == "c:\download\209020.dat" goto ZEND
pause

:ERR
echo ERRです。コピー処理は行われませんでした。
pause

:REND
echo FDへRYO.TXTを作成しました。
goto END
pause

:ZEND
echo FDへZEI.TXTを作成しました。
goto END
pause

:END
echo 変換処理を終了します。
pause

で、教えていただいた変換はうまくいったのですが、gotoの制御がうまくいきません・・・

どこか間違いがあったら教えてください。
よろしくお願いします。
318.
Re9:ファイル名を自分で指定
2005年03月08日(火) 01時11分
otn
>家のPCで実行してみたら、ちゃんとうごきました。
>ファイル名もきちんと取得できています・・・
>なにが原因で、ファイル名が省略されてしまうんでしょうか?

PCによって、
FILE=200503~1.DAT になったり、
FILE=20050307209010.DAT になったり違いが出ると言うことでしょうか?
上手く行かないPCの方、何か変にレジストリをいじったりしてませんか?まあ、どこかをいじればこういう状況になると言うのは聞いたことは無いのですが。
あるいは、もしかしてOSが壊れかけているのかも。
319.
Re9:ファイル名を自分で指定
2005年03月08日(火) 01時20分
otn
>で、教えていただいた変換はうまくいったのですが、gotoの制御がうまくいきません・・・

>どこか間違いがあったら教えてください。
>よろしくお願いします。

もっとコンパクトに出来ますが、ワンステップずつPAUSEをいれるということで元のものに沿って書き直してみました。

rem HEAD=%1のドライブ名とフォルダ名
set HEAD=%~dp1
pause

rem FILE=%1のファイル名     
set FILE=%~nx1
pause

rem TAIL=FILEの末尾10文字
set TAIL=%FILE:~-10%
pause

if /i "%HEAD%%TAIL%" == "c:\download\209010.dat" copy %1 a:\RYO.TXT&goto REND
pause

if /i "%HEAD%%TAIL%" == "c:\download\209020.dat" copy %1 a:\ZEI.TXT&goto ZEND
pause

echo ERRです。コピー処理は行われませんでした。
pause
goto END

:REND
echo FDへRYO.TXTを作成しました。
pause
goto END

:ZEND
echo FDへZEI.TXTを作成しました。
pause
goto END

:END
echo 変換処理を終了します。
pause


goto xxxの直後にpauseを書いても駄目です。
320.
Re10:ファイル名を自分で指定
2005年03月08日(火) 09時38分
sona
ありがとうございました。
期待以上のものができあがりました。
ながいことありがとうございました。

300.ファイル名を自分で指定 sona 05/03/04(金) 16:20
301.Re:ファイル名を自分で指定 YanaKen 05/03/04(金) 22:08
305.Re2:ファイル名を自分で指定 sona 05/03/07(月) 15:42
307.Re3:ファイル名を自分で指定 otn 05/03/07(月) 17:07
310.Re4:ファイル名を自分で指定 sona 05/03/07(月) 17:33
313.Re5:ファイル名を自分で指定 YanaKen 05/03/07(月) 18:18
314.Re6:ファイル名を自分で指定 sona 05/03/07(月) 18:38
315.Re7:ファイル名を自分で指定 YanaKen 05/03/07(月) 20:57
316.Re8:ファイル名を自分で指定 sona 05/03/07(月) 21:58
318.Re9:ファイル名を自分で指定 otn 05/03/08(火) 01:11
317.Re8:ファイル名を自分で指定 sona 05/03/07(月) 22:53
319.Re9:ファイル名を自分で指定 otn 05/03/08(火) 01:20
320.Re10:ファイル名を自分で指定 sona 05/03/08(火) 09:38
312.Re4:ファイル名を自分で指定 sona 05/03/07(月) 18:09

 
 


カテゴリー「バッチファイルの起動、引数の取得」索引へ

 

カテゴリー一覧

FPCU/FPCDIY QUICK LINK online
この上の各ジャンル名をクリックすると、下のウィンドウが切り替わります▼


=リンク集のインデックスはこちら=

資料書籍

About

2005年03月04日 10:57に投稿されたエントリーのページです。

ひとつ前の投稿は「[2000]XCOPY「複数ファイル除外」の指定方法(/EXCLUDE)」です。

次の投稿は「[NT系]attribコマンドのパラメータ指定方法」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

This site is powered by Six Apart
Movable Type 3.33-ja
このブログについて | 運営:有限会社メディアポート