esd ---> iso script (Testing in progress)
Moderator: DosItHelp
Re: esd ---> iso script (Work in Progress)
Was thinking we could use LOGMAN for some dirty time validation but looks like that is going to be language dependent.
You will probably have to write your own function to validate the time.
You will probably have to write your own function to validate the time.
Re: esd ---> iso script (Work in Progress)
Squashman wrote:balubeto wrote:Since the -t option of the Oscdimg command https://msdn.microsoft.com/en-us/library/hh824847.aspx is independent of the operating system language used, the string entered by the user should always be compatible with the format mm/dd/yyyy,hh:mm:ss. Therefore, the script should test this and that this string has a logical sense. Right?
Did you perhaps attempt to figure out how to code this or even at least Google Search for a batch file that already does date and time validation?
Date Validation
http://stackoverflow.com/a/20415739/1417694
I also have to check the validity time separate from the sign of the comma.
So, how do I unify the validity of the date and time in the format mm/dd/yyyy,hh:mm:ss ?
Thanks
Bye
Re: esd ---> iso script (Work in Progress)
You are right - somehow i misread your post above .balubeto wrote:A moment :
Since the -t option of the Oscdimg command https://msdn.microsoft.com/en-us/library/hh824847.aspx is independent of the operating system language used, the string entered by the user should always be compatible with the format mm/dd/yyyy,hh:mm:ss. Therefore, the script should test this and that this string has a logical sense. Right?
Neat trick!Here is a dirty trick to validate a date.
I use it in this timestamp validation:
Code: Select all
@echo off
setlocal enableExtensions enableDelayedExpansion
call :readValidTimestamp "timestamp"
set timestamp
endlocal
goto :eof
:readValidTimestamp
:: Caution!
:: This function creates two subdirectories "dummy\empty".
:: Don't use these directories!
:: These directories were deleted automatically.
:: %~1 environment variable to store the timestamp to
if "%~1" == "" echo missing parameter & exit /b 1
setlocal enableExtensions enableDelayedExpansion
if not exist "dummy\empty" md "dummy\empty"
set "ts="
set /P "ts=Please Enter a valid timestamp ("mm/dd/yyyy,hh:mm:ss"): "
(
set ts
) | (
>nul findstr /R /C:"^ts=../../....,[0-1][0-9]:[0-5][0-9]:[0-5][0-9]$" /C:"^ts=../../....,2[0-3]:[0-5][0-9]:[0-5][0-9]$"
) && (
xcopy /d:!ts:~0,10! /t "dummy\empty" "dummy"
) && (
rd /s /q dummy
endlocal & set "%~1=%ts%"
exit /b 0
)
echo Invalid timestamp: !ts!.
endlocal
goto :readValidTimestamp
I'm unsure how to interpret the answer you got there... .balubeto wrote:Regarding the second problem, I wrote here https://social.technet.microsoft.com/Fo ... itprosetup .
(
It somehow reminds me to the german version of the "Win95-F1-help": Short, easy to read, correct and totally useless -
but actually i'm in bed with flu, so maybe i just miss the point.
Maybe testing the valid characters (see above how) would be faster.
)
penpen
Re: esd ---> iso script (Work in Progress)
penpen wrote:You are right - somehow i misread your post above .balubeto wrote:A moment :
Since the -t option of the Oscdimg command https://msdn.microsoft.com/en-us/library/hh824847.aspx is independent of the operating system language used, the string entered by the user should always be compatible with the format mm/dd/yyyy,hh:mm:ss. Therefore, the script should test this and that this string has a logical sense. Right?Neat trick!Here is a dirty trick to validate a date.
I use it in this timestamp validation:Code: Select all
@echo off
setlocal enableExtensions enableDelayedExpansion
call :readValidTimestamp "timestamp"
set timestamp
endlocal
goto :eof
:readValidTimestamp
:: Caution!
:: This function creates two subdirectories "dummy\empty".
:: Don't use these directories!
:: These directories were deleted automatically.
:: %~1 environment variable to store the timestamp to
if "%~1" == "" echo missing parameter & exit /b 1
setlocal enableExtensions enableDelayedExpansion
if not exist "dummy\empty" md "dummy\empty"
set "ts="
set /P "ts=Please Enter a valid timestamp ("mm/dd/yyyy,hh:mm:ss"): "
(
set ts
) | (
>nul findstr /R /C:"^ts=../../....,[0-1][0-9]:[0-5][0-9]:[0-5][0-9]$" /C:"^ts=../../....,2[0-3]:[0-5][0-9]:[0-5][0-9]$"
) && (
xcopy /d:!ts:~0,10! /t "dummy\empty" "dummy"
) && (
rd /s /q dummy
endlocal & set "%~1=%ts%"
exit /b 0
)
echo Invalid timestamp: !ts!.
endlocal
goto :readValidTimestampI'm unsure how to interpret the answer you got there... .balubeto wrote:Regarding the second problem, I wrote here https://social.technet.microsoft.com/Fo ... itprosetup .
(
It somehow reminds me to the german version of the "Win95-F1-help": Short, easy to read, correct and totally useless -
but actually i'm in bed with flu, so maybe i just miss the point.
Maybe testing the valid characters (see above how) would be faster.
)
penpen
I inserted your routine in the main script
Code: Select all
@echo off
setlocal enableExtensions disableDelayedExpansion
call :setValidPath "Windows_Files_Path" "%~1" "Enter the directory in which put the content of the ""Windows Setup Media"" volume image:" "absolutePath" "mayExist" "directory" "rw"
call :setValidPath "iso_Path" "%~2" "Enter the directory in which put the iso image file created:" "absolutePath" "mayExist" "directory" "--"
call :setValidPath "esd_Path" "%~3" "Enter the directory in which put the esd unencrypted file:" "absolutePath" "mustExist" "directory" "--"
call :setValidPath "esd_File" "%~4" "Enter the file to be converted which should be put in the %esd_Path% directory:" "relativePath" "mustExist" "file" "rw" "esd_Path"
set "iso_File=%~5"
:set_iso_File
call :setValidPath "iso_File" "%iso_File%" "Enter the iso file that will be saved in the %iso_Path% directory:" "relativePath" "mayExist" "file" "-w" "iso_Path"
call
if exist "%iso_Path%\%iso_File%" choice /M "Iso File exists; overwrite it " /C:YN
if not "%errorlevel%" == "1" set "iso_File=" & goto :set_iso_File
call :ValidTimestamp "timestamp" "%~6" "Enter a timestamp ("mm/dd/yyyy,hh:mm:ss") for all files and directories in the %iso_File%:"
echo(
echo Result:
echo Windows_Files_Path: "%Windows_Files_Path%"
echo iso_Path : "%iso_Path%"
echo esd_Path : "%esd_Path%"
echo esd_File : "%esd_File%"
echo iso_File : "%iso_File%"
echo timestamp : "%timestamp%"
:: put your code here
endlocal
goto :eof
:setValidPath
:: %~1 variable to set
:: %~2 default value
:: %~3 text if default value is invalid
:: %~4 Text equals: (forced to relativePath if %~6 equals file)
:: absolutePath if path must be absolute
:: relativePath if path must be relative
:: anyPath if path may be relative or absolute (any other value)
:: %~5 Text equals: (forced to mayExist if %~8 does not exist)
:: mustExist if file/directory must exist,
:: doesntExist if file/directory is not allowed to exist.
:: mayExist if file/directory may or may not exist (any other value).
:: %~6 Text equals:
:: file if object to test is a file
:: directory if object to test is a directory (any other value).
:: %~7 Text equals: (only checked if file/directory exists)
:: r check read access for specified file/directory
:: w check write access for specified file/directory
:: rw check read and write access for specified file/directory
:: - check no access for specified file/directory (any other value)
:: directory if object to test is a directory (any other value).
:: Note: testing write access on a directory creates a file "test.tmp"
:: %~8 Only if /I %~6 == "file": environment variable with an path to store the file to
:: (forced to empty word, if %~6 equals directory).
::
setlocal
set "firstTime=1"
set "input=%~2"
set "text=%~3"
if "%~4" == "absolutePath" ( set "pathType=%~4"
) else if "%~4" == "relativePath" ( set "pathType=%~4"
) else set "existType=anyPath"
if "%~5" == "mustExist" ( set "existType=%~5"
) else if "%~5" == "doesntExist" ( set "existType=%~5"
) else set "existType=mayExist"
setlocal enableDelayedExpansion
set "parent= "
if "%~6" == "file" (
set "parent= !%~8!"
if not "!parent:~-1!" == ":" (
set "parent=!parent!\"
if "!parent:~-2!" == "\\" set "parent=!parent:~0,-1!"
)
)
endlocal & set "parent=%parent:~1%"
if "%~6" == "file" (
set "fileType=file"
set "pathType=relativePath"
if defined parent (
if not exist "%parent%" set "existType=mayExist"
) else set "existType=mayExist"
) else set "fileType=directory"
if "%~7" == "r" ( set "checkAccess=r-"
) else if "%~7" == "w" ( set "checkAccess=-w"
) else if "%~7" == "rw" ( set "checkAccess=rw"
) else ( set "checkAccess=--"
)
:validatePath
:: validating
set "invalid="
call :isValidPathName "input" || goto :invalidatedPath
if /I "%pathType%" == "absolutePath" ( call :isAbsolutePathName "input" || ( set "invalid=Path must be absolute" & goto :invalidatedPath )
) else if /I "%pathType%" == "relativePath" ( call :isAbsolutePathName "input" && ( set "invalid=Path must be relative" & goto :invalidatedPath ) || >&2 >nul (echo @maybe: replace "<volume label>:" in !input!)
)
setlocal enableExtensions enableDelayedExpansion
set "input=!parent!!input!"
if /I "%existType%" == "mustExist" ( if not exist "!input!" ( endlocal & set "invalid=Path must exist." & goto :invalidatedPath )
) else if /I "%existType%" == "doesntExist" ( if exist "!input!" ( endlocal & set "invalid=Path must be non existent." & goto :invalidatedPath )
)
if exist "!input!" for %%b in ("!input!") do (
set "attribs=%%~ab"
if /I "%fileType%" == "file" (
if not "!attribs:d=!" == "!attribs!" (
endlocal & set "invalid=Path must denote a file (not a directory)." & goto :invalidatedPath
) else (
if "%checkAccess:~0,1%" == "r" (
2>nul <"!input!" set /p "check=" || (
for %%a in ("!input!") do if "%%~za" == "0" (
>&2 echo(Warning: Could not verify read access: Reason filesize of "!input!" is 0.
) else (
endlocal & set "invalid=No read access (wanted)." & goto :invalidatedPath
)
)
) else if "%checkAccess:~1,1%" == "w" 2>nul (
>"!input!" <nul set /p "check=" || ( endlocal & set "invalid=No write access (wanted)." & goto :invalidatedPath )
)
)
) else (
if "!attribs:d=!" == "!attribs!" (
endlocal & set "invalid=Path must denote a directory (not a file)." & goto :invalidatedPath
) else (
if "%checkAccess:~0,1%" == "r" 2>nul (
>nul dir "!input!" || ( endlocal & set "invalid=No read access (wanted)." & goto :invalidatedPath )
)
if "%checkAccess:~1,1%" == "w" 2>nul (
>nul pushd "!input!"
>"test.tmp" echo test || ( >nul popd & endlocal & set "invalid=No write access (wanted)." & goto :invalidatedPath )
>nul del "test.tmp" || ( >nul popd & endlocal & set "invalid=No write access (wanted)." & goto :invalidatedPath )
>nul popd
)
)
)
)
endlocal
endlocal & set "%~1=%input%"
goto :eof
:invalidatedPath
if defined invalid echo(Invalid: %invalid%
set /P ^"input=%text:""="% "
goto :validatePath
goto :eof
:: Check if the pathname follows mainly the naming convention:
:: https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx
:: Exceptions:
:: - Only a drive descriptor (for example "C:") is allowed for volume names.
:: - Not tested if characters 0x00-0x31, or any other forbidden character (of the target filesystem) are present. (disallowed)
:: - Not tested on alternative data streams
:isValidPathName
:: %~1 environment variable containing the path to test.
setlocal enableExtensions enableDelayedExpansion
set "pathName=!%~1!"
set "invalid="
if not defined invalid if "!pathName!" == "" if defined firstTime (exit /b 1 & goto :test) else set "invalid=The pathname cannot be empty." & set "pathName= "
if not defined invalid for /f tokens^=1^*^ delims^=^/^<^>^|^*^?^" %%a in ("#!pathName!#") do if not "%%~b" == "" set "invalid=Invalid character found."
if not defined invalid set ^"pathname=!pathname:"=!"
if not defined invalid (
set "pathName= !pathName:/=\!"
>nul echo @maybe:set "pathName= !pathName:\..\=\!"
>nul echo @maybe:set "pathName= !pathName:\.\=\!"
>nul echo @maybe:if "%pathName:~-3%" == "\.." set "pathName= !pathName:~0,-3!"
>nul echo @maybe:if "%pathName:~-2%" == "\." set "pathName= !pathName:~0,-2!"
)
if not defined invalid if not "!pathName:\\=__!" == "!pathname!" set "invalid=Empty string is no valid path component."
if not defined invalid if "!pathName:~1,1!" == ":" (
for /f "tokens=1* delims=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" %%a in ("#!pathName:~0,1!#") do if not "%%~a" == "#" set "invalid=Invalid drive name."
set "pathName=!pathName:~2!"
)
if not defined invalid 2>nul (
echo(\!pathname!\|>nul findstr /I /R /C:"[\\]AUX[\\]" /C:"[\\]CON[\\]" /C:"[\\]NUL[\\]" /C:"[\\]PRN[\\]" /C:"[\\]COM[0-9][\\]" /C:"[\\]LPT[0-9][\\]" && (
set "invalid=The following names are not allowed for file/directory names: CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, and LPT9."
)
)
if not defined invalid 2>nul (
echo(\!pathname!\|>nul findstr /R /C:"[\ ][\\]" /C:"[\.][\\]" && (
set "invalid=It is not allowed to end file/directory names with a space (' ') or a period ('.') character."
)
)
if not defined invalid (
endlocal
exit /b 0
) else (
endlocal & set "invalid=%invalid%"
exit /b 1
)
goto :eof
:: Using mainly the definition of the Windows Shell API, see:
:: https://msdn.microsoft.com/en-us/library/windows/desktop/bb773660(v=vs.85).aspx
:: Exception:
:: - Only accepts a drive descriptor (for example "C:") is allowed for volume names.
::
:: does not check validity (must be valid)
:isAbsolutePathName
:: %~1 environment variable containing the path to test.
setlocal enableExtensions enableDelayedExpansion
if not "!%~1:~1,2!" == ":\" (
endlocal
exit /b 1
) else (
endlocal
exit /b 0
)
goto :eof
:ValidTimestamp
:: Caution!
:: This function creates two subdirectories "dummy\empty".
:: Don't use these directories!
:: These directories were deleted automatically.
:: %~1 environment variable to store the timestamp to
if "%~1" == "" echo missing parameter & exit /b 1
setlocal enableExtensions enableDelayedExpansion
if not exist "dummy\empty" md "dummy\empty"
(
set "ts=%~2"
) | (
>nul findstr /R /C:"^ts=../../....,[0-1][0-9]:[0-5][0-9]:[0-5][0-9]$" /C:"^ts=../../....,2[0-3]:[0-5][0-9]:[0-5][0-9]$"
) && (
xcopy /d:!ts:~0,10! /t "dummy\empty" "dummy"
) && (
rd /s /q dummy
endlocal & set "%~2=%ts%"
exit /b 0
)
echo Invalid timestamp: !ts!.
endlocal
goto :ValidTimestamp
but it does not work. Where did I go wrong?
Thanks
Bye
Re: esd ---> iso script (Work in Progress)
balubeto wrote:but it does not work. Where did I go wrong?
Thanks
Bye
You changed the CODE! It says right in the instructions how the value is assigned to a variable yet you decided to change it for some reason! You also kept the GOTO label in the code but removed the prompting to enter in a new time stamp.
Re: esd ---> iso script (Work in Progress)
Squashman wrote:balubeto wrote:but it does not work. Where did I go wrong?
Thanks
Bye
You changed the CODE! It says right in the instructions how the value is assigned to a variable yet you decided to change it for some reason! You also kept the GOTO label in the code but removed the prompting to enter in a new time stamp.
I can not understand if this line:
Code: Select all
call :ValidTimestamp "timestamp" "%~6" "Enter a timestamp ("mm/dd/yyyy,hh:mm:ss") for all files and directories in the %iso_File%:"
is right?
If so, what should I change in the ValidTimestamp routine?
Thanks
Bye
Re: esd ---> iso script (Work in Progress)
balubeto wrote:Squashman wrote:balubeto wrote:but it does not work. Where did I go wrong?
Thanks
Bye
You changed the CODE! It says right in the instructions how the value is assigned to a variable yet you decided to change it for some reason! You also kept the GOTO label in the code but removed the prompting to enter in a new time stamp.
I can not understand if this line:Code: Select all
call :ValidTimestamp "timestamp" "%~6" "Enter a timestamp ("mm/dd/yyyy,hh:mm:ss") for all files and directories in the %iso_File%:"
is right?
If so, what should I change in the ValidTimestamp routine?
Thanks
Bye
Answer this for me.
When you call the function, what is %1, and what is %2?
Then look at the function and tell me if you are using them correctly.
Re: esd ---> iso script (Work in Progress)
Squashman wrote:balubeto wrote:Squashman wrote:You changed the CODE! It says right in the instructions how the value is assigned to a variable yet you decided to change it for some reason! You also kept the GOTO label in the code but removed the prompting to enter in a new time stamp.
I can not understand if this line:Code: Select all
call :ValidTimestamp "timestamp" "%~6" "Enter a timestamp ("mm/dd/yyyy,hh:mm:ss") for all files and directories in the %iso_File%:"
is right?
If so, what should I change in the ValidTimestamp routine?
Thanks
Bye
Answer this for me.
When you call the function, what is %1, and what is %2?
Then look at the function and tell me if you are using them correctly.
For me:
Code: Select all
%1="timestamp"
%2="%~6"
%3="Enter a timestamp ("mm/dd/yyyy,hh:mm:ss") for all files and directories in the %iso_File%:"
Right?
Thanks
Bye
Re: esd ---> iso script (Work in Progress)
balubeto wrote:For me:Code: Select all
%1="timestamp"
%2="%~6"
%3="Enter a timestamp ("mm/dd/yyyy,hh:mm:ss") for all files and directories in the %iso_File%:"
Right?
Thanks
Bye
So are you using %1 and %2 correctly in the function?
Re: esd ---> iso script (Work in Progress)
You made some slight errors (on a first look, but may be incomplete):balubeto wrote:I inserted your routine in the main scriptCode: Select all
: ...
call :ValidTimestamp "timestamp" "%~6" "Enter a timestamp ("mm/dd/yyyy,hh:mm:ss") for all files and directories in the %iso_File%:"
: ...
:ValidTimestamp
:: Caution!
:: This function creates two subdirectories "dummy\empty".
:: Don't use these directories!
:: These directories were deleted automatically.
:: %~1 environment variable to store the timestamp to
if "%~1" == "" echo missing parameter & exit /b 1
setlocal enableExtensions enableDelayedExpansion
if not exist "dummy\empty" md "dummy\empty"
(
set "ts=%~2"
) | (
>nul findstr /R /C:"^ts=../../....,[0-1][0-9]:[0-5][0-9]:[0-5][0-9]$" /C:"^ts=../../....,2[0-3]:[0-5][0-9]:[0-5][0-9]$"
) && (
xcopy /d:!ts:~0,10! /t "dummy\empty" "dummy"
) && (
rd /s /q dummy
endlocal & set "%~2=%ts%"
exit /b 0
)
echo Invalid timestamp: !ts!.
endlocal
goto :ValidTimestamp
but it does not work. Where did I go wrong?
1) You wanted to use "Enter a timestamp ("mm/dd/yyyy,hh:mm:ss") for all files and directories in the %iso_File%:" as one parameter (including doublequotes).
This is not possible because the comma character (',') is a special character if it stands outside of doublequotes.
More specific it is a seperator, that divides parameters (so there are 4 parameter, and the comma character is removed).
You could replace the internal doublequotes by single quotes ('\'', "..Enter a timestamp ('mm/dd/yyyy,hh:mm:ss') for ...").
2) You've removed the "set /p" part in the source that reads in the user input.
3) You have replaced the "list environment variable" command (set "ts") by an "assign variable" command (set "ts= set "ts=%~2").
The second command has no output, so the validation using findstr must fail because it expects a string to work with
(if findstr finds a matching string, then this string is valid).
The matching pattern uses regular expressions:
- The dot ('.') matches any character,
- the tilde character ('^') matches line starts
- the dollar character ('$') matches line endings
- class matching ([a-b]) matches all characters (unicode) between 'a' and 'b' (including these borders).
(So [0-5] matches 0, 1, 2, 3, 4 and 5.)
Actually i'm not at home posting here using a mobile phone, so it will take a while until i am home.
penpen
Re: esd ---> iso script (Work in Progress)
penpen wrote:You made some slight errors (on a first look, but may be incomplete):balubeto wrote:I inserted your routine in the main scriptCode: Select all
: ...
call :ValidTimestamp "timestamp" "%~6" "Enter a timestamp ("mm/dd/yyyy,hh:mm:ss") for all files and directories in the %iso_File%:"
: ...
:ValidTimestamp
:: Caution!
:: This function creates two subdirectories "dummy\empty".
:: Don't use these directories!
:: These directories were deleted automatically.
:: %~1 environment variable to store the timestamp to
if "%~1" == "" echo missing parameter & exit /b 1
setlocal enableExtensions enableDelayedExpansion
if not exist "dummy\empty" md "dummy\empty"
(
set "ts=%~2"
) | (
>nul findstr /R /C:"^ts=../../....,[0-1][0-9]:[0-5][0-9]:[0-5][0-9]$" /C:"^ts=../../....,2[0-3]:[0-5][0-9]:[0-5][0-9]$"
) && (
xcopy /d:!ts:~0,10! /t "dummy\empty" "dummy"
) && (
rd /s /q dummy
endlocal & set "%~2=%ts%"
exit /b 0
)
echo Invalid timestamp: !ts!.
endlocal
goto :ValidTimestamp
but it does not work. Where did I go wrong?
1) You wanted to use "Enter a timestamp ("mm/dd/yyyy,hh:mm:ss") for all files and directories in the %iso_File%:" as one parameter (including doublequotes).
This is not possible because the comma character (',') is a special character if it stands outside of doublequotes.
More specific it is a seperator, that divides parameters (so there are 4 parameter, and the comma character is removed).
You could replace the internal doublequotes by single quotes ('\'', "..Enter a timestamp ('mm/dd/yyyy,hh:mm:ss') for ...").
2) You've removed the "set /p" part in the source that reads in the user input.
3) You have replaced the "list environment variable" command (set "ts") by an "assign variable" command (set "ts= set "ts=%~2").
The second command has no output, so the validation using findstr must fail because it expects a string to work with
(if findstr finds a matching string, then this string is valid).
The matching pattern uses regular expressions:
- The dot ('.') matches any character,
- the tilde character ('^') matches line starts
- the dollar character ('$') matches line endings
- class matching ([a-b]) matches all characters (unicode) between 'a' and 'b' (including these borders).
(So [0-5] matches 0, 1, 2, 3, 4 and 5.)
Actually i'm not at home posting here using a mobile phone, so it will take a while until i am home.
penpen
Code: Select all
: ...
call :ValidTimestamp "timestamp" "%~6" "Enter a timestamp (""mm/dd/yyyy\,hh:mm:ss"") for all files and directories in the %iso_File%:"
: ...
:ValidTimestamp
:: Caution!
:: This function creates two subdirectories "dummy\empty".
:: Don't use these directories!
:: These directories were deleted automatically.
:: %~1 environment variable to store the timestamp to
if "%~1" == "" echo missing parameter & exit /b 1
setlocal enableExtensions enableDelayedExpansion
if not exist "dummy\empty" md "dummy\empty"
set "ts="
(
set "ts=%~2"
) | (
>nul findstr /R /C:"^ts=../../....,[0-1][0-9]:[0-5][0-9]:[0-5][0-9]$" /C:"^ts=../../....,2[0-3]:[0-5][0-9]:[0-5][0-9]$"
) && (
xcopy /d:!ts:~0,10! /t "dummy\empty" "dummy"
) && (
rd /s /q dummy
endlocal & set "%~2=%ts%"
exit /b 0
)
echo Invalid timestamp: !ts!.
endlocal
goto :ValidTimestamp
I made the appropriate corrections or not?
Thanks
Bye
Re: esd ---> iso script (Work in Progress)
balubeto wrote:I made the appropriate corrections or not?
Thanks
Bye
You seem to think you do not need to use %1 in the function. Why?
Look back at the original code Penpen provided. Where is %1 being used that you are not using it?
Re: esd ---> iso script (Work in Progress)
Code: Select all
: ...
call :ValidTimestamp "timestamp" "%~6" "Enter a timestamp (""mm/dd/yyyy\,hh:mm:ss"") for all files and directories in the %iso_File%:"
: ...
:ValidTimestamp
:: Caution!
:: This function creates two subdirectories "dummy\empty".
:: Don't use these directories!
:: These directories were deleted automatically.
:: %~1 environment variable to store the timestamp to
if "%~1" == "" echo missing parameter & exit /b 1
if "%~2" == "" echo missing parameter & exit /b 1
setlocal enableExtensions enableDelayedExpansion
if not exist "dummy\empty" md "dummy\empty"
set "ts=%~2"
(
set ts
) | (
>nul findstr /R /C:"^ts=../../....,[0-1][0-9]:[0-5][0-9]:[0-5][0-9]$" /C:"^ts=../../....,2[0-3]:[0-5][0-9]:[0-5][0-9]$"
) && (
xcopy /d:!ts:~0,10! /t "dummy\empty" "dummy"
) && (
rd /s /q dummy
endlocal & set "%~1=%ts%"
exit /b 0
)
echo Invalid timestamp: !ts!.
endlocal
Re: esd ---> iso script (Work in Progress)
Squashman wrote:Code: Select all
: ...
call :ValidTimestamp "timestamp" "%~6" "Enter a timestamp (""mm/dd/yyyy\,hh:mm:ss"") for all files and directories in the %iso_File%:"
: ...
:ValidTimestamp
:: Caution!
:: This function creates two subdirectories "dummy\empty".
:: Don't use these directories!
:: These directories were deleted automatically.
:: %~1 environment variable to store the timestamp to
if "%~1" == "" echo missing parameter & exit /b 1
if "%~2" == "" echo missing parameter & exit /b 1
setlocal enableExtensions enableDelayedExpansion
if not exist "dummy\empty" md "dummy\empty"
set "ts=%~2"
(
set ts
) | (
>nul findstr /R /C:"^ts=../../....,[0-1][0-9]:[0-5][0-9]:[0-5][0-9]$" /C:"^ts=../../....,2[0-3]:[0-5][0-9]:[0-5][0-9]$"
) && (
xcopy /d:!ts:~0,10! /t "dummy\empty" "dummy"
) && (
rd /s /q dummy
endlocal & set "%~1=%ts%"
exit /b 0
)
echo Invalid timestamp: !ts!.
endlocal
I noticed that, when I write a timestamp in a different format, the routine does not ask me to type it again.
Moreover, it does not consider the leap years.
So, how do I solve these problems?
Thanks
Bye
Re: esd ---> iso script (Work in Progress)
This might help you:balubeto wrote:I noticed that, when I write a timestamp in a different format, the routine does not ask me to type it again.
Code: Select all
@echo off
setlocal enableExtensions disableDelayedExpansion
call :ValidTimestamp "timestamp" "%~1" "Enter a timestamp ('mm/dd/yyyy,hh:mm:ss') for all files and directories in the %iso_File%:"
set timestamp
endlocal
goto :eof
:ValidTimestamp
:: Caution!
:: This function creates two subdirectories "dummy\empty".
:: Don't use these directories!
:: These directories were deleted automatically.
:: %~1 environment variable to store the timestamp to
:: %~2 predefined timestamp value to test
:: %~3 text that is displayed to ask for the timestamp value
if "%~1" == "" echo missing parameter & exit /b 1
if not exist "dummy\empty" md "dummy\empty"
setlocal enableExtensions enableDelayedExpansion
set "ts=%~2"
if not defined ts set /P "ts=%~3"
(
set "ts"
) | (
>nul findstr /R /C:"^ts=../../....,[0-1][0-9]:[0-5][0-9]:[0-5][0-9]$" /C:"^ts=../../....,2[0-3]:[0-5][0-9]:[0-5][0-9]$"
) && (
xcopy /d:!ts:~0,10! /t "dummy\empty" "dummy"
) && (
rd /s /q dummy
endlocal & set "%~1=%ts%"
exit /b 0
)
echo Invalid timestamp: !ts!.
endlocal
if not "%~2" == "" (
call :ValidTimestamp "%~1" "" "%~3"
exit /b
)
goto :ValidTimestamp
It should!balubeto wrote:Moreover, it does not consider the leap years.
Which date does not work?
penpen