• 締切済み

Windows/MS-DOSのバッチファイル

■バックアップバッチファイルを作ろうと思うですが、FDドライブとMOドライブが共存しているPC環境において、FDは【A:¥】、MOは【F:¥】など自動取得し環境変数にセットする方法を教えてください。 ■バックアップを取るときにFDにとるか、MOにとるかのメディア選択をChoice.comで行いたいんです。その時に自動取得機能があると、1つのバッチでどのPCでも使用できる訳です。(非固定) ■FDやMOに特定ファイルを置いておき、DIRで検索しドライブ判定するのは無しです。あくまでメディアがセットされていない事が条件です。 環境変数を個々のPCにあわせてセットするしかないんでしょうか? ■どなたかDOSマニアの方?、御回答願います。

みんなの回答

  • urk
  • ベストアンサー率33% (18/53)
回答No.3

 VBのDLL,OCXのインストールはつらいとこですね。以前に作ったプログラムが動かなくなることはよくあります。これがVBのネックですね。  Vectorで、WinBatchEhと言うソフトもありました。これは、ドライブのタイプを取得できます。  GetDriveType()のAPIの戻り値をBATで取得できるので、便利そうですよ。  

参考URL:
http://www.vector.co.jp/soft/win95/util/se085235.html
RJBASE
質問者

お礼

遅れて申し訳ありません。 早速ダウンロードしてみました。「送金する価値があるとご判断された場合は、送金をお願いします。」等かなり良心的な作者ですね。 しばらく使ってみます。ありがとうございました。

  • Haizy
  • ベストアンサー率40% (404/988)
回答No.2

RJBASEさん、こんにちは。 なんか、難しそうです。 DOSの場合、ドライブは、ユーザが認識しているべきものですし・・・。 #1の方のように、VBか何かで、ドライブ文字列を得て、 BATファイルに、パラメタ(%1)を放り込んで、 ****.bat {ココドライブ文字列} 例)として、Xcopy xcopy c:\ %1:\ などに 、なってしまうと思いますが・・・。 あ、ちなみにNT系であれば、環境変数を使った方が簡単でしょう。 参考になれば。 でわ

RJBASE
質問者

お礼

ご回答ありがとうございます。 とりあえず、今の状態はiniファイルに set fddrive=a:\とか記述しておいてcopy *.ini *.batに変更し、自動で環境変数にセットするやり方してるんですが・・・・。結局iniファイルは個々で書き換えないといけないし。 ん~困った。

  • urk
  • ベストアンサー率33% (18/53)
回答No.1

バッチプログラムだけで出来るのかな? VBで、GetDriveType()のAPI使った方がいいのでは?

RJBASE
質問者

お礼

速攻のご回答ありがとうございます。確かにVBのほうが楽そうですね。 しかしながら、VBEXEで実行するにはDLL?ランタイムモジュール?を落とさないといけないんですよね?(←自信無し)その場合DLLの上書きとか怖いところです。他のVBアプリが動かなくなったら怖いし。 そういえば、フリーのソフトでDLL不要なやつってどうなんってんでしょ?VBEXEぽいんですが・・・。不思議です。

