使用DOS批次將所有檔案向上移動1個目錄

使用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\""

答案1

該批次可以像下面這樣簡單:

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

波形符號會刪除參數值中可能已存在的任何封閉引號。額外的引號是您問題的根源。

編輯- 如果父目錄中已存在同名文件,您不會說出您想要發生的情況。由於MOVE指令是在批次檔中,因此預設是自動覆寫父資料夾中的檔案。如果您希望腳本提示指令,讓您有機會防止覆蓋,那麼您需要該/-Y選項。

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

答案2

你的命令拼字pushd錯誤,你有兩個h

並且您必須%1move命令中刪除。如果目錄中有空格,move指令就會損壞。

假設您的批次名稱為MoveFiles.bat.它的名字是這樣的:

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

在批次內進行參數替換後,它看起來像這樣:

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

由於嵌套引號,第二個指令存在語法錯誤。


這個版本的批次對我有用:

PUSHD %1
MOVE *.* ..\

答案3

它拋出該錯誤的原因是因為空格。pushd適用於空格,但move不適用。試著..\用引號將第二個參數 括起來:

PUSHD %1
MOVE "%1*.*" "..\"

相關內容