1

C:\ドライブに 2 つのバッチ ファイルがあり、%~dp0コマンドを使用して最初のスクリプトのパスを使用し、2 番目のバッチ スクリプトのコピーを作成しています。

COPY %~dp0"Hello World.BAT" C:\"Hello World.bak"

スクリプトの早い段階で、ルートから離れたサブディレクトリに変更する必要がありますC:\が、これにより上記のコピー コマンドが機能しなくなり、「ファイルが見つかりません」というエラーが表示されます。コピー コマンドのルートにとどまると、C:\完全に機能します。なぜこれが起こっているのかについてのアイデア。

4

2 に答える 2

5

これを解決する別の方法は、スクリプトの先頭で %~dp0 を別の変数に保存することです。

@echo off
setlocal
set filepath=%~dp0
.
.
some code
.
.
cd away from original path
.
.
COPY "%filepath%Hello World.BAT" "C:\Hello World.bak"

それはうまくいくはずです。

それが機能しない理由はあなたの引用に関係していると思いたくなります.

あなたはこれを持っています:

COPY %~dp0"Hello World.BAT" C:\"Hello World.bak"

これを次のように置き換えます。

COPY "%~dp0Hello World.BAT" "C:\Hello World.bak"

確実に機能するようにするには、パス全体を引用符で囲む必要があります。あなたが持っている場合:

C:\Program Files\Somefolder\

パスとして引用符を使用すると、次のようになります。

"C:\Program Files\Somefolder\""Hello World.bak"

そしてそれはうまくいきません。

于 2012-04-05T16:41:29.150 に答える
2

現在のディレクトリを変更すると、変更前にコマンドが機能したときにコマンドが失敗する原因を正確に理解していません。しかし、引用符が最適に配置されていないことに気付きました。パスにスペースがあるとコマンドが失敗しますが、現在のディレクトリに関係なく失敗するはずです。

私は使うだろう:

COPY "%~dp0Hello World.BAT" "C:\Hello World.bak"

引用符を最初の引数の前に移動することは、潜在的に重要です。パスにスペースがないことは明らかなので、2番目の引数に移動することは重要ではありませんが、私にはそれがよく見えます。

編集
あなたの質問をもっと注意深く読んだ後、私は物語にもっとあるに違いないと思います。両方のバッチファイルがCドライブのルートにある場合は、元の投稿されたコードが機能するはずです。

スクリプトを編集して、何が起こっているかを診断してみてください。スクリプトが何をしようとしているのかを確認できるように、コピーコマンドの前にECHOを配置します。(または単にエコーがオンになっていることを確認しますが、出力で正しい行を見つけるのが難しくなる可能性があります。)

echo COPY %~dp0"Hello World.BAT" C:\"Hello World.bak"

それでも何が悪いのかわからない場合は、他の人が助けてくれるように結果を投稿してください。

于 2012-04-05T13:47:56.350 に答える