2011-10-14 59 views
0

請幫助!我是批處理文件的新手,並且有一個非常具體的問題。我試圖通過for循環將多個子目錄中的許多文件複製到單個目錄中,同時爲每個名稱附加一個時間戳(因爲所有文件都具有相同的名稱)。我正在使用系統變量時間並在循環內解析它,但循環內的局部變量被分配了垃圾。我已經知道延遲擴展和使用!簽署而不是%,但這不幫助我。這裏是代碼:如何在批處理文件中的for循環中複製文件時添加時間戳

@echo off 
SetLocal EnableDelayedExpansion 
set counter=1 
echo in the beginning the counter is "%counter%" 
:loop 
for /r "c:\users\wimdu\dropbox\wimdu CRM\emarsys reports - campaigns" %%f in (bounce*.*) do (
set a = %time::=% 
echo in loop a equals "!a!" 
echo the time is !time! 
set b=!a:,=! 

copy /y "%%f" c:\users\wimdu\documents\bouncehandling\bouncecsvfiles\%b%.csv 
) 
EndLocal 

因此,基本文件的名稱將是10151821.csv,例如(時間戳包括毫秒)。理想情況下,它應該是原始文件名(反彈)與帶.csv擴展名的時間戳連接起來。我已經嘗試了一切,但與時間戳似乎沒有工作,只是沒有得到正確分配。然後b也是。我不知道如何解析,然後將其分配給b!跡象。請幫忙!!

回答

1

存在多個問題。
您在追加空格時未設置「a」,而是設置了「a」。
而且您總是使用相同的時間,因爲%time%在解析塊時只會展開一次。
與%b%相同的問題。
更改爲延遲擴展,它可以工作。

+0

我也試過,當我分配=!時間!它也會做垃圾,然後在文件路徑中保存!b!不被讀爲值,而是字符串「!b!」或其他奇怪的事情。 – zima

+0

好吧,現在我已經想通了,謝謝你,你的回答幫助我解決了這個問題! – zima

1

同意@jeb對所有點,但可能有另一個問題。根據您的區域設置,當前時間在早上10點之前時,%time%的結果可能包含前導空格。如果是這樣,您的COPY命令中的目標路徑將被拆分,因爲它不包含在雙引號中。結果,該命令在語法上變得不正確。

因此,如果您修復了迄今爲止提到的所有問題,那麼腳本應該沒有任何問題。至少你的腳本的簡化版本適合我。以下是我測試過它:

首先,我創造了我的電腦上進行簡單的設置:

MKDIR C:\tests\source 
MKDIR C:\tests\target 

然後複製大小適中的幾個隨機文件到C:\tests\source文件夾,然後運行以下腳本:

@ECHO OFF 
SETLOCAL ENABLEDELAYEDEXPANSION 
FOR /R "C:\tests\source" %%f IN (*) DO (
    SET a=!time::=! 
    SET a=!a:,=! 
    COPY /Y "%%f" "\!a!" 
) 

而這正是在C:\tests\target出現的結果:

_1395459 
_1395470 
_1395639 

我應該指出,_實際上是一個空間,因爲在我的計算機上,%time%的結果的確在這個時間的午夜和上午10點之間包含了領先的空間。無論如何,我的主要觀點是,我在上面發佈的腳本(我強調,這與我的基本相同)爲我工作。

相關問題