
我創建了一個批次文件,在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
。
並且您必須%1
從move
命令中刪除。如果目錄中有空格,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*.*" "..\"