いつも大変お世話になっております。
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を付加してしてみてください。バイナリ転送となりテキストの終端コードがあってもサイズ分コピーされるはずです。
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/fo …
http://fpcu.on.coocan.jp/dosvcmd/bbs/log/cat3/fo …
もしtest_201012??.xlsに一致するファイルが1つしかないのなら、for分は省略して、
COPY C:\test_201012??.xls D:\test\OK.xls
だけでもいいのではないかと思います。
この回答への補足
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でした。
原因不明なので、他の方法で実施しようとして今回のような問題にいきつきました。
宜しくお願い致します。
No.2
- 回答日時:
なぜにそのようにしたのか不明です。
普通 IF文を使ったり、Copyコマンドでも、同じようにワイルドカードを使ってコピーするだけすむはずですが?
http://itpro.nikkeibp.co.jp/free/NT/WinKeyWord/2 …
Copyのオプションで/Yで非対話モードになり、エラーを表示させたくなければ
> NUL
or
> NUL 2>&1
とすれば表示されません。確か2000でも If 文(exist)とcopyでワイルドカード(* ?)が機能したと思いますが?
これらは、DOSの基本操作です。
OKファイルが存在すれば、コピー元があり成功したと言う事です。
これ以外にも、find, findstrがありますが。目的のことはcopy文1行ですみます
No.1
- 回答日時:
確かに上記のコードであればWindows2000SP4でも動作しました。
ちょっと意地悪して、DIRコマンドの「/B」を削除したら上記の結果のようになりました。
きちんとコーディングされているか(機能しているか)確認してみてはいかがでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
- Visual Basic(VBA) VBA This Workbookモジュールを別ファイルにコピーする方法 1 2022/09/14 01:51
- Visual Basic(VBA) vbaの構文の修正相談(xmlファイルを順に開いてコピペ作業) 1 2023/04/22 01:18
- その他(プログラミング・Web制作) python OpenPyXLを使って出力結果をエクセルに書き込み 2 2022/06/04 19:46
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) エクセルVBA Workbook変数に変数を使ったファイル名を格納したい 5 2023/06/13 14:46
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) エクセルVBA(実行時エラー438)の対処法を教えてもらえないでしょうか 3 2023/04/22 13:43
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コマンドプロンプトの「%1」と...
-
フォルダ内の更新日時が一番新...
-
コマンドプロンプトで変数が数...
-
VBA GetAttrについて教えてくだ...
-
word VBA ファイル名 保存
-
コマンドプロンプトでのCSV...
-
コマンドプロンプトでファイル...
-
バッチファイルで、iniファイル...
-
バッチコマンドでファイル名の...
-
【vbs】ファイル名の検索と該当...
-
.batでファイル名から抽出して...
-
[DOS] コピー先に同じファイル...
-
ExcelVBAのDirでスペース含むフ...
-
aタグのhrefにネットワークパス...
-
ftp処理でmove(移動)を行いたい
-
サブフォルダ内のファイルを読...
-
ファイル名に ” を使うと エク...
-
DOSのバッチ作成について‐FORの...
-
バッチファイルで指定フォルダ...
-
■ファイルのリネーム(rename)...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コマンドプロンプトの「%1」と...
-
コマンドプロンプトで変数が数...
-
コマンドプロンプトでファイル...
-
バッチファイルで、iniファイル...
-
[DOS] コピー先に同じファイル...
-
バッチコマンドでファイル名の...
-
ftp処理でmove(移動)を行いたい
-
access,vbaでフォルダ内のファ...
-
ExcelVBAのDirでスペース含むフ...
-
フォルダ内の更新日時が一番新...
-
DOSのバッチ作成について‐FORの...
-
word VBA ファイル名 保存
-
ファイル名に ” を使うと エク...
-
.batでファイル名から抽出して...
-
ファイル名を該当フォルダ内か...
-
サブフォルダからファイルをコ...
-
【vbs】ファイル名の検索と該当...
-
【DOSバッチ開発】末尾のタブの...
-
VBA GetAttrについて教えてくだ...
-
バッチ処理で16進数でファイル...
おすすめ情報