Page 1 of 1

Copy filename to NEW filename

Posted: 20 Aug 2021 05:25
by Robbin2021
I would appreciate if you could take the time to point me in the right direction that would permit me to complete my short batch file.

Code: Select all

dir "PHSM-Dates.dat" | find /v "Volume" | find /v "bytes" | find /v "Directory"

REM Do I need to redirect this output to a file?

06-19-2021  06:22           673,279 PHSM-Dates.dat

REM 06-19-2021 is the Month-Day-Year of file: PHSM-Dates.dat

REM Month-Day-Year is NOT a fixed value - can change daily

REM  06:22 is the time of file: PHSM-Dates.dat

REM time is NOT a fixed value - can change daily

REM I want to copy "PHSM-Dates.dat" to "PHSM-Dates 06-19-2021 06;22.dat" (note the substitution of semi-colon for colon)
I think there is a possibility that I may need to parse the 06-19-2021 filedate...

Thank you for your time and any help you may provide.

Re: Copy filename to NEW filename

Posted: 20 Aug 2021 11:15
by aGerman
Your files will get terribly sorted if the date is not in order YYYY MM DD. However, I accept your decision.

Code: Select all

for %%i in ("PHSM-Dates.dat") do set "fullname=%%~fi"
for /f "delims=" %%i in ('WMIC PATH CIM_DataFile WHERE "name='%fullname:\=\\%'" GET LastModified /value') do for /f "tokens=2 delims==" %%j in ("%%i") do set "dt=%%j"
copy "PHSM-Dates.dat" "PHSM-Dates %dt:~4,2%-%dt:~6,2%-%dt:~0,4% %dt:~8,2%;%dt:~10,2%.dat"
Steffen

Re: Copy filename to NEW filename

Posted: 22 Aug 2021 08:26
by Robbin2021
I thank you for your response. I will have to paste your code and determine if it will perform the task. I can see the file time is going to present some complications because of the colon so I can eliminate the file time as being a requirement for NEW filename,

Re: Copy filename to NEW filename

Posted: 22 Aug 2021 10:42
by aGerman
There's no colon in the new name but a semicolon as required in your initial post. The colons in the code belong to the substring syntax of variable dt.

Steffen

Re: Copy filename to NEW filename

Posted: 23 Aug 2021 06:01
by Robbin2021
I've made some revisions. While it may not look pretty, I hope it will get the job done.

PHSM.BAT

Code: Select all

@echo off
:: First set an environment variable to the backup dir - makes it easier if you want to change the dir later
SETLOCAL

    SET BACKUPDIR=C:\Totalcmd\PHSM-Calendar
    SET SOURCEDIR=%APPDATA%\PHSM-Calendar
    SET ARCHIVEFILE=C:\Totalcmd\PHSM-Calendar\PHSM-Dates.rar

    for %%i in ("PHSM-Dates.dat") do set "fullname=%%~fi"
    for /f "delims=" %%i in ('WMIC PATH CIM_DataFile WHERE "name='%fullname:\=\\%'" GET LastModified /value') do for /f "tokens=2 delims==" %%j in ("%%i") do set "dt=%%j"

REM  I need to compare the dates of "PHSM-Dates.dat" and "%ARCHIVEFILE%". If the dates are EQUAL then goto end ELSE goto backup
REM  I don't need the time as part of the filename so I eliminated: " %dt:~8,2%;%dt:~10,2%"

       copy "PHSM-Dates.dat" "%BACKUPDIR%\PHSM-Dates %dt:~4,2%-%dt:~6,2%-%dt:~0,4%.dat"
