Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 批处理-在写入文件时使用延迟扩展_Batch File_Dos - Fatal编程技术网

Batch file 批处理-在写入文件时使用延迟扩展

Batch file 批处理-在写入文件时使用延迟扩展,batch-file,dos,Batch File,Dos,这是我的xml文件的一部分: <anyType xsi:type="xsd:string">dd32261_RealTimeRisk</anyType> <anyType xsi:type="xsd:boolean">false</anyType> <anyType xsi:type="xsd:string">dd32261</anyType> 上面的代码所做的是用usersoeid“ak15000”替换任何存在的t

这是我的xml文件的一部分:

<anyType xsi:type="xsd:string">dd32261_RealTimeRisk</anyType> 
<anyType xsi:type="xsd:boolean">false</anyType> 
<anyType xsi:type="xsd:string">dd32261</anyType> 
上面的代码所做的是用usersoeid“ak15000”替换任何存在的tradersoeid“dd32261”。这很好用

但我想做的是将第一行出现的“dd32261”替换为“dd32261_ak15000”,并将第二行替换为原来的“dd32261_ak15000”

我试过这样的方法:

set "val1=>"
set "val2=_"    
set "str=%val1%%tradersoeid%%val2%"
因此,每当它找到dd32261\u时,就用>dd32261\u用户ID替换它

当它找到dd32261时,将其替换为usersoeid 我假设您希望替换每个文件中出现的“d32261”的第一行

另外,我建议您更改这一行:

for /F "usebackq tokens=*" %%b in ("%%G.temp") do (
通过这个:

for /F "usebackq delims=" %%b in ("%%G.temp") do (
“delims=”是获取整行的标准方式。“tokens=*”只需一个空格即可更改多个空格和制表符

编辑:添加新版本


谢谢,我将尝试此操作并让您知道。但是,我看到Connections.xml文件有时没有第一行。因此,在这种情况下,它将用tardersoeid_usersoeid替换下一次出现的tradersoeid。我不希望这样,所以我尝试了如下代码:
echo off set tradersoeid=dd32261 set usersoeid=ak15000 set ws_namestr=%tradersoeid%\u%usersoeid%set-id\%tradersoeid%\R-c:\ABC\TraderFolders\%tradersoeid%\PROD%%G-in(Connections.xml)do(将“%%G”“%%G.temp”移到/F”usebackq-delims=“%%b in”(%%G.temp”)do(将write=%%b移到/F%%t in(“!id_!”)do echo%%t for/F%%u in(!ws_namestr!”)do设置newWrite=!write:%%t=%u!echo!newWrite!>%“如果不是”!newWrite!”==“!write!”(设置id \%tradersoeid%ws\u namestr=%usersoeid%))del“%%G.temp”)
,那么只有当tradersoeid后面有下划线时,才会将其替换为tradersoeid \%u usersoeid%,否则仅替换为usersoeid。”。但是这不起作用。嗨@Aacini,在我的问题中添加上面的代码。。。这里看起来不太好
set tradersoeid=dd32261

for /R c:\ABC\TraderFolders\%tradersoeid%\PROD %%G in (Connections.xml) do (
   MOVE "%%G" "%%G.temp"
   set usersoeid=%tradersoeid%_ak15000
   for /F "usebackq tokens=*" %%b in ("%%G.temp") do (
      set write=%%b
      for /F %%u in ("!usersoeid!") do set newWrite=!write:%tradersoeid%=%%u!
      echo !newWrite! >> "%%G"
      if not "!newWrite!" == "!write!" set usersoeid=ak15000
   )
   del "%%G.temp"
)
for /F "usebackq tokens=*" %%b in ("%%G.temp") do (
for /F "usebackq delims=" %%b in ("%%G.temp") do (
set tradersoeid=dd32261
set usersoeid=ak15000

for /R c:\ABC\TraderFolders\%tradersoeid%\PROD %%G in (Connections.xml) do (
   MOVE "%%G" "%%G.temp"
   for /F "usebackq tokens=*" %%b in ("%%G.temp") do (
      set write=%%b
      set newWrite=!write:%tradersoeid%_=%tradersoeid%_%usersoeid%_!
      if "!newWrite!" == "!write!" set newWrite=!write:%tradersoeid%=%usersoeid%!
      echo !newWrite! >> "%%G"
   )
   del "%%G.temp"
)