Difference between revisions of "Batch File Scripting Tips"

From WPKG | Open Source Software Deployment and Distribution
Jump to: navigation, search
(Use of User Shell Folders variables)
(Added NUL / NUL.EXT)
Line 1: Line 1:
 
Here are collected various batch file scripting tips for use when writing .bat files for use with WPKG.
 
Here are collected various batch file scripting tips for use when writing .bat files for use with WPKG.
  
* If a batch file gives a degree of output to the screen it can overwhelm WPKG and the batch script hang. Lessen the output of commands by appending each with ' 1>NUL 2>NUL'. This will prevent commands echoing their messgaes (from use of the echo command), results and errors to the screen and thus to WPKG.
+
* If a batch file gives a degree of output to the screen it can overwhelm WPKG and the batch script hang. Lessen the output of commands by appending each with ' 1>NUL 2>NUL'. This will prevent commands echoing their messgaes (from use of the echo command), results and errors to the screen and thus to WPKG. Also, begin a batch script with '@echo off' so that the commands themselves aren't displayed.
Also, begin a batch script with '@echo off' so that the commands themselves aren't displayed.
+
  
 
* Where a % character references a variable from within a batch file, where a single % can be used from the command-line a double %% has to be used from within a batch file.
 
* Where a % character references a variable from within a batch file, where a single % can be used from the command-line a double %% has to be used from within a batch file.
  
 
* The Windows shell and some command-line programs don't like spaces appearing in file or directory names. For example when using such wildcards as %PROGRAMFILES% in %PROGRAMFILES%\some-directory\some-program.exe where we don't know whether or not %PROGRAMFILES% contains a space, use "%PROGRAMFILES%\some-directory\some-program.exe"
 
* The Windows shell and some command-line programs don't like spaces appearing in file or directory names. For example when using such wildcards as %PROGRAMFILES% in %PROGRAMFILES%\some-directory\some-program.exe where we don't know whether or not %PROGRAMFILES% contains a space, use "%PROGRAMFILES%\some-directory\some-program.exe"
 +
 +
* When batch files check for the existence or not of a directory, using 'if exist' or 'if not exist', if the directory is being checked for on a Windows system then the batch file needs to use '\NUL.ext', if the directory is being checked for on a Linux Samba system (at least Samba 3.2.x) then the batch file needs to use '\NUL'.
  
 
* It is possible to load special variables from registry "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders":
 
* It is possible to load special variables from registry "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders":

Revision as of 17:22, 8 March 2010

Here are collected various batch file scripting tips for use when writing .bat files for use with WPKG.

  • If a batch file gives a degree of output to the screen it can overwhelm WPKG and the batch script hang. Lessen the output of commands by appending each with ' 1>NUL 2>NUL'. This will prevent commands echoing their messgaes (from use of the echo command), results and errors to the screen and thus to WPKG. Also, begin a batch script with '@echo off' so that the commands themselves aren't displayed.
  • Where a % character references a variable from within a batch file, where a single % can be used from the command-line a double %% has to be used from within a batch file.
  • The Windows shell and some command-line programs don't like spaces appearing in file or directory names. For example when using such wildcards as %PROGRAMFILES% in %PROGRAMFILES%\some-directory\some-program.exe where we don't know whether or not %PROGRAMFILES% contains a space, use "%PROGRAMFILES%\some-directory\some-program.exe"
  • When batch files check for the existence or not of a directory, using 'if exist' or 'if not exist', if the directory is being checked for on a Windows system then the batch file needs to use '\NUL.ext', if the directory is being checked for on a Linux Samba system (at least Samba 3.2.x) then the batch file needs to use '\NUL'.
  • It is possible to load special variables from registry "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders":
    • It needs gawk (in %SOFTWARE%\bin for the following code)
    • The front and trailing whitespaces are removed ( gsub(/^[ \t]+/, "",$X) and gsub(/[ \t]+$/, "", $X) )
    • The spaces in variable names are removed: "Local Settings" => "LocalSettings"
@echo off

SET QUERY_HIVE=HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
SET WPKGBIN=%SOFTWARE%\bin

for /F "usebackq skip=2 delims==" %%G IN (`reg query "%QUERY_HIVE%"`) DO (
REM Possible use of tokens=1,2 to avoid 2 for loops ?
REM  echo %%G | %WPKGBIN%\gawk -F"REG_EXPAND_SZ" "{gsub(/[ \t]+/, \"\", $1);gsub(/[ \t]+$/,\"\",$1);gsub(/^[ \t]+/, \"\", $2);gsub(/[ \t]+$/,\"\",$2);print($1\",\"$2)}"
  for /F "delims=" %%I IN ('echo %%G ^| %WPKGBIN%\gawk -F"REG_EXPAND_SZ" "{gsub(/[ \t]+/, \"\", $1);print($1)}"') DO (
    for /F "delims=" %%J IN ('echo %%G ^| %WPKGBIN%\gawk -F"REG_EXPAND_SZ" "{gsub(/^[ \t]+/, \"\", $2);gsub(/[ \t]+$/,\"\",$2); print($2)}"') DO (
       set %%I=%%J
REM       echo  %%I=%%J
    )
  )
)

To be use like this:

@echo off

IF "%Dektop%" == "" CALL %SOFTWARE%\bin\load-vars.cmd

echo "My Documents are located at %Personal%"