2014-01-09 57 views
0

我是新手,在寫劇本,但我知道這是可以做到我只是不知道我怎麼....bat文件更改文件名少1一天,而不是當前的日期

有一個文件需要將文件NAME更改爲當前日期少於1個工作日(例如:星期一返回星期五,星期二至星期一,並在日期前添加靜態「AD」

文件名示例:AD140107.pos (星期二日期改爲星期三日期,AD140108.pos) 該文件位於:R:\ PortfolioCenter \ Output \ Manual界面文件

我在有需要更改日期以及

文件名如不同的日期格式不同的文件夾類似的文件:PC010714.slb (星期二日期改爲週三爲止,PC010814.pos) 該文件位於:R:\ slwin \偵察調整

我想這兩個文件的名稱中使用相同的腳本

我知道DOS沒有做很好平日改變,所以我可以使用一個單獨的文件來處理星期一必要文件

+0

這真的不是重複的,因爲它要求提前一週(週一至週五),無視週末(坐,太陽) – dbenham

+0

在每個位置是否只有該文件類型的一個文件?你不是真的想要週一或週五的名字,但日期格式如圖所示,對嗎?在批處理文件中,VBS是一個合理的工具嗎?它內置於Windows中。 – foxidrive

回答

0
@ECHO OFF 
SETLOCAL 
SET "destdir=c:\destdir" 
SET "targetdir=c:\destdir" 
SET today=%date:~-2%%date:~3,2%%date:~0,2% 
FOR /f "delims=" %%a IN (yesterday.txt) DO SET yesterday=%%a 
IF %yesterday%==%today% GOTO :EOF 
>yesterday.txt ECHO %today% 
ECHO REN "%destdir%\AD%today%.pos" "AD%yesterday%.pos" 
SET today=%today:~-4%%today:~0,2% 
SET yesterday=%yesterday:~-4%%yesterday:~0,2% 
ECHO REN "%targetdir%\PC%today%.slb" "PC%yesterday%.slb" 

GOTO :EOF 

我使用的日期格式爲dd/mm/yyyy。你的可能會有所不同,所以你需要重新格式化日期。基本方法是使用格式爲%date:startpos,長度爲%的子字符串將三個元素串在一起,其中位置0是(日期)字符串的開始。

我已經提名爲destdirtargetdir這兩個目錄以適應我的系統。

關於什麼名字改爲什麼的問題存在一些混淆。從當前日期改爲前一天的日期似乎更明智,但這不是敘述所描述的。

我假設你只會每天運行一次。

這是基於保持按摩最後運行日期在yesterday.txt, which would need to be established first containing a single line 140107`或任何其他。如果你在midnight + alittle自動運行,僅週一至週五,它應該適當地重命名文件。

爲了測試目的,所需的命令僅僅是ECHO。在確認命令正確後,將ECHO REN更改爲REN以實際重命名文件。

0

下面的Batch子例程獲取當前日期的週中日期減去一天,並以參數給出的格式顯示它:如果是Y,則輸出格式爲YYMMDD,否則爲MMDDYY。這個例程解決了你的請求的主要部分。

@echo off 
setlocal 

rem If Format=Y, output is YYMMDD 
rem If Format=M, output is MMDDYY 

:OneMidweekDayLessCurrentDate format 

rem Modify next line accordingly to your locale format (this one use DD/MM/YYYY) 
for /F "tokens=1-3 delims=/" %%a in ("%date%") do set /A dd=1%%a-100, mm=1%%b-100, yyyy=%%c 

rem Convert the Date minus one day to Julian Day Number, and get its Day Of Week (0=Sunday, ..., 6=Saturday) 
set /A a=(mm-14)/12, jdn=(1461*(yyyy+4800+a))/4+(367*(mm-2-12*a))/12-(3*((yyyy+4900+a)/100))/4+dd-32076, dow=jdn%%7 

rem If the dow is Sunday or Saturday, change it by the previous Monday 
if %dow% equ 0 (
    set /A jdn-=2 
) else if %dow% equ 6 (
    set /A jdn-=1 
) 

rem Convert the Julian Day Number back to date 
set /A l=jdn+68569,n=(4*l)/146097,l=l-(146097*n+3)/4,i=(4000*(l+1))/1461001,l=l-(1461*i)/4+31,j=(80*l)/2447 
set /A dd=l-(2447*j)/80,l=j/11,mm=j+2-(12*l),yyyy=100*(n-49)+i+l 
if %dd% lss 10 set dd=0%dd% 
if %mm% lss 10 set mm=0%mm% 

rem Show the resulting date 
if "%1" equ "Y" (
    echo %yyyy:~-2%%mm%%dd% 
) else (
    echo %mm%%dd%%yyyy:~-2% 
) 
exit /B 

在另一方面,你沒有指定哪個文件是要重命名的一句:「我有需要有文件名改爲... filename示例文件:AD140107.pos」。如果您指定了這一點,我們可以完成解決方案。

相關問題