いつも大変お世話になっております。
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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コマンドプロンプトの「%1」と...
-
ftp処理でmove(移動)を行いたい
-
ファイル名に ” を使うと エク...
-
コマンドプロンプトでファイル...
-
バッチファイルで、iniファイル...
-
ExcelVBAのDirでスペース含むフ...
-
バッチコマンドでファイル名の...
-
コマンドプロンプトで変数が数...
-
[DOS] コピー先に同じファイル...
-
バッチ処理で16進数でファイル...
-
【バッチファイル】forコマンド...
-
VBA GetAttrについて教えてくだ...
-
【Access】エクスポート時のフ...
-
エクセルVBAを使用してJPGファ...
-
access,vbaでフォルダ内のファ...
-
ファイル名に大文字が含まれて...
-
看護師です。以下の文章のマク...
-
【VBScript】※渡したい変数のみ...
-
DOSのバッチ作成について‐FORの...
-
フォルダ内の更新日時が一番新...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コマンドプロンプトの「%1」と...
-
コマンドプロンプトでファイル...
-
ftp処理でmove(移動)を行いたい
-
[DOS] コピー先に同じファイル...
-
バッチファイルで、iniファイル...
-
ExcelVBAのDirでスペース含むフ...
-
コマンドプロンプトで変数が数...
-
バッチコマンドでファイル名の...
-
.batでファイル名から抽出して...
-
ファイル名に ” を使うと エク...
-
サブフォルダからファイルをコ...
-
フォルダ内の更新日時が一番新...
-
Windowsコマンドプロンプトで、...
-
DOSのバッチ作成について‐FORの...
-
VBA GetAttrについて教えてくだ...
-
バッチ処理で16進数でファイル...
-
【DOSバッチ開発】末尾のタブの...
-
【vbs】ファイル名の検索と該当...
-
access,vbaでフォルダ内のファ...
-
word VBA ファイル名 保存
おすすめ情報