プロが教えるわが家の防犯対策術!

xcopyで下記のように、実行結果をテキストファイルではきだすようなbatファイルを作成していますが、一部ファイルでコピーできていない(共有違反というメッセージあり)ものがあります。エラーとなったファイルのみテキストファイルで書き出すような命令はできますでしょうか?

xcopy "A""B" /S /E /H /C /R /F >> C:status.txt 2>&1

上記コマンドの最後の2>&1は何を意味しているのでしょうか?教えてGOOの質問欄を見て、意味も分からずそのまま使っております。

宜しくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

#1 です。


リダイレクトだけでは駄目だったようですね。
それ以上は何らかのプログラム的なものを使用しないと駄目だと思います。
他には、エラーになっているファイルはコピーされていないことを利用して、xcopyに/l(エル)オプションをつけて再度実行するという2度手間な方法も考えられますが…
    • good
    • 1
この回答へのお礼

>コピーされていないことを利用して…
良いヒントになりました。2回バッチファイルを走らせる方法で何とかやってみます。2回目に/Dオプションを付けるて実行すると、エラーとなったファイルのみリストが手に入ります。ありがとうございました。

お礼日時:2005/01/13 09:42

2>c:\errors.txt


としてみてください。xcopyコマンドでエラーメッセージとして出力されているモノが C:\errors.txt に書き出されます。
これで満足できない場合は、とりあえず元に戻して、テキストファイルを処理するコマンドで特定のキーワードなどを手がかりにデータを抜き出さないと駄目です。
(2000,XPなら、findコマンドが標準で使えるはず,力不足ならgrepなどを使います)

ちなみに、2>... の部分は、標準エラー出力(stderr)のりダイレクトの指示です。
    • good
    • 4
この回答へのお礼

御回答ありがとうございました。
お教えいただいた方法で、エラーメッセージの出力できましたが、エラーとなったファイル名まで同時に出力することはやはり無理なのでしょうか?

お礼日時:2005/01/12 20:16

このQ&Aに関連する人気のQ&A

goo 意味」に関するQ&A: 「原則」の意味は?

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QDOSコマンドのコピー完了判定

サーバから各クライアントの共有フォルダにファイルをXCOPYでコピーしたのち、正しくコピーがされたかという確認のDOSコマンドはどのように記述すればよろしいのでしょうか?
もう一点、コピー開始の前にログファイルを出力設定して、コピー完了時に出力するコマンドも教えていただきたいのですが。

Aベストアンサー

> 正しくコピーがされたかという確認のDOSコマンドは
> どのように記述すればよろしいのでしょうか?
一般的にDOSコマンドは終了時に1バイトの値をDOSに返す。これはERRORLEVELという環境変数でアクセスする事ができる。なので、バッチファイルにこう書いて、成功時・失敗時にxcopyからどんな値が返ってきているか確かめてみると良いよ。

xcopy ほにゃほにゃ
echo %ERRORLEVEL%


> コピー開始の前にログファイルを出力設定して、
> コピー完了時に出力するコマンドも教えていただきたいのですが。
コピーされてる間に出力されるものをファイルに落としたいのかな? なら、

C:\>xcopy ほにゃほにゃ > xcopy.log

とすると、ファイルに画面出力の内容が入る。command.comではなくNT系のcmd.exeなら、「2>&1 > xcopy.log」とする事で、標準エラー出力まで奪う事ができる。

QXCOPYで指定したフォルダとファイルをコピーしたい

C:\AAAフォルダとC:\AAA以下のファイルをコピーしたくて、
XCOPY C:\AAA D:\BBB /E
とすると、コピー先のD:\BBBにはAAAフォルダにあるファイルはコピーされるのですが、AAAフォルダそのものはコピーされません。
XCOPY C:\ D:\BBB /E
とすればコピーできるのですが、そうするとC:\のほかのフォルダもコピーされてしまいます。
EXCLUDEオプションを使うには指定するファイルが多いため、あまり使いたくありません。(コピーする前にMDでコピー先にAAAフォルダを作成するのもなるべく避けたい)
知っている方がいらしたら教えて下さい。

Aベストアンサー

xcopy /e C:\AAA D:\BBB\AAA
複数ファイルのコピーでコピー先が存在しないとき、ファイル名と見なすかディレクトリ名と見なすか聞いてきます。

応答を聞かれるのが嫌なら
echo d | xcopy /e C:\AAA D:\BBB\AAA
でいいはず。

QコマンドプロンプトのERRORLEVELについて!

コマンドプロンプトの記述で、ERRORLEVELというのがありますが
そのERRORLEVELが、0の場合は正常終了と考えていいのでしょうか?

Aベストアンサー

