問題最有可能的是不是你的「移動」腳本中,而是在被調用的「移動」的腳本代碼。
不管何時你傳遞一個字符串字面量可能包含像<space>
,<tab>
,=
,像&
等;
,,
,或特殊字符,那麼你就應該附上引號中的參數標記分隔符。
假設你的腳本稱爲moveFile.bat
,並要移動c:\some path with spaces\yourFile
,那麼你的電話應該是這樣的:
call moveFile arg1 "some path with spaces\yourFile"
你的腳本將然後正確地執行
move D:\"some path with spaces\yourFile" D:\KUMAR_398519667_9262017
如果你忽略引用該論點,然後%2
將被解析爲c:\some
,當然這將無法正常工作。
有人會說,你應該使用%~2
,以消除任何現有的封閉引號,然後明確地添加自己周圍的整個路徑,如
move "D:\%~2" D:\KUMAR_398519667_9262017
在這種情況下,執行命令變得更熟悉的期待
move "D:\some path with spaces\yourFile" D:\KUMAR_398519667_9262017
這當然也可以,但是沒有必要。
整體設計存在一個潛在的問題 - 它不能支持既包含空格又包含插入符號(^)的路徑,因爲必須引用路徑,但CALL語句將有效地將所有引用的插入符號加倍。
所以call moveFile arg1 "some path with spaces\A^B.txt"
會導致以下:
move D:\"some path with spaces\A^^B.txt" D:\KUMAR_398519667_9262017
絕對沒有,你可以做些什麼來防止引用插入符號,當您使用CALL加倍 。最好的選擇是通過引用傳遞你的路徑作爲變量名。顯然這需要改變moveFile。蝙蝠:
這裏有必要的修改,以moveFile.bat:
setlocal enableDelayedExpansion
if not exist "D:\KUMAR_398519667_9262017" mkdir D:\KUMAR_398519667_9262017
move "D:\!%2!" D:\KUMAR_398519667_9262017
而且你的代碼調用moveFile應該是這樣的:
set "myFile=some path with spaces\A^B"
call moveFile arg1 myFile
沒有理由額外的時間將永遠具有影響在你的腳本上。空格,當然,但不是句號。始終將所有文件路徑換成引號。 – SomethingDark
@SomethingDark - 在調用代碼中需要引號,而不一定在移動腳本中。請參閱[我的答案](https://stackoverflow.com/a/46864937/1012053) – dbenham