【问题标题】:Batch file read INI file from UNC path批处理文件从 UNC 路径读取 INI 文件
【发布时间】:2015-09-13 18:13:06
【问题描述】:

所以,我一直在处理一个批处理文件来收集特定的系统信息,但在打开网络安装上的 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。我只是因为某种原因无法阅读。

【问题讨论】:

    标签: batch-file ini unc


    【解决方案1】:

    你说:

    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'ing 到该文件夹​​,例如:

    findstr stringToSearch \\full\UNC\path\to\file.ini
    

    您选择哪个选项将取决于对找到的字符串执行的操作。你提到你正在填充这些字符串,但不是在哪里。如果填充到远程服务器上的文件,请使用驱动器映射选项。如果在本地填充,则使用 UNC 选项。

    【讨论】:

    • \\SERVERNAME\SHARENAME\directory 可能是 \\ALFRED\C$\directory
    • @Emacs User 报错如下:\\server\folder\Dir` CMD不支持UNC路径作为当前目录。`FINDSTR: Cannot open style.iniFINDSTR: Cannot open style.iniFINDSTR: Cannot open style.ini
    • @Paul 所以你是说因为我使用的是 UNC 路径,所以这根本不起作用?我不能总是使用驱动器号路径,因为它可能会根据原始安装人员的设置而有所不同。有办法解决这个问题吗?
    【解决方案2】:

    我想通了,你所要做的就是使用

    pushd \\server\dir
    

    而不是

    cd \\server\dir
    

    当指向路径时。数字这将是一件容易的事。我仍然得到一个错误,但它会继续过去,这对我来说很好:-)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-07
      • 2016-07-30
      • 2016-08-07
      • 2013-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多