>if not ERRORLEVEL 1 goto aaa
>教えていただいた上記記述なんですが、
>1じゃないということは、2~255も含まれるのではないのでしょうか?
>素朴な疑問ですいません。

if文の文法については、if /? で調べてください。

if ERRORLEVEL 1 goto aaa は、ERRORLEVEL が1以上の時にgoto aaaするという意味です。ということを#4の人が書いてるのですが・・・
従って、その否定である、
if not ERRORLEVEL 1 goto aaa は、ERRORLEVEL が1未満つまり0のときにgoto aaaします(負になることはないので)。

QDOSコマンドでファイルをコピーできない。

xcopy "d:\MY documents\" "f:\My Documents\" /d /s
上記コマンドを記述したバッチファイルを実行すると
C:\Documents and Settings\倉庫番.PC.000\デスクトップ>xcopy "d:\MY documents\" "f:\My Documents\" /d /s
無効なパスの指定です
0 個のファイルをコピーしました

C:\Documents and Settings\倉庫番.PC.000\デスクトップ>pause
続行するには何かキーを押してください . . .

とエラーがでます。なぜでしょうか?
d:\はノートPCのdドライブ、fはUSB接続したHDです。
更新したファイルだけをバックアップしたいのですが・・・
宜しくお願いします。

Aベストアンサー

なんか違う答えを教えられているようでかわいそうなので…
現在の
xcopy "d:\MY documents\" "f:\My Documents\" /d /s
を以下のようにフォルダ名の直後の \ を取り除いてください。

xcopy "d:\MY documents" "f:\My Documents" /d /s

これで正しくコピーされると思います。

Qxcopyでのバッチコピー方法でコピーできない

こんにちは。

xcopyを使って、ネットワーク上のファイルを、同じくネットワーク上の別フォルダにコピーしたいと思っています。

ローカルで下記のコードを書きました。

xcopy C:\abc.txt D:\

これは問題なく、Dドライブ直下にデータがコピーできました。

次に、ネットワーク上のあるファイルを指定してコピーするコードを書きました。

xcopy \\mynetwork\abc.txt \\mynetwork\something\
or
xcopy "\\mynetwork\abc.txt" "\\mynetwork\something\"

これは一応はバッチ画面は起動されるのですが、正しくコピーをできませんでした。つまりコピーは失敗におわりました。

何が間違っているでしょうか?

やりたい事は、単一のテキストファイルを、ある特定のフォルダにコピーして、既に同じファイル名があれば上書きするといったことをやりたいです。

よろしくお願いいたします。

Aベストアンサー

フォルダ"\\mynetwork\something\"は存在してますか?

xcopyは /s/eオプション付けて実行したほうが良いかも

QDOSコマンドで、標準出力を出力しないようにするには?

Windowsのバッチファイルでコマンドを実行する際、標準出力をディスプレイに表示したくないのですが、どのようにするのが、一般的なのでしょうか?
CDで実行するので、ファイルに出力はしたくありません。
UNIXとかだと、nullにパイプするようなのですが…。

Aベストアンサー

>UNIXとかだと、nullにパイプするようなのですが…。

リダイレクトですね。

同様です。
標準出力だけなら「c:\> command > nul」
エラー出力もなら「c:\> command > nul 2>&1」

QDirコマンドでフォルダ内ファイルの合計サイズをだすには?(コマンドプロンプトにて)

いろいろ調べましたが不明な点があり、質問します。

WindowsのDOSプロンプトでdirコマンドを打つとフォルダ・ファイルの一覧が表示されますが、その中にファイルサイズが表示されています。
このサイズを合計できるコマンドはありませんか?
DIRコマンドのオプションを調べましたがそれらしいものが見当たりません。
具体的には
C:\xxx\配下に50個程度のファイルがあります。
その50個の合計サイズを知りたいです。
xxxフォルダの親フォルダにはアクセス不可です。

ずーっと悩んでいます。よろしくお願いします。

なお、OSはWindowsNTか2000で使用予定です。

Aベストアンサー

カレントドライブ、カレントフォルダを
C:\xxx\
にした状態で、

dir /s /a-d

