
Using ExecuteScriptText to get a list of all environment variables and their values
NOTE: If you're using Igor 7 or above, there's a much easier way to do this. Use the new built-in function
GetEnvironmentVariable
. If you need the values of all environment variables, call GetEnvironmentVariable("=")
. Otherwise, to get the value of a specific environment variable, call GetEnvironmentVariable("USER")
, for example, to get the value of the "USER" environment variable.//** // Using ExecuteScriptText, gets the environment variables. // Variables are returned as a carriage-return-separated // string. // // Usage examples: // print GetEnvironmentVariables() // Prints all variables to Igor's command history // String sys_path = StringByKey("PATH", GetEnvironmentVariables(), "=", "\r") //* Function/S GetEnvironmentVariables() String envInfoString = "" // This has to be done differently depending on the operating system. String platform = IgorInfo(2) String errorMessage StrSwitch (platform) Case "Windows": try // Do some setup. String tmpDir = SpecialDirPath("Temporary", 0, 0, 0) AbortOnValue (numtype(strlen(tmpDir)) != 0 || !(strlen(tmpDir) > 0)), 1 // Make sure that the directory we just got is, in fact, a directory. GetFileFolderInfo/Q tmpDir AbortOnValue (V_Flag >= 0 && !V_isFolder), 3 // Set an Igor symbolic path to the temporary directory. String tmpDirectoryPath = UniqueName("tmpPath", 12, 0) NewPath/Q $(tmpDirectoryPath), tmpDir AbortOnValue (V_flag), 5 // Setting of the new path failed. // Write a temporary batch file to the temporary directory that will // call the "set" command from the command shell and save the // output of the command to a temporary file. String tempBatFileName, tempResultsFileName String tempBatFileFullPath, tempResultsFileFullPath Variable tempBatFileRefNum, tempResultsFileRefNum sprintf tempBatFileName, "IgorGetEnvironmentVars_%.4u.bat", abs(trunc(StopMsTimer(-2))) Open/P=$(tmpDirectoryPath)/T=".bat"/Z=1 tempBatFileRefNum as tempBatFileName AbortOnValue (V_flag != 0), 7 // Add a path separator character to the end of the path, if necessary, and add on the file name. tempBatFileFullPath = ParseFilePath(2, tmpDir, ":", 0, 0) + tempBatFileName // Convert the path into a windows path that uses "\" as the path separator. tempBatFileFullPath = ParseFilePath(5, tempBatFileFullPath, "\\", 0, 0) sprintf tempResultsFileName, "IgorGetEnvironmentVars_%.4u.txt", abs(trunc(StopMsTimer(-2))) // Add a path separator character to the end of the path, if necessary, and add on the file name. tempResultsFileFullPath = ParseFilePath(2, tmpDir, ":", 0, 0) + tempResultsFileName // Convert the path into a windows path that uses "\" as the path separator. tempResultsFileFullPath = ParseFilePath(5, tempResultsFileFullPath, "\\", 0, 0) fprintf tempBatFileRefNum, "set > \"%s\"\r\n", tempResultsFileFullPath Close tempBatFileRefNum // Call the batch file we just created. Timeout after 2 seconds if this doesn't succeed. String scriptText sprintf scriptText, "cmd.exe /C \"%s\"", tempBatFileFullPath ExecuteScriptText/W=2/Z scriptText // Check for an error. AbortOnValue (V_flag != 0), 9 // Check that the temporary results file exists. GetFileFolderInfo/Z=1/Q/P=$(tmpDirectoryPath) tempResultsFileName AbortOnValue (V_flag != 0 || !(V_isFile)), 10 // Get the results from the temporary file created by the batch file. Open/P=$(tmpDirectoryPath)/R/Z=1 tempResultsFileRefNum as tempResultsFileName AbortOnValue (V_flag != 0), 12 String buffer do FReadLine tempResultsFileRefNum, buffer if (strlen(buffer) <= 0) break else envInfoString += buffer endif while (1) Close tempResultsFileRefNum // Delete the temporary batch file and temporary results file. DeleteFile/P=$(tmpDirectoryPath)/Z=1 tempBatFileName DeleteFile/P=$(tmpDirectoryPath)/Z=1 tempResultsFileName // If we get an error here we don't really care. We've already got // the goods, so just run. break catch // Error handling Switch (V_abortCode) Case 1: errorMessage = "Could not locate the operating system's temporary directory, so can't get environment variables." break Case 3: errorMessage = "Could not locate the operating system's temporary directory, so can't get environment variables." break Case 5: errorMessage = "Igor was unable to create a symbolic path to the temporary file directory." break Case 7: errorMessage = "Igor was unable to create a batch file in the temporary directory." break Case 9: errorMessage = "Igor was unable to execute the batch file to read the environment variables." break Case 10: errorMessage = "Igor was unable to locate or read the temporary file containing environment variables." break Case 12: errorMessage = "Igor was unable to open the temporary file containing environment variables." break default: errorMessage = "An unspecified error occurred while trying to read the environment variables." EndSwitch print errorMessage KillPath/Z $(tmpDirectoryPath) return "" endtry Case "Macintosh": // This is a lot easier on the Macintosh because we can just use AppleScript. try String appleScriptCommand = "do shell script \"env\"" ExecuteScriptText/Z appleScriptCommand AbortOnValue V_flag, 1 envInfoString = S_Value catch errorMessage = "Could not execute AppleScript command." print errorMessage return "" endtry break EndSwitch return envInfoString End

Forum

Support

Gallery
Igor Pro 10
Learn More
Igor XOP Toolkit
Learn More
Igor NIDAQ Tools MX
Learn More