2013-01-31 235 views
0

我想創建簡單的批處理腳本,以使用robocopy將我的文件夾從我的用戶配置文件複製到NAS。我寫了腳本,但它不起作用。我有兩個文件,一個是腳本,另一個是文本文件,我將把文件夾路徑複製到NAS。該scipt將使用此文本文件。以下是代碼片段, 批處理文件:用於處理文件名的Windows批處理腳本

@echo off 

for /f "tokens=*" %%v in (dir.txt) do (
echo:%%v 
robocopy %%v h:\ 
) 

文本文件(DIR.TXT)

"%userprofile%\desktop" 
"%userprofile%\downloads" 
"%userprofile%\My Documents" 
"%userprofile%\Documents" 
"%userprofile%\Favorites" 

批處理腳本是無法從變量處理文件名。

感謝

+0

學習powershell ... – CharlesB

+0

是否需要複製的文件夾總是%userprofile%的子目錄? –

回答

1

原諒我,如果這個答案是幼稚的,但你可以改變的源文件?如果是簡單:

\desktop 
\downloads 
\My Documents 
\Documents 
\Favorites 

您可以使用此批處理文件:如果有一些原因,一個執行命令的用戶配置文件不起作用

@echo off 

for /f "tokens=*" %%v in (dir.txt) do (
echo:"%userprofile%%%v" 
robocopy "%userprofile%%%v" h:\ 
) 

,也許做一個批處理程序用正確的路徑生成初始輸入文件。

+0

HI灰色,這很酷。它爲我工作。你知道爲什麼它不會在腳本中使用用戶配置文件嗎? – khan

+0

很高興爲你效勞。我認爲這是因爲你基本上將一個字符串傳遞給命令,而不是它需要解釋的東西。它爲什麼這樣工作?我不知道。基本上使用call命令並輸出管道可能有一些方法可以使它與你所做的一致。不知道這是否可行,但這是一個更簡單的解決方案(IMO)。 – Gray

1

由於CharlesB的建議,我會寫在PowerShell中這樣的腳本。它比批處理腳本更容易使用。

我覺得這個劇本會做你想要什麼:

cat dirs.txt | ForEach { 
    $dirPath = $_ -replace "%userprofile%", $env:userprofile 
    Write-Host $dirPath 
    robocopy $dirPath h:\ 
} 
+0

嗨,謝謝你的建議。我們安裝了很多Windows XP,並且我們希望在組織中保留一套一致的腳本。 – khan

+0

可以在XP上安裝PowerShell,但你可能不想這樣做...... –

+0

是的,很對,只是想利用當前的工具,即批處理腳本。 – khan