2012-02-07 38 views
0

我有一個Windows啓動筆,它在啓動時運行批處理文件,它只需要從文本文件中複製大量文件機器到引導筆。修改文本文件字符串並使用結果來執行xcopy

我做我的電腦上運行測試製作引導筆之前,認爲這應該工作

@echo off 
set DRIVE=c 

for /F "tokens=*" %%a in (e:\test\files.txt) do call :amendDirectoryAndCopy %%a 

pause 

:amendDirectoryAndCopy 
set DEST=%~1 
set DEST=%DEST:~1% 
echo set DEST=%DRIVE%%DEST% 
echo xcopy %~1 %DEST% 

所有應該做的是爲每個文件,刪除該字符串的第一個字符,添加「C」到提供目標目錄的開始,然後執行xcopy。我找到輸出混淆爲「@echo設置 「DEST =%DRIVE %% DEST%」 輸出什麼,我會想到,C上的正確目錄:如

C:\測試\文件夾\ file.txt的

但XCOPY輸出

XCOPY E:\測試\文件夾\ file.txt的:\測試\文件夾\ file.txt的

盤符在目標上缺少

回答

0

我相信SetLocal EnableDelayedExpansion需要與其對應的!替換o f %在變量擴展中讓你的代碼工作。

我是從我的Windows機器走,現在,所以我不能測試語法,但是從我的頭頂,這樣的事情應該工作:

SetLocal EnableDelayedExpansion 
@echo off 
set drive=c  
set ready_to_move=0 
set file_list=e:\test\files.txt 

if "!ready_to_move!" == "1" (
    set echo= 
) else (
    set echo=echo 
) 

for /F "eol=; tokens=1 delims=" %%f in ('type "!file_list!"') do (
    set source=%%~f 
    for /f "tokens=* delims= " %%s in ("!source!") do set source=%%s 
    set destination=!drive!!source:~1! 
    !echo! xcopy "!source!" "!destination!" 
) 

這是否對你的工作?

+0

差不多。我現在有目的地爲「c:\ test \ folder \ file.txt 我搜索瞭如何從變量中刪除空格,但由於某種原因,這似乎不適用於我」set detination =%destination:= %「 編輯 - 確定格式不斷糾正我所寫的內容,但基本上是在字母c – 2012-02-07 13:20:26

+0

後的空格,現在再次檢查'set drive = c'這一行並確保'c'後面沒有空格。 。批處理腳本對任何地方的空白都非常敏感,這對我有幫助嗎? – kikuchiyo 2012-02-07 14:24:33

+0

在vim中,如果我覺得它是安全的,我通常會選擇其中的一種:':%s/\ + $ // g' 唯一的另一種可能性是我更新了答案來處理這個問題 – kikuchiyo 2012-02-07 14:26:06

相關問題