• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 164
  • Last Modified:

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

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
GPSPOW
Asked:
GPSPOW
  • 4
  • 3
1 Solution
 
NVITCommented:
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
 
GPSPOWAuthor Commented:
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
 
NVITCommented:
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
VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

 
GPSPOWAuthor Commented:
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
 
NVITCommented:
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
 
GPSPOWAuthor Commented:
Thanks for the help

Glen
0
 
NVITCommented:
You're welcome. Glad to help...
0

Featured Post

Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

  • 4
  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now