2015-12-16 75 views
0

我試圖創建一個批處理文件來搜索.pst文件,然後將這些文件移動到特定位置。到目前爲止,這是我的。請幫忙。如何製作路徑變量,然後移動該文件

cd \ 
setlocal enabledelayedexpansion 

for /r %%i in (*.pst) do ( 
::echo %%~i 

set MyPath=%i% 
move "%MyPath%" "C:\users\zack.vigrass\desktop\" 
) 

endlocal 

PAUSE 

編輯:我沒有意識到我沒有問一個問題。我主要是問爲什麼它返回一個空白文件,而不是預期的.pst文件。

+4

爲什麼不直接'移動%% i'?我想'%i%'在你的例子中只是一個錯字?如果所有這些都不適用:請說明您的具體問題,目前您只是陳述事實而不提問。 – Marged

+2

着名的[延遲擴展陷阱](http://stackoverflow.com/a/30284028/2152082)的另一個受害者...(當然,這種錯字,那@Marged指出) – Stephan

+1

設置「MyPath = %%我」 (用qoutes和'%'糾正),所以任何尾隨空格將不再成爲'MyPath'值的一部分... – aschipfl

回答

2
set MyPath=%i% 

設置mypath到metavariable控制for環路(%%i的內容,但將它設置爲i,其內容是一個普通的環境變量,最有可能的不確定的,因此什麼

額外問題:有上,這將是包括在分配值行末尾空格

因此mypath將獲得的的值(幾空格)

move "%MyPath%" "C:\users\zack.vigrass\desktop\" 

不幸的是,批處理替換塊(一系列parenthesised語句)內的任何%var%的值字面上與該變量中的值遇到for(在本例中)的時間。

由於遇到for時,mypath是不確定的,那麼結果將是

move "" "C:\users\zack.vigrass\desktop\" 

似乎有在這種情況下沒有理由的價值轉移到mypath

move "%%i" "C:\users\zack.vigrass\desktop\" 

應該爲你工作。

+0

謝謝,這似乎解決了我的問題。我很感激幫助。 – Dan

相關問題