批处理文件从UNC路径

时间:2015-06-26 17:42:38

标签: batch-file ini unc

所以,我一直在处理批处理文件以收集特定的系统信息,我遇到了一个路障,打开了网络安装的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。我出于某种原因无法阅读它。

2 个答案:

答案 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

指向路径时。数字会很简单。我仍然会收到错误,但是它会继续执行,这对我很好: - )