批处理文件从 UNC 路径读取 INI 文件
Batch file read INI file from UNC path
所以,我一直在处理一个批处理文件来收集特定的系统信息,我 运行 遇到了打开网络安装上的 INI 文件的障碍。所以获取路径为:
for /f "tokens=2*" %%a in ('REG Query "HKCU\SOFTWARE\Zephyr Associates, Inc." /v StyleDir 2^>nul') do set "StyleDir=%%~b"
for /f "tokens=2*" %%a in ('REG Query "HKLM\SOFTWARE\Zephyr Associates, Inc." /v StyleDir 2^>nul') do set "StyleDir=%%~b"
for /f "tokens=2*" %%a in ('REG Query "HKLM\SOFTWARE\Wow6432Node\Zephyr Associates, Inc." /v StyleDir 2^>nul') do set "StyleDir=%%~b"
cd %StyleDir%
所以在这种情况下,假设 %StyleDir% 是 //Server/StyleDir/
稍后在脚本中我们读取 Style.ini 文件,其中包含以下内容:
for /f "tokens=2 delims==" %%a in ('findstr SQLiteHome style.ini') do set SQLiteHome=%%a
for /f "tokens=2 delims==" %%a in ('findstr Server style.ini') do set SQL=%%a
for /f "tokens=2 delims==" %%a in ('findstr DataHome style.ini') do set DataHome=%%a
此时我收到一条错误消息,提示我们无法读取 Style.ini。在 Style.ini 我有以下内容:
[Default]
DataHome=C:\ProgramData\Zephyr\Data\
SQLiteHome=C:\ProgramData\Zephyr\Data\
[DataBaseList]
Tons of other lines I don't need to read Right now....
稍后我填充了一个记录信息的txt文件。该脚本如下:
::Output
echo StyleDir: %StyleDir% >> SystemInformation.txt
echo SQLiteHome: %SQLiteHome% >> SystemInformation.txt
echo SQL Server: %SQL% >> SystemInformation.txt
echo DataHome: %DataHome% >> SystemInformation.txt
那么有没有一种特殊的方法可以让我从 INI 文件中记录这些信息?我想过临时映射一个网络驱动器,但问题是知道哪些网络驱动器已经被映射,这样我就不会破坏已经存在的东西。我什至不能 100% 确定这与 UNC 路径有关,我只知道当 INI 在本地 C:\ 上时可以读取它,但在网络上则不能。对尝试什么有什么建议吗?
我注意到的另一件事是,无论位置如何,我都可以从批处理文件中打开 Style.ini。我只是出于某种原因无法阅读它。
你说:
I just know that when the INI is locally on C:\ that it can be read,
but on the network it cannot.
事实并非如此。您可以像这样使用 UNC 读取 ini 文件:
\ServerName\directory\any.ini
错误可能出在其他地方,例如引号不匹配、身份验证或文件丢失。了解您收到的确切错误消息将有助于调试准确的原因。
扩展 以响应完整的错误消息:
CMD does not support UNC paths
意味着删除此行
cd %StyleDir%
在你的批处理文件中,因为你不能 cd,除非你先映射到一个驱动器号。有关详细信息,请参阅地图/帮助。或者您可以通过修复 findstr 命令直接使用 UNC 来避免 cd 到该文件夹,例如:
findstr stringToSearch \full\UNC\path\to\file.ini
您选择哪个选项取决于对找到的字符串所做的操作。你提到你正在填充这些字符串,但不是在哪里。如果填充到远程服务器上的文件,请使用驱动器映射选项。如果在本地填充,则使用 UNC 选项。
我知道了,你只需要使用
pushd \server\dir
而不是
cd \server\dir
指向路径时。数字这将是一件容易的事。我仍然遇到错误,但它会继续过去,这对我来说很好:-)
所以,我一直在处理一个批处理文件来收集特定的系统信息,我 运行 遇到了打开网络安装上的 INI 文件的障碍。所以获取路径为:
for /f "tokens=2*" %%a in ('REG Query "HKCU\SOFTWARE\Zephyr Associates, Inc." /v StyleDir 2^>nul') do set "StyleDir=%%~b"
for /f "tokens=2*" %%a in ('REG Query "HKLM\SOFTWARE\Zephyr Associates, Inc." /v StyleDir 2^>nul') do set "StyleDir=%%~b"
for /f "tokens=2*" %%a in ('REG Query "HKLM\SOFTWARE\Wow6432Node\Zephyr Associates, Inc." /v StyleDir 2^>nul') do set "StyleDir=%%~b"
cd %StyleDir%
所以在这种情况下,假设 %StyleDir% 是 //Server/StyleDir/
稍后在脚本中我们读取 Style.ini 文件,其中包含以下内容:
for /f "tokens=2 delims==" %%a in ('findstr SQLiteHome style.ini') do set SQLiteHome=%%a
for /f "tokens=2 delims==" %%a in ('findstr Server style.ini') do set SQL=%%a
for /f "tokens=2 delims==" %%a in ('findstr DataHome style.ini') do set DataHome=%%a
此时我收到一条错误消息,提示我们无法读取 Style.ini。在 Style.ini 我有以下内容:
[Default]
DataHome=C:\ProgramData\Zephyr\Data\
SQLiteHome=C:\ProgramData\Zephyr\Data\
[DataBaseList]
Tons of other lines I don't need to read Right now....
稍后我填充了一个记录信息的txt文件。该脚本如下:
::Output
echo StyleDir: %StyleDir% >> SystemInformation.txt
echo SQLiteHome: %SQLiteHome% >> SystemInformation.txt
echo SQL Server: %SQL% >> SystemInformation.txt
echo DataHome: %DataHome% >> SystemInformation.txt
那么有没有一种特殊的方法可以让我从 INI 文件中记录这些信息?我想过临时映射一个网络驱动器,但问题是知道哪些网络驱动器已经被映射,这样我就不会破坏已经存在的东西。我什至不能 100% 确定这与 UNC 路径有关,我只知道当 INI 在本地 C:\ 上时可以读取它,但在网络上则不能。对尝试什么有什么建议吗?
我注意到的另一件事是,无论位置如何,我都可以从批处理文件中打开 Style.ini。我只是出于某种原因无法阅读它。
你说:
I just know that when the INI is locally on C:\ that it can be read,
but on the network it cannot.
事实并非如此。您可以像这样使用 UNC 读取 ini 文件:
\ServerName\directory\any.ini
错误可能出在其他地方,例如引号不匹配、身份验证或文件丢失。了解您收到的确切错误消息将有助于调试准确的原因。
扩展 以响应完整的错误消息:
CMD does not support UNC paths
意味着删除此行
cd %StyleDir%
在你的批处理文件中,因为你不能 cd,除非你先映射到一个驱动器号。有关详细信息,请参阅地图/帮助。或者您可以通过修复 findstr 命令直接使用 UNC 来避免 cd 到该文件夹,例如:
findstr stringToSearch \full\UNC\path\to\file.ini
您选择哪个选项取决于对找到的字符串所做的操作。你提到你正在填充这些字符串,但不是在哪里。如果填充到远程服务器上的文件,请使用驱动器映射选项。如果在本地填充,则使用 UNC 选项。
我知道了,你只需要使用
pushd \server\dir
而不是
cd \server\dir
指向路径时。数字这将是一件容易的事。我仍然遇到错误,但它会继续过去,这对我来说很好:-)