/sパラメータででサブディレクトリすべてを検索
/a-dパラメータでディレクトリ以外のファイル(つまり属性に関係なくすべてのファイル

これを実行すると最後にファイルの個数とファイルサイズの合計を表示します。

もし、隠し属性のファイルは合計しないのであれば、

dir /s

だけで良いと思われます。

Qバッチファイルでサーバーのファイルをクライアントへコピーしたい

サーバーに保存されているファイルを、
クライアントのCドライブへコピーしたい。

各クライアントにバッチファイルを配布して、
それを実行するだけでコピーされるようにしたいのです。

初心者で申し訳ないのですが、何卒よろしくお願いします。
------------------------

下記の記述ですと、普通にサーバーのCドライブへファイルがコピーされます。
しかし、コピー先はバッチファイルを実行したクライアントのローカルディレクトリにしたいのです。

copy \\サーバー名\フォルダ名\ファイル名 C:\

Aベストアンサー

>下記の記述ですと、普通にサーバーのCドライブへファイルがコピーされます。

そんなはずはありません。何かの勘違いでしょう。

>copy \\サーバー名\フォルダ名\ファイル名 C:\

だと、バッチファイルを実行したPCのC:\にコピーされます。

copy \\サーバー名\フォルダ名\ファイル名 C:
と、最後の \ を削れば、バッチファイルがあるのと同じディレクトリにコピーされます。

Qbatである文字列内に特定の文字列が含まれているか確認したい

batファイルの中である変数「abc」の中に「test」という文字が含まれていたら○○を行なうという分岐を作成したいのですが、どのように行なえばよいのでしょうか?

そのまま、ずばりのお答えお待ちしております。

よろしくお願い致します。

Aベストアンサー

大文字小文字を区別しなくていいなら、

if not "%abc:test=%" == "%abc%" echo 含まれていた

区別するなら、

echo %abc% | find "test" >NUL
if not ERRORLEVEL 1 echo 含まれていた

Qコマンドプロンプトの「%1」と「%~1」の違いがわからない

コマンドプロンプトの「%1」と「%~1」の違いがわからない
このサイトにhttp://ykr414.com/dos/bat.html
%~1は「全ての引用句(")を削除して%1を展開する。」とありますがよくわかりません。

%1は入力されたファイルのフルパスだと思っているのですけど。
"%1"=%~1ということでしょうか。

Aベストアンサー

%1は、バッチファイルに指定された「第一引数」です。
バッチファイルに限らず、プログラムを実行するときには引数を指定することができます。
単純に関連づけて実行するとかバッチファイルのアイコンにファイルをにドラッグドロップするとかだと、引数は一つない場合が多いですが、
実際にはショートカットを作ったりコマンドプロンプトから指定するとか、二つ以上の引数を指定することができます。
その際、引数と引数の間はスペースで区切られます。(引数指定全体の文字列を、スペースで区切って各引数に分割する)

一方、例えば、マイドキュメントフォルダ「C:\Documents and Settings\ユーザー名\My Documents」を引数にを指定した場合、そのままだとフォルダ名に空白が入ってるので、
%1=C:\Documents
%2=and
%3=Settings\ユーザー名\My
%4=Documents
と、指定した一つの名前が複数の引数に分断されてしまします。

そこで、こういう場合には、ダブルクオートでファイル名を括ります。
プログラム起動時の引数に 「"C:\Documents and Settings\ユーザー名\My Documents"」
といった感じで、ダブルクオートを付けたものを指定すると、
%1="C:\Documents and Settings\ユーザー名\My Documents"
と、括られた部分がまとめて一つの引数と取り扱われるようになります。
そして、この時%~1は
%~1=C:\Documents and Settings\ユーザー名\My Documents
になります。

%1と%~1の使い分けですが、
引数をこのままファイル名として使う時は、%1をそのまま使えば問題ないのです。
(バッチファイルから別のプログラムを起動するときにファイル指定するとかだったら、
%1を使えば、ダブルクオート込みで渡されるので、そのまま一つの引数としてつかます)

一方、フォルダを指定してそのフォルダ下のファイル名を作る、といった処理をしようとする時には、
ダブルクオートが邪魔なので、そういう時は%~1を使います。
たとえば、指定した引数をフォルダとして、そのフォルダ下の「新規作成データ.txt」ファイルを表すフルパスのファイル名を作りたい場合、

単に
 「%1\新規作成データ.txt」とすると、「"C:\Documents and Settings\ユーザー名\My Documents"\新規作成データ.txt」になってしまいますが、

「"%~1\新規作成データ.txt"」とすれば「"C:\Documents and Settings\ユーザー名\My Documents\新規作成データ.txt"」という、正しくクオートされたファイル名を作ることができます。

%1は、バッチファイルに指定された「第一引数」です。
バッチファイルに限らず、プログラムを実行するときには引数を指定することができます。
単純に関連づけて実行するとかバッチファイルのアイコンにファイルをにドラッグドロップするとかだと、引数は一つない場合が多いですが、
実際にはショートカットを作ったりコマンドプロンプトから指定するとか、二つ以上の引数を指定することができます。
その際、引数と引数の間はスペースで区切られます。(引数指定全体の文字列を、スペースで区切って各引数に分割す...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング