2014-11-27 5 views
0

Выходной нижеПакетный цикл с использованием Wmic

wmic logicaldisk get providername /value 

с помощью ЦМД (с ограниченными правами пользователя) на компьютере, я использую это:

ProviderName= 


ProviderName= 


ProviderName=\\xxx-SN-NA01\Users2\N\ni 


ProviderName=\\xxx-sn-na01\Software_Ca 


ProviderName=\\xxx-sn-na01\TSO 

Я Тринг, чтобы получить на следующие хранится в переменной с именем% drives_paths_wmic%:

\\xxx-SN-NA01\Users2\N\ni \\xxx-sn-na01\Software_Ca \\xxx-sn-na01\TSO 

Тогда для содержания этого должны быть переданы в переменную% файла%.

Пакетный код, который я в настоящее время является:

@echo off 
setlocal enabledelayedexpansion 
for /F "tokens=2 delims='='" %%A in ('wmic logicaldisk get providername /value') do (
    echo %%A >> %drive_paths_Wmic% 
) 
echo %drive_paths_Wmic% 
echo %drive_paths_Wmic% >> %file% 

Edit: проблема заключается в том, что ничего не сохраняется в переменной% drive_paths_Wmic%.

Поскольку командный файл должен запускаться на компьютерах под управлением Windows 7 и XP, я не могу использовать PowerShell. Просьба внести изменения в код партии, чтобы сделать это?

ответ

1

Вы не указали проблему. Однако:

'1'. delims== синтаксис

for /F "tokens=2 delims==" %%A in ('wmic logicaldisk get providername /value') do @echo %%A 

ли выход из выше команды справа? Я смею сказать, нет, потому что

'2'. все выходные данные из wmic являются Unicode. Для преобразования в ASCII попробуйте следующий код:

wmic logicaldisk get providername /value >somename.txt 
for /F "tokens=2 delims==" %%A in ('type somename.txt') do @echo %%A 

'3'. Результат по переменной:

set "file=" 
rem variable initialized now 
rem ... some code ... 
for /F "tokens=2 delims==" %%A in ('type somename.txt') do set file=!file! %%A 
rem ... some code ... 
echo !file! 
echo %file% 

или может быть set "file=!file! %%A", а

Полный пакет:

@ECHO OFF >NUL 
@SETLOCAL enableextensions enabledelayedexpansion 
set "drive_paths_Wmic=" 
rem variable initialized now 
rem ... some code ... 
wmic logicaldisk get providername /value >somename.txt 
for /F "tokens=2 delims==" %%A in ('type somename.txt') do (
    set drive_paths_Wmic=!drive_paths_Wmic! %%A 
    @rem ... some code ... 
) 
echo !drive_paths_Wmic! 
echo %drive_paths_Wmic% 
Endlocal 
goto :eof 

Output (на компьютере):

C:\bat>fivmic 
\\pc1870a\ttemp \\PC1870A\Install 
\\pc1870a\ttemp \\PC1870A\Install 

Output (часть с echo ON)

C:\bat>fivmic 
C:\bat>wmic logicaldisk get providername /value 1>somename.txt 
C:\bat>for /F "tokens=2 delims==" %A in ('type somename.txt') do set drive_paths_Wmic=!drive_paths_Wmic! %A 
C:\bat>set drive_paths_Wmic=!drive_paths_Wmic! \\pc1870a\ttemp 
C:\bat>set drive_paths_Wmic=!drive_paths_Wmic! \\PC1870A\Install 
C:\bat>rem ... some code ... 
C:\bat>echo !drive_paths_Wmic! 
\\pc1870a\ttemp \\PC1870A\Install 
C:\bat>echo \\pc1870a\ttemp \\PC1870A\Install 
\\pc1870a\ttemp \\PC1870A\Install 

И если переменная %file% содержит действительное имя файла, вы можете перенаправить эхо на этот файл, например. echo bubu >> anyname.txt добавляет текст bubu (на новой строке) в файл anyname.txt. В вашем скрипте:

set file="anyname.txt" 
echo %drive_paths_Wmic% >> %file% 
+0

Хорошо, я редактировал вопрос, чтобы включить проблему. Я попробую предложения и дам вам знать результат. –

+0

Теперь я использовал ваш код в «полной партии». Файл «somename.txt» создается и заполняется, однако программа выходит, когда пытается запустить линию for/f ... loop. Как это должно быть изменено? –

+0

Попробуйте 'set ECHO ON'. Сообщение об ошибке? Какая последняя линия ECHOed? – JosefZ

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