找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 24685|回复: 9

[其他] 批处理如何替换XML文件N个节点里某个值为指定范围内的随机数?

[复制链接]
发表于 2021-9-24 22:11:00 | 显示全部楼层 |阅读模式
请教如何替换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>
发表于 2021-9-24 22:25:24 | 显示全部楼层
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=1-3* delims== " %%i in (111.xml) do (
  4. if "%%i"=="<ccd" (
  5. set /a r=!random!%%18+1
  6. echo %%i %%j="!r!" %%l
  7. ) else (echo %%i %%j=%%k %%l)
  8. )
  9. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
vipid + 1 乐于助人

查看全部评分

 楼主| 发表于 2021-9-24 22:36:00 | 显示全部楼层
回复 2# idwma

谢谢兄弟!这就来试试
 楼主| 发表于 2021-9-24 22:49:03 | 显示全部楼层
本帖最后由 vipid 于 2021-9-24 22:51 编辑

回复 2# idwma


    好兄弟,里面的值好像没变
发表于 2021-9-25 11:07:14 | 显示全部楼层
回复 1# vipid
像这样处理文本的求助帖,应当注意以下几点:
1.最佳应当是提供测试文本,论坛不能发附件,可考虑发到网盘上;
2.如果不方便的发送文本文件,在论坛中提供文本内容也可,但要注意提供的文本内容片段最好从源文件中直接复制,必须具有代表性。
3.直接提供文本内容片段时,注意要说明源文本文件的编码方式。
我觉的你提供的文本片段不是直接复制而来,并且后来觉得不准确还修改过,没有说明源文件编码方式。
发表于 2021-9-25 13:46:10 | 显示全部楼层
给你来一个,会不会用你自己查

  1. $file = ".\aa.xml";
  2. $xml = [Xml.XmlDocument]::new();
  3. $xml.Load($file);

  4. $nums = [Collections.Generic.List[int]](1..18);
  5. $xml.SelectNodes("//ccd").Where{if($_.HasAttribute("id")){
  6.         if($nums.Count -gt 1){
  7.                 $index = (Get-Random $(0..($nums.Count-1)));
  8.                 $_.id = $nums[$index].ToString('d2');
  9.                 $nums.RemoveAt($index);
  10.         }elseif($nums.Count -eq 1){
  11.                 $_.id = $nums[0].ToString('d2');
  12.                 $nums.RemoveAt(0);
  13.         }else{$_.id = "Error"}
  14. }}

  15. $xml.Save($file);
  16. Pause;
复制代码

评分

参与人数 1技术 +1 收起 理由
vipid + 1 感谢版主!

查看全部评分

 楼主| 发表于 2021-9-25 18:25:18 | 显示全部楼层
本帖最后由 vipid 于 2021-9-25 18:39 编辑
给你来一个,会不会用你自己查
xczxczxcz 发表于 2021-9-25 13:46



    感谢版主!这个程序还真看不懂,能不能来个BAT的?
 楼主| 发表于 2021-9-25 18:40:12 | 显示全部楼层
感谢版主!这个程序还真看不懂,能不能来个BAT的?
发表于 2021-9-25 21:31:30 | 显示全部楼层
回复 7# vipid


参考:怎样执行 PowerShell 代码?
http://bbs.bathome.net/thread-31071-1-1.html
发表于 2021-9-26 08:37:44 | 显示全部楼层
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in ('findstr /n .* test.xml') do (
  4.     set "str=%%i"
  5.     set "str=!str:*:=!"
  6.     set "str1=!str:*<=!"
  7.     if "!str1:~,6!"=="ccd id" (
  8.         set /a num=!random!%%18+1
  9.         echo,      ^<ccd id="!num!" !str1:*" =!
  10.     ) else (
  11.         echo,!str!
  12.     )
  13. )
  14. pause
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-21 01:45 , Processed in 0.034386 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表