[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[其他] 批处理如何替换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>

  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
复制代码

TOP

回复 7# vipid


参考:怎样执行 PowerShell 代码?
http://bbs.bathome.net/thread-31071-1-1.html
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

感谢版主!这个程序还真看不懂,能不能来个BAT的?

TOP

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



    感谢版主!这个程序还真看不懂,能不能来个BAT的?

TOP

给你来一个,会不会用你自己查
  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

评分人数

    • vipid: 感谢版主!技术 + 1
QQ: 己阵亡
脚本优先 [PowerShell win10]

TOP

回复 1# vipid
像这样处理文本的求助帖,应当注意以下几点:
1.最佳应当是提供测试文本,论坛不能发附件,可考虑发到网盘上;
2.如果不方便的发送文本文件,在论坛中提供文本内容也可,但要注意提供的文本内容片段最好从源文件中直接复制,必须具有代表性。
3.直接提供文本内容片段时,注意要说明源文本文件的编码方式。
我觉的你提供的文本片段不是直接复制而来,并且后来觉得不准确还修改过,没有说明源文件编码方式。

TOP

本帖最后由 vipid 于 2021-9-24 22:51 编辑

回复 2# idwma


    好兄弟,里面的值好像没变

TOP

回复 2# idwma

谢谢兄弟!这就来试试

TOP

  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

评分人数

    • vipid: 乐于助人技术 + 1

TOP

返回列表