2015-06-26 2 views
0

Итак, я работал над пакетным файлом для сбора конкретной системной информации, я столкнулся с дорожным блоком с открытием INI-файла, который находится в сетевой установке. Таким образом, получение путь является:Пакетный файл считывает INI-файл из UNC-пути

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 из пакетного файла просто отлично, независимо от местоположения. Я просто не могу прочитать это по какой-то причине.

ответ

0

Я понял это, все, что вам нужно сделать, это использовать

pushd \\server\dir 

вместо

cd \\server\dir 

при наведении на пути. Цифры было бы легко. Я все еще получаю сообщение об ошибке, но это будет продолжаться мимо меня :-)

0

Вы сказали:

I just know that when the INI is locally on C:\ that it can be read, 
but on the network it cannot. 

Это не так. Вы можете прочитать INI файлов с UNCs как это:

\\ServerName\directory\any.ini 

Ошибка может быть в другом месте, например, несогласованные кавычки, проверке подлинности или отсутствующий файл. Зная, какое точное сообщение об ошибке вы получите, поможет отладить точную причину.

Expanded в ответ завершить Сообщ ошибки:

CMD does not support UNC paths 

Подразумевает удаление этой линии

cd %StyleDir% 

в пакетный файл, как вы не можете не кд, если вы сопоставляется с буквой диска первым. Проконсультируйтесь с картой/помощью. Или вы можете избежать cd'ing к этой папке, фиксируя команду Findstr использовать UNC непосредственно, например:

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

Какой вариант вы выберете, будет зависеть от того, что делается для найденных строк. Вы говорите, что вы заполняете эти строки, но не там. Если вы заполняете файл на удаленном сервере, используйте опцию карты диска. Если вы заполняете локально, используйте опцию UNC.

+0

\\ SERVERNAME \ SHARENAME \ каталог может быть \\ ALFRED \ C $ \ directory – lit

+0

@Emacs Пользователь Ошибка следующим образом: '\\ сервер \ папка \ Dir \' ' CMD не поддерживает пути UNC в качестве текущего directories.' ' Findstr: Невозможно открыть style.ini' 'FINDSTR: не может открыть style.ini ' ' FINDSTR: Невозможно открыть style.ini' – Pyrometheous

+0

@Paul, поэтому вы говорите, что, поскольку я использую UNC-путь, это не будет работать вообще? Я не всегда могу использовать дорожки букв, потому что он может быть другим, в зависимости от того, как его установил оригинальный пользователь установки. Будет ли способ обойти это? – Pyrometheous

Смежные вопросы