
Win7 の右クリック メニューから実行されるバッチ ファイルを作成しました。フォルダーを右クリックすると、バッチ ファイルですべてのファイル (フォルダーを除く) を 1 つ上のディレクトリに移動するようにしたいと思います。これまでのところ、次のようになっています。
PUSHHD %1
MOVE "%1\*.*" ..\
これは、ファイルを移動するフォルダーにスペースが含まれていない限り機能するようです。フォルダーにスペースが含まれている場合は、エラー メッセージが表示されます。「コマンドの構文が正しくありません。」
したがって、私のバッチは というタイトルのフォルダーでは機能しますPULLTEST
が、 というタイトルのフォルダーでは機能しませんPULL TEST
。
繰り返しますが、フォルダーを移動する必要はなく、ファイルだけを移動する必要があります。また、どのドライブのどのディレクトリでも動作するようにしたいと考えています。作業するディレクトリは特にありません。ランダムになります。
以下は、必要に応じて参照できるように作成したレジストリ ファイルです。
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Directory\shell\PullFiles]
@="PullFilesUP"
[HKEY_CLASSES_ROOT\Directory\shell\PullFiles\command]
@="\"C:\\Program Files\\MyBatchs\\PullFiles.bat\" \"%1\""
答え1
バッチは、次の 1 行のように単純になります。
@move "%~1\*" "%~1\.."
チルダは、引数値にすでに存在する可能性のある囲み引用符を削除します。余分な引用符のセットが問題の原因でした。
編集- 親ディレクトリに同じ名前のファイルが既に存在する場合に何が起こるかを指定していません。MOVE コマンドはバッチ ファイル内にあるため、デフォルトでは親フォルダ内のファイルを自動的に上書きします。スクリプトで指示を要求して上書きを防ぐ機会を与えたい場合は、オプションが必要です/-Y
。
@move /-y "%~1\*" "%~1\.."
答え2
コマンドのスペルがpushd
間違っています。 が 2 つありますh
。
%1
また、コマンドから削除する必要がありますmove
。ディレクトリにスペースが含まれていると、move
コマンドが機能しなくなります。
バッチの名前が であると仮定しますMoveFiles.bat
。これは次のように呼び出されます。
MoveFiles.bat "C:\Test\With Spaces"
バッチ内でパラメータを置換すると、次のようになります。
PUSHD "C:\Test\With Spaces"
MOVE ""C:\Test\With Spaces"*.*" ..\
2 番目のコマンドは引用符がネストされているため構文エラーになります。
このバージョンのバッチは私の場合はうまくいきます:
PUSHD %1
MOVE *.* ..\
答え3
このエラーが発生する理由は、スペースがあるためです。 はpushd
スペースでも機能しますが、move
では機能しません。2 番目の引数 を引用..\
符で囲んでみてください。
PUSHD %1
MOVE "%1*.*" "..\"