10

I would like to create a dynamic file path in .bat file. At the moment the file path looks like this:

"C:\FolderA\FolderB\FileA.xlsx"

I would like to incorporate today's date in the file name to produce something like that:

/exp:"C:\FolderA\FolderB\FileA " & date() & ".xlsx" /T`

I have tried creating a variable and concatenating it with the hard coded part but it does not work:

set Mydate=!date:~10,4!!date:~7,2!!date:~4,2!
/exp:"C:\FolderA\FolderB\FileA "&%Mydate%&".xlsx" /T

What are the rules on concatenating characters and variables and on quotation marks in batch? How to debug in batch using Notepad?

Ross Ridge
  • 38,414
  • 7
  • 81
  • 112
ProtoVB
  • 773
  • 5
  • 12
  • 24

2 Answers2

13

?

/exp:"C:\FolderA\FolderB\FileA "&%Mydate%&".xlsx" /T

?

This is not cmd syntax. To set a variable, use the set command. Also to concatenate, you don't have (read: must not) use something like concatenation symbols:

set "var=C:\FolderA\FolderB\FileA %Mydate%.xlsx"

(whatever /exp: or /t is supposed to do - it does not work in cmd)

To rename a file, use ren (or the long form rename). To get help to a command use command /? e.g. rename /?

Stephan
  • 53,940
  • 10
  • 58
  • 91
  • Thank you for your post, I did not know these rules (no use of concatenation symbols, quotation marks...) I am still interested in how to debug such script (run line by line). – ProtoVB Apr 08 '16 at 09:08
  • 1
    `batch` is very basic. Debugging is basically done manually with `echo` and `pause` – Stephan Apr 08 '16 at 10:09
  • 1
    [here](http://ss64.com/nt/) is an overview with possible `cmd` commands (a few of them don't work on all windows versions) including a good description of usage and syntax. If you are new to it, consider learning powershell instead (native to current windows versions). It's much more powerful and has a designed consistent syntax. If you decide to stay with batch - welcome to the land of headache (well - one gets used to it...). – Stephan Apr 08 '16 at 13:50
0
for /f "tokens=1-7 delims=/: " %%a in ("%date% %time%") do (

set idow=%%a
set imonth=%%b
set idate=%%c
set iyear=%%d
set ihour=%%e
set imin=%%f
set isec=%%g

set vDate=%%d-%%b-%%c-%%e-%%f

)
cd /d "%log_dir%"
rename %prefix%.log %prefix%-%vDate%.log
Brent
  • 1
  • As it’s currently written, your answer is unclear. Please [edit] to add additional details that will help others understand how this addresses the question asked. You can find more information on how to write good answers [in the help center](/help/how-to-answer). – Community Jun 01 '23 at 21:41