
标题: [其他] 批处理如何替换XML文件N个节点里某个值为指定范围内的随机数? [打印本页]
作者: vipid 时间: 2021-9-24 22:11 标题: 批处理如何替换XML文件N个节点里某个值为指定范围内的随机数?
请教如何替换XML文件N个节点里某个值为指定范围内的随机数?
举个例子就像这样,其中这样的条目有N个,请教如何将<ccd id="*"的值全部替换为1-18内某个随机数?就是说最终所有的ccd id的值是随机1-18里任意的值。谢谢大家,弄完这个得系统的学习BAT了
<?xml version="1.0" encoding="UTF-8"?>
<ccd name="baidu">
<ccd id="12" name="baidu"/>
</ccd>
<ccd name="taobao">
<ccd id="12" name="taobao"/>
</ccd>
<ccd name="google">
<ccd id="12" name="google"/>
</ccd>
作者: idwma 时间: 2021-9-24 22:25
- @echo off
- setlocal enabledelayedexpansion
- for /f "tokens=1-3* delims== " %%i in (111.xml) do (
- if "%%i"=="<ccd" (
- set /a r=!random!%%18+1
- echo %%i %%j="!r!" %%l
- ) else (echo %%i %%j=%%k %%l)
- )
- pause
复制代码
作者: vipid 时间: 2021-9-24 22:36
回复 2# idwma
谢谢兄弟!这就来试试
作者: vipid 时间: 2021-9-24 22:49
本帖最后由 vipid 于 2021-9-24 22:51 编辑
回复 2# idwma
好兄弟,里面的值好像没变
作者: qixiaobin0715 时间: 2021-9-25 11:07
回复 1# vipid
像这样处理文本的求助帖,应当注意以下几点:
1.最佳应当是提供测试文本,论坛不能发附件,可考虑发到网盘上;
2.如果不方便的发送文本文件,在论坛中提供文本内容也可,但要注意提供的文本内容片段最好从源文件中直接复制,必须具有代表性。
3.直接提供文本内容片段时,注意要说明源文本文件的编码方式。
我觉的你提供的文本片段不是直接复制而来,并且后来觉得不准确还修改过,没有说明源文件编码方式。
作者: xczxczxcz 时间: 2021-9-25 13:46
给你来一个,会不会用你自己查- $file = ".\aa.xml";
- $xml = [Xml.XmlDocument]::new();
- $xml.Load($file);
-
- $nums = [Collections.Generic.List[int]](1..18);
- $xml.SelectNodes("//ccd").Where{if($_.HasAttribute("id")){
- if($nums.Count -gt 1){
- $index = (Get-Random $(0..($nums.Count-1)));
- $_.id = $nums[$index].ToString('d2');
- $nums.RemoveAt($index);
- }elseif($nums.Count -eq 1){
- $_.id = $nums[0].ToString('d2');
- $nums.RemoveAt(0);
- }else{$_.id = "Error"}
- }}
-
- $xml.Save($file);
- Pause;
复制代码
作者: vipid 时间: 2021-9-25 18:25
本帖最后由 vipid 于 2021-9-25 18:39 编辑
给你来一个,会不会用你自己查
xczxczxcz 发表于 2021-9-25 13:46 
感谢版主!这个程序还真看不懂,能不能来个BAT的?
作者: vipid 时间: 2021-9-25 18:40
感谢版主!这个程序还真看不懂,能不能来个BAT的?
作者: Batcher 时间: 2021-9-25 21:31
回复 7# vipid
参考:怎样执行 PowerShell 代码?
http://bbs.bathome.net/thread-31071-1-1.html
作者: qixiaobin0715 时间: 2021-9-26 08:37
- @echo off
- setlocal enabledelayedexpansion
- for /f "delims=" %%i in ('findstr /n .* test.xml') do (
- set "str=%%i"
- set "str=!str:*:=!"
- set "str1=!str:*<=!"
- if "!str1:~,6!"=="ccd id" (
- set /a num=!random!%%18+1
- echo, ^<ccd id="!num!" !str1:*" =!
- ) else (
- echo,!str!
- )
- )
- pause
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |