2014-01-23 56 views
1

請注意,我錯誤的假設,我應該用%~dp0%擺脫它裏面不包括批處理文件的文件名的路徑。我現在正在離開這個問題,因爲我看到其他人有着同樣錯誤的前提。查看接受的答案及其評論,以獲取更多信息。複製文件不起作用


由於很多更高級的Windows用戶知道在批處理文件中表達%~dp0%將進行評估,以批處理文件的目錄包括尾部的反斜槓。

如果我有一個D:\包含echo %~dp0%的批處理文件,該行將按預期行爲並輸出D:\

問題

如果我創建一個文件D:\FILETOCOPY.txt和批處理文件D:\problem.bat有以下內容:它

@ECHO OFF 

copy D:\FILETOCOPY.txt %userprofile%\FILECOPIEDA.txt 

copy %~dp0%FILETOCOPY.txt %userprofile%\FILECOPIEDB.txt 

set Evaluated=%~dp0%FILETOCOPY.txt 
copy %Evaluated% %userprofile%\FILECOPIEDC.txt 

cmd.exe 

我得到這個輸出,當我運行它(雙擊):

 1 file(s) copied. 
The system cannot find the path specified. 
     1 file(s) copied. 
Microsoft Windows [Version 6.1.7601] 
Copyright (c) 2009 Microsoft Corporation. All rights reserved. 

D:\> 

並且文件%userprofile%\FILECOPIEDB.txt從目的地丟失ñ。它確實有效,如FILECOPIEDC.txt所證明的,如果我在單獨的行上評估%~dp0%。似乎它以某種方式弄亂了文件副本,但它在回顯行中間按預期工作。

究竟這到底是怎麼回事呢?

+0

更改三次調用'copy'到'echo'代替,並運行該批處理文件。仔細觀察輸出,特別是第二個「回聲」。你看到兩個單獨的陳述(如第一個和第三個)? –

回答

5

嘗試%~dp0不是%~dp0%

你的命令轉換爲(括號和下劃線插入爲了清楚)

copy [%~dp0]_[%FILETOCOPY.txt %] userprofile_[%\FILECOPIEDB.txt] 

和由於可變%FILETOCOPY.txt %不存在,它將被一個空字符串來代替。

+0

這是有效的,我理解你描述的評估是否應該不存在'%〜dp0%'中的最後一個百分比符號。但是,您能否添加一行來解釋第二個'%'錯誤的原因?我的印象是批處理文件中的變量總是被'%' - 符號包圍。 – bonzaibanzai

+0

@kyl:%0是命令行參數替換,而不是環境變量替換。語法不同。 –

+0

@哈里:很高興知道! – bonzaibanzai

1

兩個\\相繼被視爲Windows的單臺\。這不是一個問題。

如果您%USERPROFILE%包含空格或&然後圍繞在雙引號中的整個任期。

另一點已經被提到 - 術語應該是%~dp0