関連するQ&A

  • バッチファイルにおける環境変数分の繰り返し処理

    こんにちは。 現在、CSVから読み込んだ値(ファイル名)を環境変数に格納し、その環境変数に合致したファイルの移動を行う。というバッチファイルを作成しています。 作成にあたってCSVからのファイル名の読み込み及び、環境変数に全てのファイル名を1個ずつ格納する事(a1=AAやa2=BBなど)には成功したのですが、その後のファイルを移動するコマンドが上手く書けません。 ちなみに move "*%a1%*.txt" "C:\" move "*%a2%*.txt" "C:\" 上記のように1個ずつ手動で環境変数を指定しての移動は出来るのですが、その日によって 取得するファイル名(環境変数の数)が異なってくる為、可能であれば自動で環境変数の数を取得し環境変数分、1個ずつ環境変数からファイル名を読み込み、そのファイルを移動させる。と言ったバッチを組みたいのです。 よろしくお願い致します。 ------------------------------------------------------------------ set count=1 for /f %%i in (test.csv) do @call :add %%i goto PROCESS1 :add set a%count%=%1 set /A count+=1 goto :EOF :PROCESS1 ※移動するコマンド ------------------------------------------------------------------

  • バッチファイル

    コマンドプロンプトから実行するコマンド 2つを、100回繰り返したいのですが、 バッチファイルで100回繰り返すにはどうしたらよいでしょうか? 単純にForで出来ると思っていたのですが、 dosのバッチファイルのforはちょっと違うみたいで、ほかの言語のように for(){繰り返したい処理} ということが出来ないみたいで、 しかも変数<100というのも出来ない? ようで(INで0 1 2 3・・・のように指定するのですね・・・?) 戸惑っています。 変数を使ってインデントして100で終了させようと思ったのですが、変数も使えない・・・??のですね。(使えるのでしょうか??) そこでWSHで一セット分のコマンドのバッチファイルを作ってWSHからそれを100回呼ぼうかと思ったのですが、いまいち方法がわかりません。 また、wshの中で直接dosコマンドが使えると最もよいのですが・・・。 詳しい方がいましたら教えていただけると幸いです。

  • バッチファイルで環境変数が設定されません

    よろしくお願いいたします。 Windows XP Pro の command.com において、バッチファイルの中で set コマンドを使って環境変数を設定しても、バッチから抜けると環境変数の設定ができていません。 バッチ終了後の環境変数は全てバッチ開始前と同じ状態です。 command.com のプロンプトで set コマンドを実行すると、環境変数はセットした内容に変化もしくは追加されます。 cmd.exe ではバッチからでもプロンプトからでも set コマンドで環境変数を操作できます。 なぜ command.com 上のバッチから操作できないのかわからず、不便でかないません。 アドバイスをよろしくお願いいたします。 @echo off set foo=word path=c:\ echo %foo% echo %path% 上記バッチを実行すると word c:\ と表示されますが、set コマンドで確認すると FOO は存在しません PATH=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;... と表示されます。 これはバッチ実行前の値です。

  • バッチファイルの記述について

    CドライブにあるAとBのフォルダをMO(E)にコピー(MOが入っているか確認をさせてから、上書き保存)するバッチファイルを書きたいのですがどのように記述したらよいのでしょうか?。DOSの知識が無いのでよろしくお願いいたします。 AとBがDドライブにあった場合も併せてお願いいたします。

  • バッチファイルの変数をパラメーター化

    お世話様です。 WindowsXP環境に下記バッチファイルがあります。 バッチコード内は以下の通りです。 ------------------------------------------------ set TARGET_FILE=test.txt ------------------------------------------------ この【TARGET_FILE】という変数内に格納されている【test.txt】という値を パラメーターとしてあるVBS内の変数Aがそれを受け取って処理をする・・・。 という事は可能でしょうか? 上記バッチは数種類あり、【TARGET_FILE】変数内の値がそれぞれ違います。 VBSコード内は以下の通りです。 ------------------------------------------------ Option Explicit Dim FILE FILE = ○○○←ここに上記バッチ内の【TARGET_FILE】変数の値を受け取る。 MsgBox FILE ------------------------------------------------ 各バッチは上記VBSで実行したいのです。 Msgbox程度の処理は当然バッチでも可能ですが、何個もVBSを作成するのは厳しいので、 パラメーターが可能であれば、このVBS1個で済みます。 ご存知の方がおりましたら、お知恵を拝借しても宜しいでしょうか? 何卒宜しくお願い致します。

  • バックアップ用バッチファイルの作成方法

    作業用フォルダを日次でバックアップを取るバッチファイルを作成し、それをスケジューラーに登録して自動でバックアップを取れるようにしようと思っています。 下記のようなルールでバッチファイルを作成しようと考えていますが、バッチファイルの作成に詳しい方がいらっしゃったら教えていただけないでしょうか? --- (1)バックアップ作成時は、指定のフォルダをZIP形式で圧縮してバックアップをとる (2)サブフォルダ内のOLDフォルダ内のファイルはバックアップ対象外 (3)ファイル名はYYYYMMDD.zipとして保存 現在、winzipというZIP用のアプリケーションを使用しており、wzzipというコマンドでコマンドライン上から圧縮が可能なので、それを使用したいと思っています。 一旦OLDフォルダを除いたものをテンポラリフォルダに入れて、それを圧縮(環境変数か何かから日付を持ってきて、ファイル名を指定して)するのがいいのかなとは考えているのですが、実際のコマンドの書き方がわかりません。 ご存知の方がいらっしゃいましたら、よろしくお願い致します。

  • バッチファイルについて

    pcのOSは全てwindows98です。 PCが上司機1台、社員機20台あるとします。ピアツーピアでネットワーク化しています。各社員機20台はCドライブの「Mydocument」フォルダと「データ」フォルダが共有されています。必要な時に上司機からネットワークアイコンを開いて各社員機の共有されている2つのフォルダの中を消したりしています。ここで質問します。 そこで上司機からバッチファイルで一度に「Mydocument」フォルダと「データ」フォルダの中身を消すということをしたいのです。ちなみに「Mydocument」は中のデータを全て消すのではなく必要なものもあるので、「Mydocument」を別のフォルダ(C\バックアップフォルダ)にコピーしていて、そのコピー先の「C\バックアップフォルダ\ Mydocument」をCドライブにコピーして置き換えるという風なバッチファイルを作りたいです。以上のようなバッチファイルはどんな文になりますか?本当はバッチファイルを勉強したらよいのですが、どうしてもすぐに作りたいのでどんな文になるのか実際に作った文を見せてください。お願いします。

  • バッチファイル Windows2000 コマンド

    いつも大変お世話になっております。 Windows2000 SP4環境にて下記のバッチファイルがあります。 コード------------------------------------------------------ FOR /F %%i in ('DIR C:\test_201012??.xls /B') DO SET $FILE=%%i COPY C:\%$FILE% D:\test\OK.xls コード------------------------------------------------------ Cドライブ直下の【test_201012??.xls】に一致するファイルを探して 変数【$FILE】に格納して、コピー処理するという単純なバッチファイルです。 ※ちなみに【test_201012】という文字列のファイルは絶対に1ファイルしかない。 WindowsXP SP3環境では問題無く動作しますが、 上記バッチファイルをWindows2000 SP4環境で実行すると以下のようなエラーが発生します。 -----------------〈以下コマンドプロンプト結果抜粋〉----------------- >SET $FILE=ドライブ >SET $FILE=ボリューム >SET $FILE=C:\ >SET $FILE=2010/12/10 >SET $FILE=1 >SET $FILE=0 >COPY C:\0 D:\test\OK.xls 指定されたファイルが見つかりません。 ---------------------------------------------------------------- 2010/12/10は今回の対象ファイルの【test_201012??.xls】で更新日時と同一でした。 ※ちなみにファイル名は【test_20101210.xls】です。 一見ファイル名【test_20101210.xls】を検索しているように見えますが、 変数【$FILE】に複数回いろいろなものが格納され、最終的に【0】が$FILEに格納されてしまい、 その結果、COPY元ファイル名が【0】になって未存在ファイルとしてエラーとなっております。 なぜうまくいかないのでしょうか? Windows2000環境内のFOR構文やDIRコマンドに何かしらの制限があるのでしょうか? もしくはワイルドカードの制限でしょうか? ちなみに【??】を【*】に変更しても結果は同じでした。 別の方法でないとうまくいかないのでしょうか? このバッチファイルのみで処理を完結したいのです。 何か良い方法があるでしょうか? ご存知の方がいれば、ご教授願いますでしょうか? 以上、何卒宜しくお願い致します。

  • バッチファイルの変数引継ぎについて

    行き詰ってしまったので、どなたか知恵を授けていただければと思います。 現在、あるソフトウェアの「バッチモード」という機能を使用したバッチを作成していて、構文が > sdcmd batch ***.txt 上記のようにコマンドを羅列したテキストファイルを指定した実行コマンドになります。 sdcmd以降はソフト指定のコマンド以外は使用できず、変数設定ができない為に変数設定とログ保存を兼ねて上記コマンドを記載したバッチを > setlocal EnableDelayedExpansion > set ○=△△△ > set ■=◇◇◇ > call aaa.bat %* >> aaa.log 2>&1 という内容の呼び出しバッチを作成たのですが、テキストファイル内の変数が代入されずに 実行されてしまいます。 cmd上から直接 > setlocal EnableDelayedExpansion > set ○=△△△ > set ■=◇◇◇ > sdcmd batch ***.txt >> aaa.log 2>&1 を実行しても変数の代入は行われませんでした。 cmd上で変数とテキストファイル内のコマンドを手動実行すれば変数は解決できます。 設定した変数を、テキストファイル内の変数値に代入する方法はあるでしょうか。

  • バッチファイル作成初心者です

    バッチファイル作成初心者です 下記のように変数をSET?している みたいなのですが、%はどういう意味なんでしょうか? SET LOG=%LOGPATH%\%LOGFILE% よろしくお願いいたします。