Windows2000バッチファイルの実行エラー:ファイルが見つかりません

このQ&Aのポイント
  • Windows2000 SP4環境で実行すると、バッチファイルが正常に動作せず、ファイルが見つからないエラーが発生します。
  • バッチファイルは、Cドライブ直下の【test_201012??.xls】に一致するファイルを探し、変数【$FILE】に格納してから、コピー処理を行います。
  • Windows2000環境では、FOR構文やDIRコマンドに制限がある可能性があります。また、ワイルドカードの制限も考慮する必要があります。別の方法を探し、問題の解決を図りたいです。
回答を見る
  • ベストアンサー

バッチファイル 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コマンドに何かしらの制限があるのでしょうか? もしくはワイルドカードの制限でしょうか? ちなみに【??】を【*】に変更しても結果は同じでした。 別の方法でないとうまくいかないのでしょうか? このバッチファイルのみで処理を完結したいのです。 何か良い方法があるでしょうか? ご存知の方がいれば、ご教授願いますでしょうか? 以上、何卒宜しくお願い致します。

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

  • ベストアンサー
回答No.4

#3の補足について。藁かもしれませんが。 COPY C:\test_201012??.xls /B D:\test\OK.xls /Bを付加してしてみてください。バイナリ転送となりテキストの終端コードがあってもサイズ分コピーされるはずです。

その他の回答 (3)

  • pita-gora
  • ベストアンサー率70% (102/145)
回答No.3

はじめはNo.1さんの回答と同じく /B が抜けているのかと思いましたが、Windows2000ということで可能性としてありえるのが、for文のバグです。 beckfloydさんが例示しているバッチの括弧内 'DIR C:\test_201012??.xls /B' のところのファイル名等、実際のバッチと変えていませんか?さらに本当のバッチには漢字やひらがななどの2バイト系の文字が入っていませんか? 以下のページをご参照ください。 Windows2000 のコマンドプロンプトでは in ('  ') の中で2バイト文字を使うとその文字数だけコマンドの後が削られるようです。 http://fpcu.on.coocan.jp/dosvcmd/bbs/log/cat3/for_in_do/4-0138.html http://fpcu.on.coocan.jp/dosvcmd/bbs/log/cat3/for_in_do/3-0471.html もしtest_201012??.xlsに一致するファイルが1つしかないのなら、for分は省略して、 COPY C:\test_201012??.xls D:\test\OK.xls だけでもいいのではないかと思います。

beckfloyd
質問者

補足

pita-gora さん ご回答ありがとうございます。 以下回答致します。 >beckfloydさんが例示しているバッチの括弧内 'DIR C:\test_201012??.xls /B' のところのファイ>ル名等、実際のバッチと変えていませんか?さらに本当のバッチには漢字やひらがななどの2バイト系 >の文字が入っていませんか? はい、全角文字が1~2文字入っております。 半角文字で質問してしまって申し訳ございません。 >もしtest_201012??.xlsに一致するファイルが1つしかないのなら、for分は省略して、 >COPY C:\test_201012??.xls D:\test\OK.xls 最初実施致しました。 しかしながら、80KBあったサイズが1KBでコピーされるという現象が発生しました。 ※ちなみに【*】で実施しても結果は同じでした。  尚、XPでは【?】【*】はOKでした。 原因不明なので、他の方法で実施しようとして今回のような問題にいきつきました。 宜しくお願い致します。

  • 0909union
  • ベストアンサー率39% (325/818)
回答No.2

なぜにそのようにしたのか不明です。 普通 IF文を使ったり、Copyコマンドでも、同じようにワイルドカードを使ってコピーするだけすむはずですが? http://itpro.nikkeibp.co.jp/free/NT/WinKeyWord/20040805/1/copy.shtml Copyのオプションで/Yで非対話モードになり、エラーを表示させたくなければ > NUL or > NUL 2>&1 とすれば表示されません。確か2000でも If 文(exist)とcopyでワイルドカード(* ?)が機能したと思いますが? これらは、DOSの基本操作です。 OKファイルが存在すれば、コピー元があり成功したと言う事です。 これ以外にも、find, findstrがありますが。目的のことはcopy文1行ですみます

回答No.1

確かに上記のコードであればWindows2000SP4でも動作しました。 ちょっと意地悪して、DIRコマンドの「/B」を削除したら上記の結果のようになりました。 きちんとコーディングされているか(機能しているか)確認してみてはいかがでしょうか。

