Solved

Appending the EOM date to a file name dependent on the current date

Posted on 2015-02-15
7
148 Views
Last Modified: 2015-02-16
In the past I was given the syntax to append the today's date to a file name:

"filename_"%date:~10,4%%date:~4,2%%date:~7,2%".txt"

Can I get the syntax for the previous month's  end date in a yyyymmdd format?

Example:

If today is 3/2/2015, the output would be 20150228.

Thanks

Glen
0
Comment
Question by:GPSPOW
  • 4
  • 3
7 Comments
 
LVL 23

Expert Comment

by:NVIT
ID: 40611275
If using VBScript is ok w/ you, this should give your main need:
@echo off
setlocal ENABLEDELAYEDEXPANSION
echo dtEnding   = Date - Day(Date) > %temp%\tmp.vbs
echo wsh.echo dtEnding >> %temp%\tmp.vbs
echo wsh.echo dtStarting >> %temp%\tmp.vbs
for /f "tokens=1-3 delims=/" %%a in ('cscript.exe //nologo %temp%\tmp.vbs') do (
  set mm=%%a& if !mm! lss 10 set mm=0!mm!
  set dd=%%b& if !dd! lss 10 set dd=0!dd!
  set yr=%%c
  echo !yr!!mm!!dd!
)
del %temp%\tmp.vbs
goto :eof

Open in new window

0
 

Author Comment

by:GPSPOW
ID: 40612606
Here is a batch file I have copied from one that works for the EOM date.  However, for some reason it is not copying the data.

I have double checked the paths and they are correct.

Can someone look and see if there is a syntax error?
net use D:\DTS






echo off
call :EOM
 echo %eom%
 
 :EOM
   setlocal
   REM Get todays date (into mm, dd, yy variables)
   for /f "skip=1 tokens=2-4 delims=(-)" %%a in ('"echo.|date"') do (
     for /f "tokens=1-3 delims=/.- " %%A in ("%date:* =%") do (
       set "%%a=%%A" 
       set "%%b=%%B" 
       set "%%c=%%C"
     )
   )
   REM Convert month to number and decrease by 1
   set /A "mm=1%mm% - 101"
   REM If this is January, then decrease year and make month December
   if %mm% == 0 (
     set mm=12
     set /a yy-=1
   )
   REM Get the normal last day for this month
   for /F "tokens=%mm% delims=," %%A in ("31,28,31,30,31,30,31,31,30,31,30,31") do set dd=%%A
   REM See if this is a leap year, if so and it's February, add one to last day of month
   set /A "leap=%yy% %% 4"
   if %mm% == 2 if %leap% == 0 set /A "dd+=1"
   REM Return end of prior moth in eom variable in YYYYMMDD format
   endlocal & set eom=%yy%%mm%%dd%
   exit /b 





 

 copy D:\DTS\MonthlyConiferData\ConiferData_SQL.txt  "\\pmcfs\groups\Accounting\ConiferHealth\ConiferData_"%eom%".txt"





net use D:\DTS /DELETE

Open in new window


Thanks

glen
0
 
LVL 23

Expert Comment

by:NVIT
ID: 40612620
Does your code return the last day of the prior month, which is your original question? If not, you can use my solution for that.
0
Maximize Your Threat Intelligence Reporting

Reporting is one of the most important and least talked about aspects of a world-class threat intelligence program. Here’s how to do it right.

 

Author Comment

by:GPSPOW
ID: 40612629
I figured out why it was not running.  The "exit /b" command stopped the batch.

I am getting the last day of the month.  

However if the numeric month is Jan - Sept I only have one digit instead of a leading zero.  So Jan shows up as 2015131.  It needs to be 20150131.

If I use your code, what do I replace in the %eom% for date variable in the destination file name?  Or if I stick with my solution, what can I add to determine when I need the leading zero?

thanks

Glen
0
 
LVL 23

Accepted Solution

by:
NVIT earned 500 total points
ID: 40612660
Try this:

Note: I included the dtStarting (2 disabled lines) in case you need the beginning-of-month one fine day.

net use D:\DTS

echo off
setlocal ENABLEDELAYEDEXPANSION

call :EOM
copy D:\DTS\MonthlyConiferData\ConiferData_SQL.txt  "\\pmcfs\groups\Accounting\ConiferHealth\ConiferData_%eom%.txt"

net use D:\DTS /DELETE

goto :eof

:EOM
rem Uses vbscript to get the starting and ending days of the lastmonth.

rem echo dtStarting = dtEnding - Day(dtEnding) + 1 >> %temp%\tmp.vbs
echo dtEnding   = Date - Day(Date) > %temp%\tmp.vbs
rem echo wsh.echo dtStarting >> %temp%\tmp.vbs
echo wsh.echo dtEnding >> %temp%\tmp.vbs

for /f "tokens=1-3 delims=/" %%a in ('cscript.exe //nologo %temp%\tmp.vbs') do (
  set mm=%%a& if !mm! lss 10 set mm=0!mm!
  set dd=%%b& if !dd! lss 10 set dd=0!dd!
  set yr=%%c
  set eom=!yr!_!mm!_!dd!
)
del %temp%\tmp.vbs
goto :eof

Open in new window

0
 

Author Closing Comment

by:GPSPOW
ID: 40612691
Thanks for the help

Glen
0
 
LVL 23

Expert Comment

by:NVIT
ID: 40612697
You're welcome. Glad to help...
0

Featured Post

What Is Threat Intelligence?

Threat intelligence is often discussed, but rarely understood. Starting with a precise definition, along with clear business goals, is essential.

Join & Write a Comment

RIA (Rich Internet Application) tools are interactive internet applications which have many of the characteristics of desktop applications. The RIA tools typically deliver output either by the way of a site-specific browser or via browser plug-in. T…
Does the idea of dealing with bits scare or confuse you? Does it seem like a waste of time in an age where we all have terabytes of storage? If so, you're missing out on one of the core tools in every professional programmer's toolbox. Learn how to …
An introduction to basic programming syntax in Java by creating a simple program. Viewers can follow the tutorial as they create their first class in Java. Definitions and explanations about each element are given to help prepare viewers for future …
In this fourth video of the Xpdf series, we discuss and demonstrate the PDFinfo utility, which retrieves the contents of a PDF's Info Dictionary, as well as some other information, including the page count. We show how to isolate the page count in a…

746 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

13 Experts available now in Live!

Get 1:1 Help Now