Yzöwl Posted April 22, 2015 Share Posted April 22, 2015 Well,you can have in the "deploy" batch (say): FOR /F "tokens=2 %delims==" %A IN ('TYPE i:\lenovo\domain\blank\last.ini ^| FIND "TheLast"') DO SET Today=%%A and have in the "imaging" one: IF NOT EXIST i:\lenovo\base\blank\%Today% MD i:\lenovo\base\blank\%Today%ECHO TheLast=%Today%>i:\lenovo\base\blank\last.inijaclaz change toFOR /F "tokens=2 %delims==" %%A IN ('FIND "TheLast"^<i:\lenovo\domain\blank\last.ini') DO SET Today=%%AandIF NOT EXIST i:\lenovo\base\blank\%Today%\ MD i:\lenovo\base\blank\%Today%>i:\lenovo\base\blank\last.ini ECHO;TheLast=%Today% 1 Link to comment Share on other sites More sharing options...
MHz Posted April 23, 2015 Share Posted April 23, 2015 (edited) Along with jaclaz idea, a symlink could be created as well. May as well create a symlink for static path handling and use the last.ini for reference to the last date. The use of a static path can help with WAIK tools or similar and less maintenance of suggested code in other scripts that also access the image file. This code is not tested so let me know if issues exist so I can fix it. I expect it to work though I have been wrong before.@ECHO OFFSETLOCAL ENABLEDELAYEDEXPANSIONrem # Set the date to a variable named Today.SET Today=%date:~10,4%-%date:~4,2%-%date:~7,2%rem # Make a folder for Today.IF NOT EXIST i:\lenovo\base\blank\%Today%\ MD i:\lenovo\base\blank\%Today%rem # Capture the image to Todays folder.imagex /compress fast /capture D: i:\lenovo\base\blank\%Today%\image.wim "Laptop Base Image"rem # Write Todays date to last.ini and symlink the image if no error detected from imagex.IF ERRORLEVEL 1 ( rem # Output the detection of an imagex error. >&2 ECHO Error !errorlevel! set by imagex. >&2 IF EXIST i:\lenovo\base\blank\%Today%\image.wim ECHO Image does exist in Todays directory.) ELSE ( rem # Write the last date to last.ini. (ECHO TheLast=%Today%)>i:\lenovo\base\blank\last.ini rem # Remove the last symlink as mklink does not overwrite. IF EXIST i:\lenovo\base\blank\image.wim DEL i:\lenovo\base\blank\image.wim rem # Create symlink in the blank directory to Todays image. mklink i:\lenovo\base\blank\image.wim i:\lenovo\base\blank\%Today%\image.wim IF ERRORLEVEL 1 >&2 ECHO Error !errorlevel! set by mklink.)ENDLOCALGOTO :EOFEdit: Added ENABLEDELAYEDEXPANSION to expand errorlevel variables used between () rounded braces. This affects only error message output displaying the value of the variable of errorlevel though is still misleading if error output is always seen as an unset value or as 0. Note, Reference of errorlevel variable is %errorlevel% changed to !errorlevel!. As per usual for testing, add the word PAUSE on a separate line immediately before or after the use of ENDLOCAL to pause the script and see any error output if issues occur. Edited April 24, 2015 by MHz 1 Link to comment Share on other sites More sharing options...
sam240 Posted April 23, 2015 Author Share Posted April 23, 2015 Well,you can have in the "deploy" batch (say): SET Today=FOR /F "tokens=2 %delims==" %A IN ('TYPE i:\lenovo\domain\blank\last.ini ^| FIND "TheLast"') DO SET Today=%%AIF NOT DEFINED Today ECHO ERROR...&PAUSE"imagex /apply i:\lenovo\domain\blank\%today%\image.wim" and have in the "imaging" one: SET Today=%date:~10,4%-%date:~4,2%-%date:~7,2%IF NOT EXIST i:\lenovo\base\blank\%Today% MD i:\lenovo\base\blank\%Today%ECHO TheLast=%Today%>i:\lenovo\base\blank\last.iniimagex /compress fast /capture D: i:\lenovo\base\blank\%Today%\image.wim "Laptop Base Image"jaclaz Well,you can have in the "deploy" batch (say): FOR /F "tokens=2 %delims==" %A IN ('TYPE i:\lenovo\domain\blank\last.ini ^| FIND "TheLast"') DO SET Today=%%A and have in the "imaging" one: IF NOT EXIST i:\lenovo\base\blank\%Today% MD i:\lenovo\base\blank\%Today%ECHO TheLast=%Today%>i:\lenovo\base\blank\last.inijaclaz change toFOR /F "tokens=2 %delims==" %%A IN ('FIND "TheLast"^<i:\lenovo\domain\blank\last.ini') DO SET Today=%%AandIF NOT EXIST i:\lenovo\base\blank\%Today%\ MD i:\lenovo\base\blank\%Today%>i:\lenovo\base\blank\last.ini ECHO;TheLast=%Today% Along with jaclaz idea, a symlink could be created as well. May as well create a symlink for static path handling and use the last.ini for reference to the last date. The use of a static path can help with WAIK tools or similar and less maintenance of suggested code in other scripts that also access the image file. This code is not tested so let me know if issues exist so I can fix it. I expect it to work though I have been wrong before.@ECHO OFFSETLOCALrem # Set the date to a variable named Today.SET Today=%date:~10,4%-%date:~4,2%-%date:~7,2%rem # Make a folder for Today.IF NOT EXIST i:\lenovo\base\blank\%Today%\ MD i:\lenovo\base\blank\%Today%rem # Capture the image to Todays folder.imagex /compress fast /capture D: i:\lenovo\base\blank\%Today%\image.wim "Laptop Base Image"rem # Write Todays date to last.ini and symlink the image if no error detected from imagex.IF ERRORLEVEL 1 ( rem # Output the detection of an imagex error. >&2 ECHO Error %errorlevel% set by imagex. >&2 IF EXIST i:\lenovo\base\blank\%Today%\image.wim ECHO Image does exist in Todays directory.) ELSE ( rem # Write the last date to last.ini. (ECHO TheLast=%Today%)>i:\lenovo\base\blank\last.ini rem # Remove the last symlink as mklink does not overwrite. IF EXIST i:\lenovo\base\blank\image.wim DEL i:\lenovo\base\blank\image.wim rem # Create symlink in the blank directory to Todays image. mklink i:\lenovo\base\blank\image.wim i:\lenovo\base\blank\%Today%\image.wim IF ERRORLEVEL 1 >&2 ECHO Error %errorlevel% set by mklink.)ENDLOCALGOTO :EOFYou guys are freaking genius! This made my life so much easier. Thank you so much jaclaz for the last.ini idea and thanks yzowl for tweaking it and also thank you MHZ for tweaking it. I did try jaclaz's script and that worked I haven't tried MHZ's script yet. I'll give it show tomorrow and get back to you. Each image takes a little time to capture so testing takes a while for each script. Link to comment Share on other sites More sharing options...
sam240 Posted April 23, 2015 Author Share Posted April 23, 2015 Well,you can have in the "deploy" batch (say): SET Today=FOR /F "tokens=2 %delims==" %A IN ('TYPE i:\lenovo\domain\blank\last.ini ^| FIND "TheLast"') DO SET Today=%%AIF NOT DEFINED Today ECHO ERROR...&PAUSE"imagex /apply i:\lenovo\domain\blank\%today%\image.wim"jaclaz Well,you can have in the "deploy" batch (say): FOR /F "tokens=2 %delims==" %A IN ('TYPE i:\lenovo\domain\blank\last.ini ^| FIND "TheLast"') DO SET Today=%%A and have in the "imaging" one: IF NOT EXIST i:\lenovo\base\blank\%Today% MD i:\lenovo\base\blank\%Today%ECHO TheLast=%Today%>i:\lenovo\base\blank\last.inijaclaz change toFOR /F "tokens=2 %delims==" %%A IN ('FIND "TheLast"^<i:\lenovo\domain\blank\last.ini') DO SET Today=%%AWhen I used the SET Today=FOR /F "tokens=2 %delims==" %A IN ('TYPE i:\lenovo\domain\blank\last.ini ^| FIND "TheLast"') DO SET Today=%%AIF NOT DEFINED Today ECHO ERROR...&PAUSEimagex /apply i:\lenovo\domain\blank\%today%\image.wim I got an error which says " the syntax of the command is incorrect".This is exactly what my script is like. Upto diskpart /s diskpartscript2.txt it works fine right after the cls, it gives me the syntax of the command is incorrect error. I tried both jaclaz's and Yzowl's I was able to capture the image and it created an last.ini in this directory i:\lenovo\base\blank\last.ini and also created a folder with the image.wim inside the folder with date. echo offTitle Deploying Laptop Base Imagediskpart /s diskpartscript2.txtclsSET Today=FOR /F "tokens=2 %delims==" %A IN ('TYPE i:\lenovo\base\blank\last.ini ^| FIND "TheLast"') DO SET Today=%%AIF NOT DEFINED Today ECHO ERROR...&PAUSEimagex /apply i:\lenovo\base\blank\%today%\image.wim W:\bcdboot W:\Windows /s S:PAUSEexit Link to comment Share on other sites More sharing options...
jaclaz Posted April 24, 2015 Share Posted April 24, 2015 There are a couple typos here:FOR /F "tokens=2 %delims==" %A should be:FOR /F "tokens=2 delims==" %%A The snippets posted are not "tested and verified" batches, they are examples/ideas and should be double checked, particularly for (stupid, my bad ) typos. jaclaz 1 Link to comment Share on other sites More sharing options...
MHz Posted April 24, 2015 Share Posted April 24, 2015 Updated my last post with an edit....Edit: Added ENABLEDELAYEDEXPANSION to expand errorlevel variables used between () rounded braces. This affects only error message output displaying the value of the variable of errorlevel though is still misleading if error output is always seen as an unset value or as 0. Note, Reference of errorlevel variable is %errorlevel% changed to !errorlevel!. As per usual for testing, add the word PAUSE on a separate line immediately before or after the use of ENDLOCAL to pause the script and see any error output if issues occur.One of the rare times that I chose to omit ENABLEDELAYEDEXPANSION when it was actually needed. Hey, perhaps I deserve this threads award for a simple yet stupid mistake. 1 Link to comment Share on other sites More sharing options...
Yzöwl Posted April 24, 2015 Share Posted April 24, 2015 sam240, you simply had to replace the three lines from jaclaz' two codes with my versions to fix his three issues. 1 Link to comment Share on other sites More sharing options...
sam240 Posted April 24, 2015 Author Share Posted April 24, 2015 sam240, you simply had to replace the three lines from jaclaz' two codes with my versions to fix his three issues.I did that very first and that's when I got the error. So I then I thought to replace it with jaclaz and still had the issue. I'm going to try it now and see if it works. Link to comment Share on other sites More sharing options...
sam240 Posted April 24, 2015 Author Share Posted April 24, 2015 (edited) As jaclaz mentioned I just had to remove "%" from front of delims. This seems to work but now but I think it's not recognizing %today% from the imagex line. I get the following msg from imagex echo offTitle Deploying Laptop Base Imagediskpart /s diskpartscript2.txtclsSET Today=FOR /F "tokens=2 delims==" %%A IN ('FIND "TheLast"^<i:\lenovo\base\blank\last.ini') DO SET Today=%%AIF NOT DEFINED Today ECHO ERROR...&PAUSEimagex /apply i:\lenovo\base\blank\%today%\image.wim W:\bcdboot W:\Windows /s S:PAUSEexit Edited April 24, 2015 by sam240 Link to comment Share on other sites More sharing options...
MHz Posted April 24, 2015 Share Posted April 24, 2015 sam240, Looks like your missng a parameter for imagex /apply. Look at the example at the bottom of the screen. 1 is used to set the image_number.Try changing it to:imagex /apply i:\lenovo\base\blank\%today%\image.wim 1 W:\ 1 Link to comment Share on other sites More sharing options...
sam240 Posted April 24, 2015 Author Share Posted April 24, 2015 sam240, Looks like your missng a parameter for imagex /apply. Look at the example at the bottom of the screen. 1 is used to set the image_number.Try changing it to:imagex /apply i:\lenovo\base\blank\%today%\image.wim 1 W:\Well that did it. I also changed the %today% to %Today% not sure if that matters since Set Today has capital T. Link to comment Share on other sites More sharing options...
MHz Posted April 24, 2015 Share Posted April 24, 2015 That was easy. With the case of variables, you can test that easy. Copied from a command promptC:\> set NAME=JackC:\> echo %name%JackSeems to be case insensitive. 1 Link to comment Share on other sites More sharing options...
sam240 Posted April 24, 2015 Author Share Posted April 24, 2015 That was easy. With the case of variables, you can test that easy. Copied from a command promptC:\> set NAME=JackC:\> echo %name%JackSeems to be case insensitive. Well then that 1 did it. I never used that variable before. It always worked without it but I'm guess because of the script, it requires it. Link to comment Share on other sites More sharing options...
MHz Posted April 24, 2015 Share Posted April 24, 2015 The dynamic variables created by a for loop are case sensitive. %%A is different from %%a. So keep those to the same case. Link to comment Share on other sites More sharing options...
sam240 Posted April 24, 2015 Author Share Posted April 24, 2015 The dynamic variables created by a for loop are case sensitive. %%A is different from %%a. So keep those to the same case.I think I wanna become a programmer! so cool =D Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now