所以,我一直在处理批处理文件以收集特定的系统信息,我遇到了一个路障,打开了网络安装的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文件中记录这些信息?我已经想过暂时映射一个网络驱动器,但问题是知道已经映射了什么网络驱动器,这样我就不会破坏已有的网络驱动器。我甚至不能完全确定这与UNC路径有关,我只知道当INI本地在C:\上它可以被读取,但在网络上它不能。有什么尝试的建议吗?
我注意到的另一件事是,无论位置如何,我都可以从批处理文件中打开Style.ini。我出于某种原因无法阅读它。
答案 0 :(得分:0)
你说:
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选项。
答案 1 :(得分:0)
我明白了,你所要做的就是使用
pushd \\server\dir
而不是
cd \\server\dir
指向路径时。数字会很简单。我仍然会收到错误,但是它会继续执行,这对我很好: - )