2017-02-04 6 views
1

バッチファイルに問題があります。私はxcopyを使っていくつかのファイルをコピーしたいが、それは動作していない。ビットマップファイルをWindows system32ディレクトリのサブディレクトリにコピーするのにxcopyコマンドが機能しないのはなぜですか?

@echo off 
md %systemroot%\system32\hello 
md %systemroot%\system32\wlppr 
xcopy /y "%cd%\qwerty.bmp" "%systemroot%\system32\hello" 
xcopy /y "%cd%\qwerty2.bmp" "%systemroot%\system32\wlppr" 

フォルダが正常に作成しますが、Windowsは、ファイルにこのメッセージをコピーしようとしたときにCMDに表示されます。

File not found - qwerty.bmp 
0 File(s) copied 
File not found - qwerty2.bmp 
0 File(s) copied 

そして、はい、私は管理者権限でファイルを実行しようとしました。

私は間違っていますか?

+0

実際に発行されたコマンドを表示するには 'echo on'を有効にできますか? –

+0

スクリプトを実行**保護されたsystem32ディレクトリへの書き込みアクセス権を持つために管理者**として。私はあなたが管理者の特権に言及したと知っていますが、とにかく私たちをユーモアします – Compo

+2

システムディレクトリに書き込むので、スクリプトをadminとして実行する必要があります。しかし、これを行うと作業ディレクトリはsystem32になり、ファイルを見つけることができなくなります。 – Squashman

答えて

0

バッチファイルをダブルクリックすると、Windowsコマンドインタープリタcmd.exeが暗黙的にオプション/Cを使用して実行され、コンソールウィンドウが自動的に閉じられ、構文エラーが原因で実行または終了後にバッチ処理が終了するとコマンドプロセスが終了します。この動作は、期待どおりに動作しないバッチファイルのデバッグには適していません。バッチファイルをデバッグする方がコマンドプロンプトウィンドウが開いているので、暗黙的にオプション/Kを使用してコンソールウィンドウを開いたままにし、バッチファイル(/Bを含まない)を実行した後にコマンド処理を続行させると、cmd.exeバッチファイルの実行中に出力されるすべてのエラーメッセージを表示します。

バッチファイルをダブルクリックすると、通常、バッチファイルのディレクトリにバッチファイルが実行されます。そのため、現在のディレクトリはバッチファイルのディレクトリです。

しかし

バッチファイルは UNC path、Windowsコマンドインタープリタ出力 通常カレントディレクトリがバッチファイルから最初のコマンドラインを実行する前に %SystemRoot%に設定されているメッセージを表示して、Windowsエクスプローラで開いたネットワーク共有に格納されている場合。この動作は、特別なWindowsレジストリ値を使用してオフにすることができます。

、バッチファイルは、それを右クリックして実行し、管理者としてコンテキストメニューオプション実行]を使用している場合、Windowsのコマンド処理は次のようにWindowsのシステムディレクトリでバッチファイルを実行し、その結果、現在のディレクトリとして%SystemRoot%\System32で開始されますカレントディレクトリ。

したがって、現在のディレクトリとは独立して動作するように、このバッチファイルを作成することをお勧めします。 2つのビットマップファイルをバッチファイルと同じディレクトリにコピーし、%~dp0を使用して、バッチファイルの実行時の現在のディレクトリとは独立したバッチファイルのディレクトリを参照することをお勧めします。 %~dp0は、バッチファイルの名前である引数0のドライブとパスを参照します。バッチファイルの引数の参照の詳細については、コマンドプロンプトウィンドウでcall /?を実行してください。

コマンドXCOPYは自動的に対象の文字列がターゲットフォルダ名ではなくファイル名であることをxcopyことが明確になってバックスラッシュで終わる場合1つの以上のファイルをコピーするに全体フォルダツリーを作成します。

ので、使用するコマンドは次のとおりです。

%SystemRoot%\System32\xcopy.exe "%~dp0qwerty.bmp" "%SystemRoot%\System32\hello\" /Q /Y >nul 
%SystemRoot%\System32\xcopy.exe "%~dp0qwerty2.bmp" "%SystemRoot%\System32\wlppr\" /Q /Y >nul 

%~dp0で参照バッチファイルのフォルダパスは、常にバックスラッシュで終わります。したがって、両方のソースファイル名文字列にバックスラッシュを追加する必要はありません。

このコマンドのヘルプについては、コマンドプロンプトウィンドウxcopy /?で実行してください。

+0

はい、そうです、今はうまくいきました!ありがとうございました! – barteczek56

関連する問題