関連するQ&A

  • 絶対パス名からファイル名を取り出して、変数に格納するバッチ

    DOSコマンドバッチで定義した変数"fullpath"に絶対フルパス名が格納されているとします。 この変数からファイル名だけを抽出して別の変数"filenae"に格納したいのですが方法がわかりません。 1. set fullpath = "C:\test\test.c" 2. ----ここの部分をどのように処理すれば?------ 3. set filename = fullpathから抽出したファイル名 私がやってみた方法として、for文とdir /bを組み合わせてみたのですが for %a in ( dir /b c:\test\test.c ) do set filename =%a 本来dir /bを実行するとファイル名のみが表示されるのに、For文をかますと絶対フルパスでfilenameに値が格納されてしまいます。 dir /b c:\test\test.cの結果を直接filename変数に格納できれば解決するのですが、コマンド結果を変数に格納するにはFor文を使わないとだめなんですよね? なにかよい方法はないでしょうか?

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

    以下のバッチファイルを作成して実行したのですが、PATH_NAMEの変数が 設定されず、ファイルコピーがされません。 どのように、コードを記載すれば良いのでしょうか。 ご教授願います。 REM コピーするファイル数を設定 SET /a FILE_NUM = 2 REM コピー元のパスを設定 SET PATH_P1=C:\Copy01.txt SET PATH_P2=C:\SAMPLE\Copy02.txt REM 上記で設定したファイルを順番にC:\TEST\へコピーする SET /a N=1 :LOOP SET /p PATH_NAME = PATH_P%N% copy %PATH_NAME% C:\TEST\ if "%N%"== "FILE_NUM " (goto EXIT) SET /a N=N+1 goto LOOP :EXIT

  • バッチファイル

    バッチファイルで cd C:\MYDOCU~1\TEST dir の2行を実行するようにしたつもりですが カレントでdirされました。 現在のバッチは @ECHO OFF cd C:\MYDOCU~1\TEST dir なんですが、どこを直せばよいですか?

  • dirコマンドのバッチ出力結果について

    PC内のフォルダのファイル数を管理するバッチを作成しているのですが 表示結果がイマイチで改善したいのですがご教示いただけないでしょうか。 現在はこのようなバッチ内容です set sv=1 echo test1 test2 test3 dir \\abc%sv%\e$\DATA\test1 /b | find "-" /c dir \\abc%sv%\e$\DATA\test2 /b | find "-" /c dir \\abc%sv%\e$\DATA\test3 /b | find "-" /c 実行結果は以下です --------------------------- test1 test2 test3 0 0 0 ---------------------------- この結果を次のように横に表示したいです。 ------------------------ test1 test2 test3 0 0 0 ------------------------

  • バッチファイルのコマンドについて

    Cドライブにフォルダ【TMP】があります。このフォルダには毎日、日付けの名称のフォルダ(ddmmyyyy)が一つ作成されます。C:\TMPにあるサブディレクトリを、Dドライブ【BAK】フォルダに移動するバッチファイルを作成したいのですが、どのようなコマンドを記述すればいいのでしょうか。 set dir1=c:\tmp\* set dir2=d:\bak move "%dir1%" "%dir2%" 上記では、tmpのファイルのみしか移動出来ません。また、d:\bakに移動したフォルダを定期的に削除したいのですが(作成後、一ヶ月以上経過したフォルダ)どのようにdelコマンドを記述すればいいでしょうか。 宜しくお願いします。

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

    Tech Netセキュリティセンターから、更新ダウンロードした ファイルを複数同時にバッチファイルで処理したい場合、 どのようにバッチファイルを作ればいいのでしょうか?? 環境はWindowsXPです。 <1つに場合(ファイル名:test.bat)> cd "格納先" 更新ファイル名 pause ←DOS画面をストップさせる為、いちお記載 よろしくお願いします。

  • バッチファイル フォルダ存在 確認

    いつも大変御世話になっております。 WindowsXP SP2に【D:\test\bat】フォルダに【test.bat】があります。 上記バッチファイルは以下のようになっています。 コード------------------------------------------------ rem --- 時間変数 --- set yyyy=%date:~-10,2% set yy=%date:~-8,2% set mm=%date:~-5,2% set dd=%date:~-2,2% set YMD=%date:~-8,10% set HHMMSS=%time:~0,8% set FILE_DATE=%date:~-10,4%%date:~-5,2%%date:~-2,2%%TIME:~0,2%%TIME:~3,2% set FILE_DATE=%FILE_DATE: =0% rem --- フォルダ変数 --- set log=D:\test\drive_xcopy\log set INP_DIR=D:\test\drive_xcopy\in set OUT_DIR=D:\test\drive_xcopy\out\ rem --- ファイル変数 --- set logName=log.txt echo "%YMD%","%HHMMSS%","FOLDER.bat","処理開始" >> %log%\%logName% REM フォルダコピー XCOPY "%INP_DIR%" "%OUT_DIR%" /e /Y >> %log%\%logName% echo "%YMD%","%HHMMSS%","FOLDER.bat","処理終了" >> %log%\%logName% コード------------------------------------------------ 単純に【D:\test\drive_xcopy\in\】内のすべてのフォルダを 【D:\test\drive_xcopy\out\】内にコピーしています。 ちなみに、、【D:\test\drive_xcopy\in\】フォルダには100個フォルダがあります。 実現したい事は、コピー対象となる100個フォルダがちゃんとコピーされ、 コピー先にすべて確実存在しているかを【コピー元⇔コピー先】とで 1つ1つマッチング処理したいのです。 すべて存在していれば、上記ログファイルに 100フォルダすべてが存在しています。 と書き込み、 1つでも存在していなければ、上記ログファイルに ○○○フォルダがコピー先に存在していません。 それ以外は存在しています。 と書き込むような処理を実現したいのです。 コピー先に存在していないのが複数であれば 下記のようなログメッセージを書き込みたいです。 ログメッセージ例----------------------- ○○○フォルダがコピー先に存在していません。 ×××フォルダがコピー先に存在していません。 それ以外は存在しています。 ログメッセージ例----------------------- For文とIF文をうまく使い、フォルダを変数で順に格納してマッチングするような 作成になると思いますが、難しくて苦戦しています。 方法をご存知の方がいれば、ご教授願いますでしょうか? ※サンプルがあれば、光栄です。 宜しくお願い致します。

  • バッチファイルでnetstat

    バッチファイルでnetstatの結果を表示したかったのですが 表示されません。 何故かループしてしまいます。 test.bat netstat 実行すると C:\test.bat>netstat C:\test.bat>netstat C:\test.bat>netstat ・・・・ となります。 環境はWindows XP SP3です。 ループせずに通常の出力を得る方法となぜこうなってしまうのかを教えていただけないでしょうか?

  • バッチファイルでCOPYができない。

    バッチファイルを作成するのが初めてでしてうまくいきません。 copy /Y "C:\Documents and Settings\(ユーザー名)\test.txt" sample\ というコードを実行してみたんですが、 C:\Documents and Settings\(ユーザー名)>copy /Y "C:\Documents and Settings\(ユーザー名)\test.txt" sample\ だとできて、 C:\Documents and Settings>copy /Y "C:\Documents and Settings\(ユーザー名)\test.txt" sample\ だとできません。 (実行する場所によって違うということです) どこで実行してもできるようにしたいのですがどうすればよろしいですか?

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

    バッチファイルについて バッチファイルの勉強をしておりますが、以下のバッチで 分からない箇所があります。 @echo off copy C:\bin\set.txt set.txt | find /v "コピー" echo ユーザー名を入力してください echo 入力後、Ctrlキーを押しながらZキーを押した後、Enterキー copy con inp.txt | find /v "コピー" copy set.txt+inp.txt setinp.bat | find "○○" call setinp.bat echo ユーザー名は%INP%と入力されました! del setinp.bat set.txt inp.txt <<不明箇所>> まず、C:\bin\set.txt』は set INP= とだけ書いたファイルです。 copy C:\bin\set.txt set.txt | find /v "コピー" ですが、|find /v"コピー"はなんのためにやっているのでしょうか?? find /vを調べてみると、指定した文字列を含まない行の内容をすべて画面に表示します。 と記載されていますが・・・・このバッチでは一体なぜ最初にいるのでしょう?? copy con inp.txt | find /v "コピー" ですが、コンソールから入力させた文字列をinp.txtに保存しているらしいのですが、 そのあとに、また、|find /v"コピー"がでてきますが、なぜでしょう??なにを したいのでしょう?? さらにまた、copy set.txt+inp.txt setinp.bat | find "○○"が出てきますが、 ここでなぜまた意味不明な、|find"○○"がでてくるのでしょう?? さらにさらに、バッチを実行してみると、set.txtの中身にはコンソールから 入力した文字は何も記載されていない、そして、inp.txtやsetinp.txtという テキストファイルも、どのフォルダにも出来ていません。 最後の行のdel setinp.bat set.txt inp.txtを消して実行してみても同じです。 なぜでしょう?? このバッチの動き、例としての意図が全く分かりません。。。。 この例題が悪すぎるのか、私の頭がわるすぎるのか・・・・ ちなみに、上記バッチは、http://www.geocities.co.jp/SiliconValley-SanJose/1227/batinput.html のサイトのものです。 どなたかご教授願います。。。一週間悩みましたが、まったく理解できない状態です。。。

専門家に質問してみよう