2014-09-25 56 views
0

我們使用一段運行的軟件,完成後它會在標題中創建一個帶有完成日期和時間的文件。在通配符文件名上查找日期並與當前日期進行比較

在一個設定的文件夾中,每天都有一個文件,文件的主名稱是相同的,它只是文件名稱中的日期和時間被更改。

一旦創建了這個文件,我們知道該過程已經完成,然後我們想要運行一系列命令。

我們希望運行一個批處理文件來搜索文件名中當前日期的特定文件夾中的文件,然後找到該文件的日期,然後將其與當前日期進行比較。如果測試結果爲正面,我們知道該過程已經完成,然後我們可以繼續進行。如果日期不匹配,則會等待4分鐘並再次嘗試,直至找到今天創建的文件。

我遇到的問題是文件名是用不同於文件創建日期的順序創建的,所以我無法比較。我不知道如何改變這個,所以命令可以找到文件並比較日期。

停止/啓動服務的命令來自:相同的關閉正常工作正常,在單獨的批處理文件中進行了測試。這是我找不到的發現文件和日期比較部分。

正如你可能看到我在這種命令序列上有點生疏,也許我正在以這種錯誤的方式去做,所以一些幫助表示讚賞。

出於測試目的,我已放入回聲並暫停,以便我可以在測試時看到事情正在發生的地方。文件名有一個日期,當我嘗試和測試這個,但最終這將需要某種通配符插入當前日期,以搜索/比較。

這是我迄今放在一起:

REM .............Start Script................. 
@echo on 
:LOOP 
set currentDate=%date% 
SET filename="x:\DATA\File Upload Summary Report 2014-09-25*.*" 
pause 
FOR %%f IN (%filename%) DO SET filedatetime=%%~tf 
Pause 
REM next command displays date of screen so I can compare 
ECHO %filedatetime:~0,-6% >> %destination% 
Pause 
IF %filedatetime:~0, 10% == %currentDate% goto same 

goto notsame 

:same 
REM service stop & start commands 
Echo Same 
pause 
net stop nxServerV3 
REM wait for 5 seconds by using ping, then next line returns y 
@ping -n 4 -w 1000 0.0.0.1 > NUL 
CHOICE/cyn t:Y,5 

REM start nexus server 
@ping -n 4 -w 1000 0.0.0.1 > NUL 
net start nxServerV3 
REM wait for 5 seconds by using ping 
@ping -n 4 -w 1000 0.0.0.1 > NUL 
net start ConnectorService 
@ping -n 4 -w 1000 0.0.0.1 > NUL 
goto end 

:notsame 
REM Loop scrip after 4 minutes 
Echo Not Same 
echo Press any key to exit... 
if ERRORLEVEL 1 goto end 

timeout /t 240 
goto :LOOP 

:end 
endlocal 

感謝您的幫助。的方法

變化

OK,我修改了我的思維。由於文件是使用文件名中的日期和時間創建的,而不是比較日期,現在我只需將日期添加到文件名中,然後搜索該文件名即可。唯一的問題是文件名需要一個通配符,因爲文件名中有一些額外的細節,但不希望匹配那部分搜索。我剛剛忘記了這個序列,因爲它在查找文件時似乎沒有使用通配符,它​​似乎將通配符作爲文件名的一部分。除此之外,新方法似乎工作正常。

REM .............Start Script................. 
Echo on 
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a" 
set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set "DD=%dt:~6,2%" 

set currentDate=%date% 
set fulldate=%YYYY%-%MM%-%DD% 
pause 

SET filename="x:\DATA\File Upload Summary Report %fulldate%*.pdf" 
pause 

:LOOP 

if exist filename goto restart 

goto notexist 
+0

好的我已經修改了我會這樣做的方式。相反,我現在將正確格式的日期添加到文件名中,然後搜索該文件名。除了我之外的所有作品都有關於如何添加通配符的心理障礙。 – Phil 2014-09-26 04:54:39

回答

0

首先,您可以使用超時1> nul暫停您的代碼一秒鐘也用於比較文件看看forfiles /?命令它非常有用,它支持日期/時間比較

+0

我會看看forfiles /?命令。 – Phil 2014-09-25 21:58:06

0

由於您使用的是Nexus(但應該考慮v4),因此爲您提供操作子字符串的公式是安全的。既然你沒有說出要比較的兩個字符串的格式是什麼,那麼你就必須自己去做那些困難的yakka。

簡單地說,從var提取的子字符串,使用

set newvar=%var:~m,n% 

m其中是(從計數),如果正的開始位置,如果是負的計數從端。 n如果是正數則是字符數,如果是負數則從終點數。

[,n]是可選的。

OTT,以任何希望的順序將子串串聯在一起,就像它們是普通的環境變量一樣。

相關問題