web-dev-qa-db-ja.com

DOSバッチを使用して、すべてのファイルを1つのディレクトリに移動します

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\""
4
Harminoff

バッチは、この1つのライナーと同じくらい単純である可能性があります。

@move "%~1\*" "%~1\.."

チルダは、引数値にすでに存在している可能性のある囲み引用符をすべて削除します。余分な引用符のセットが問題の原因でした。

[〜#〜] edit [〜#〜]-ファイルの場合に何をしたいのかは言わない同じ名前のが親ディレクトリにすでに存在します。 MOVEコマンドはバッチファイル内にあるため、デフォルトでは、親フォルダー内のファイルが自動的に上書きされます。スクリプトに指示を求めるプロンプトを表示して、上書きを防ぐ機会を与える場合は、/-Yオプションが必要です。

@move /-y "%~1\*" "%~1\.."
2
dbenham

pushdコマンドのスペルを間違えました。hが2つあります。

そして、moveコマンドから%1を削除する必要があります。ディレクトリにスペースがある場合、moveコマンドは壊れます。

バッチの名前がMoveFiles.batであると想定します。それはこのように呼ばれます:

MoveFiles.bat "C:\Test\With Spaces"

バッチ内のパラメーター置換後、次のようになります。

PUSHD "C:\Test\With Spaces"
MOVE ""C:\Test\With Spaces"*.*" ..\

2番目のコマンドには、引用符がネストされているために構文エラーがあります。


このバージョンのバッチは私のために働きます:

PUSHD %1
MOVE *.* ..\
1
Alexey Ivanov