2016-07-04 3 views
-3

Мне было интересно, как отредактировать определенный атрибут в файле XML.Редактирование атрибутов XML с использованием пакета

атрибут, который я хотел бы изменить внешний вид, как это:
<Data key="serial">912487015087068085841514</Data>
Я хотел бы файл, чтобы установить значение случайной значное число.

+0

Сначала вы должны найти инструмент командной строки, способный редактировать XML и вызывать его. Вы не редактируете файлы с помощью пакетных скриптов, вы вызываете команды для программ, которые могут. –

+0

в порядке. Я не был уверен, потому что вы можете редактировать файлы .TXT с помощью партии –

+1

Вы _can_, но это невероятно сложно. Конечно, это не помешает этому вопросу получить здесь [все] (http://stackoverflow.com/questions/1946717/edit-xml-with-batch-file) [the] (http: // stackoverflow. com/questions/24584289/editing-xml-with-bat) [время] (http://stackoverflow.com/questions/5298293/batch-file-code-to-edit-a-string-between-strings-in- а-dtsconfig-XML-файл). – SomethingDark

ответ

0

PowerShell довольно хорошо справляется с данными XML. Я публикую это, чтобы предотвратить предложения по использованию sed, jrepl.bat или других инструментов обработки текста. XML следует обрабатывать как иерархический объект.

<# : batch portion 
@echo off & setlocal 

set "xmlfile=test.xml" 

powershell -noprofile "iex (${%~f0} | out-string)" 

goto :EOF 
: end batch/begin PowerShell hybrid code #> 

function rnd([int]$digits) { 
    $x = foreach ($i in 1..$digits) { get-random -min 0 -max 9 } 
    $x -join '' 
} 

[xml]$xml = gc $env:xmlfile 
$xml.SelectSingleNode('//Data[@key="serial"]/text()').data = rnd 24 
$xml.Save($env:xmlfile) 

Если вы хотите, вы можете изменить функцию rnd() для создания 24 шестнадцатеричных символов (0-9 и A-F) для еще большей хаотичности.

function rnd([int]$digits) { 
    $x = foreach ($i in 1..$digits) { (get-random -min 0 -max 16).toString('x') } 
    $x -join '' 
} 

... Или вы можете генерировать из каждого алфавитно-цифрового символа еще больше.

function rnd([int]$digits) { 
    $x = foreach ($i in 1..$digits) { [char](48..57 + 65..90 + 97..122 | get-random) } 
    $x -join '' 
} 

Но функция rnd() несколько повторно изобретает колесо. Вы можете создать много случайности, используя класс .NET GUID.

$xml.SelectSingleNode('//Data[@key="serial"]/text()').data = [guid]::NewGuid() 
Смежные вопросы