dir "PHSM-Dates.dat" "%BACKUPDIR%\PHSM-Dates %dt:~4,2%-%dt:~6,2%-%dt:~0,4%.dat" | find /v "Volume" | find /v "bytes" | find /v "Directory"
REM  I need FOR to compare the dates of "PHSM-Dates.dat" and "%ARCHIVEFILE%". If the dates are EQUAL then goto end ELSE goto backup.
REM  A more elegant method would be test the dates of the two files and set an errorlevel.
::
::    08-20-2021  16:01           673,558 PHSM-Dates.dat
::
::
::    08-20-2021  16:01           673,558 PHSM-Dates 08-20-2021.dat
::
echo.
echo   Unless you want to create the %ARCHIVEFILE% file, press Ctrl-C now to QUIT!
echo.
pause

:backup
"%PROGRAMFILES%\WinRar\rar.exe" m /m5 /tl /ep "%BACKUPDIR%\PHSM-Dates.rar" "%BACKUPDIR%\PHSM-Dates*.dat"
dir *.rar | find /v "Volume" | find /v "bytes" | find /v "Directory"
echo.
pause

:end
ENDLOCAL
Thank you.

Re: Copy filename to NEW filename

Posted: 24 Aug 2021 09:13
by Robbin2021
Hello Steffen (and All)

I think I've found a solution to my PHSM.BAT

Code: Select all

@echo off
:: First set an environment variable to the backup dir - makes it easier if you want to change the dir later
SETLOCAL ENABLEEXTENSIONS

    SET BACKUPDIR=C:\Totalcmd\PHSM-Calendar
    SET SOURCEDIR=%APPDATA%\PHSM-Calendar
    SET ARCHIVEFILE=C:\Totalcmd\PHSM-Calendar\PHSM-Dates.rar

    for %%i in ("PHSM-Dates.dat") do set "fullname=%%~fi"
    for /f "delims=" %%i in ('WMIC PATH CIM_DataFile WHERE "name='%fullname:\=\\%'" GET LastModified /value') do for /f "tokens=2 delims==" %%j in ("%%i") do set "dt=%%j"

FOR %%A IN (%SOURCEDIR%\PHSM-Dates.dat) DO (FOR /F "tokens=1 delims= " %%B IN ("%%~tA") DO SET SDATE=%%B)
FOR %%A IN (%ARCHIVEFILE%) DO (FOR /F "tokens=1 delims= " %%B IN ("%%~tA") DO SET ADATE=%%B)

echo.
dir "PHSM-Dates.dat" | find /v "Volume" | find /v "bytes" | find /v "Directory"
	echo %SOURCEDIR%\PHSM-Dates.dat %SDATE%
dir %ARCHIVEFILE% | find /v "Volume" | find /v "bytes" | find /v "Directory"
	echo %ARCHIVEFILE% %ADATE%
echo.
	if %SDATE%==%ADATE% (
		echo files dates are EQUAL and quiting the batch file
		goto end
	) else (
		echo files dates are not EQUAL! Copying "PHSM-Dates.dat" to "%BACKUPDIR%\PHSM-Dates %dt:~4,2%-%dt:~6,2%-%dt:~0,4%.dat"
	)

       copy "PHSM-Dates.dat" "%BACKUPDIR%\PHSM-Dates %dt:~4,2%-%dt:~6,2%-%dt:~0,4%.dat"
dir "PHSM-Dates.dat" "%BACKUPDIR%\PHSM-Dates %dt:~4,2%-%dt:~6,2%-%dt:~0,4%.dat" | find /v "Volume" | find /v "bytes" | find /v "Directory"
echo.
echo   Unless you want to create / update the %ARCHIVEFILE% file, press Ctrl-C now to QUIT!
echo.
pause

:backup
"%PROGRAMFILES%\WinRar\rar.exe" m /m5 /tl /ep "%BACKUPDIR%\PHSM-Dates.rar" "%BACKUPDIR%\PHSM-Dates*.dat"
dir *.rar | find /v "Volume" | find /v "bytes" | find /v "Directory"
echo.
pause

:end
ENDLOCAL
Now, you could probably "pretty" it up and make it more efficient (which I would welcome) but the above works for me.

Thank you