簡體   English   中英

通過批處理文件搜索並替換多個xml文件中的多個字符串

[英]Search and replace multiple strings in multiple xml files via batch file

我有一些xml文件(大約100個,在子文件夾中),其ID需要更改。 因此,我有一個大約有1.100行的Excel列表,左列是舊的ID名稱,右列是新的ID名稱,它應該替換舊的ID名稱。

我在Stackoverflow上找到了此腳本(並對其進行了一些更改):

@rem replaceids.bat

ECHO off
SETLOCAL enabledelayedexpansion

SET source=%1
SET target=%2

IF EXIST %target% DEL /f %target%

FOR /f "delims=" %%i IN ('FINDSTR . %source%') DO (
   SET line=%%i
   SET line=!line:ö=oe!
   SET line=!line:ä=ae!
   SET line=!line:ü=ue!
   ECHO !line! >> %target%
)

這是原始鏈接: 批量替換多個不同的字符串

然后,我創建了另一個批處理文件來調用上面的文件,並通過我的文件運行它:

for /R %%F in (*.xml) do (
   replaceids.bat "%%~dpnxF" "C:\mytargetfolder%%~pnxF"
)

也可以在Stackoverflow上找到它; 這是鏈接: 批量處理目錄中的所有文件

同時還要感謝reddit的Meltz014,他幫助了我。

我現在遇到的問題是,它說我啟動時找不到網絡路徑(由於我不在辦公室,並且現在正在德語Windows上運行,所以不確定它用英文確切說了什么)。 據我所知,我沒有引用任何網絡。

任何幫助,將不勝感激。

順便說一下,我的命令行經驗非常有限。

編輯

我只是發現了一些可能會使我更接近的東西,但是它仍然無法正常工作: 如何使用Powershell在多個文本文件中查找替換多個字符串

$Iteration = 0
$FDPATH = 'D:\opt\HMI\Gfilefind_rep'
#& 'D:\usr\fox\wp\bin\tools\fdf_g.exe' $FDPATH\*.fdf
$GraphicsList = Get-ChildItem -Path $FDPATH\*.g | ForEach-Object FullName
$FindReplaceList = Import-Csv -Path $FDPATH\Input.csv
foreach($Graphic in $Graphicslist){
    Write-Host "Processing Find Replace on : $Graphic"
    foreach($item in $FindReplaceList){
    Get-Content $Graphic | ForEach-Object { $_ -replace "$($item.FindString)", "$($item.ReplaceString)" } | Set-Content ($Graphic+".tmp")
        Remove-Item $Graphic
        Rename-Item ($Graphic+".tmp") $Graphic
        $Iteration = $Iteration +1
        Write-Host "String Replace Completed for $($item.ReplaceString)"
    }
}

它似乎在做某事,但整理后總是說

字符串替換完成

我的CSV文件就是在示例中創建的,這意味着:

FindString  ReplaceString
AA1A    171PIT9931A
BB1B    171PIT9931B
etc..

由於找不到任何內容,因此我認為CSV可能有誤嗎? 任何幫助將不勝感激!

可能有1個命令行可以幫助您完成工作:( %a =舊ID, %b =新ID)

for /f "tokens=1,2" %a in (ids-list.csv) do msr -rp dir1,dirN -f "\\.xml$" -x "%a" -o "%b" -R

  • 如果要在更改文件之前預覽結果,請刪除-R

  • 如果將上述命令放在文件中,則將%a替換為%%a ,將%b替換為%%b

不太明白您的問題。 我認為最好說兩點:

  • 你有什么投入?
  • 您需要什么輸出?

假設:

  • 您有一個源舊/新ID列表文件: ids-list.csv
  • 您要遞歸搜索並替換以下文件夾: dir1,dir2-N

msr.exe是我打開的項目https://github.com/qualiu/msrtools中的單個可移植exe工具。 您可以使用Regex替換( -t )代替純文本( -x )和忽略大小寫( -i )。 更多信息: https : //qualiu.github.io/msr/usage-by-running/msr-Windows.html

另外:

  • 如果你的ids-list.csv被分開,而不是白色的空間,使用方法:

    for /f "tokens=1,2 delims=," %a in (ids-list.csv)

  • 如果您的ids-list.csv更復雜,例如: "old-id-1","new-id-1" "old-id-2","new-id-2"

    for /f "tokens=*" %a in ('msr -p ids-list.csv -t ".*\\W(.+?)\\W,\\W(.+?)\\W.*" -o "$1 $2" -PAC')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM