Wie entkomme ich in einem String-Ersetzungsskript ordnungsgemäß dem Zeichen "="?

420
Mr. Mendelli

Ich habe ein Batch-Skript erstellt, das Zeichenfolgen in einer angegebenen textbasierten Datei ersetzt. In meiner Datei sollte der String OutDir=binals ersetzt werden, er wird jedoch als OutDir=Buildausgegeben bin=OutDir=Build=bin. Wie entkommen ich das =in OutDir=binso dass die Zeichenfolge nicht verstümmelt nicht werden? Ich habe es versucht, OutDir^=aber die Möhre funktioniert auch nicht.

Hier ist mein aktuelles Skript:

@echo off  setlocal enableextensions disabledelayedexpansion  set search=OutDir=bin set replace=OutDir=Build  set textFile=%DOCUMENT%.txt  for /f "delims=" %%i in ('type "%textFile%" ^& break ^> "%textFile%" ') do ( set "line=%%i" setlocal enabledelayedexpansion >>"%textFile%" echo(!line:%search%=%replace%! endlocal ) 

Ich habe versucht, die Such- und Ersetzungsvariablen zu ändern, um =die Zeichenfolge zu ersetzen, die ich ersetze, aber keine hat funktioniert:

set search= "OutDir=bin" set replace= "OutDir=Build"  set search="OutDir=bin" set replace="OutDir=Build"  set "search=OutDir=bin" set "replace=OutDir=Build"  "set search=OutDir=bin" "set replace=OutDir=Build" 
4
Ich nehme an, Sie haben dies schon ein paar Mal gegoogelt, aber lesen Sie dies und alle Antworten hier (https://stackoverflow.com/questions/9556676/batch-file-how-to-replace-equal-signs-and-a-string) -variable), aber insbesondere die Antwort von Dbenham und den Link, den er in DosTips für einige zusätzliche Ideen usw. bereitstellt. Dies kann mit Batch mit einer kleinen PowerShell leichter zu lösen sein, wenn Sie dies versuchen möchten - Sie sollten es können Fügen Sie einige PowerShell direkt in den Stapel ein und lassen Sie es über PowerShell ausführen. Es könnte jedoch transparent sein, wenn Sie es richtig schreiben, sodass Sie nur ein Stapel-Skript ausführen, das Sie ausführen. Pimp Juice IT vor 6 Jahren 0
Ich bin mit PowerShell nicht genug vertraut, um es sogar zu versuchen. Dieses wird in ein vorhandenes Batch-Skript integriert, daher muss es Batch sein. Mr. Mendelli vor 6 Jahren 0
Möglicherweise, aber es gibt * viel * mehr, das übersetzt werden müsste. Da ich so unerfahren bin, müsste das fast ausschließlich von jemand anderem gemacht werden. Ich konvertiere auch das Skript (einmal abgeschlossen) in eine "exe" - Binärdatei mit dem Bat To Exe Converter. Wenn Sie Code aus einer anderen Sprache hinzufügen, wird er nach der Konvertierung wahrscheinlich beschädigt. Mr. Mendelli vor 6 Jahren 0
Ich verstehe alles, was du sagst. Wenn Sie einen einfachen Versuch machen möchten, um zu sehen, ob es möglicherweise funktioniert und Sie die gewünschte Ausgabe erhalten, schauen Sie sich den Text hier eines Schnellbatchskripts an, das Sie wie jedes andere Stapelbatchskript als Stapel ausführen können: https : //justpaste.it/1f9xv. Denken Sie daran, dass PowerShell Windows-native ist und die Sprache eigentlich nur Text ist. Wenn die Exe-Konvertierung den Text eines Stapels nicht durcheinander bringt, sollte dies hier nicht dasselbe sein. Das sollte für Sie so einfach sein, dass Sie einen kleinen Test machen, wenn Sie es hilfreich finden, dann gehen Sie. Pimp Juice IT vor 6 Jahren 1
Lassen Sie mich wissen, wie es läuft und wenn Sie etwas Nützliches oder Anpassungsbedarf finden oder bestätigen, dass es beim Testen usw. funktionieren könnte, informieren Sie mich bitte. Ich würde gerne eine Antwort mit viel mehr Details hinzufügen, wenn Sie der Meinung sind, dass dies in Ihrer Umgebung sogar möglich ist. Pimp Juice IT vor 6 Jahren 1
Vielen Dank! Ich werde das so bald wie möglich testen. Ich melde mich mit den Ergebnissen, wenn mein Test abgeschlossen ist. Mr. Mendelli vor 6 Jahren 1
Lassen Sie uns [diese Diskussion im Chat fortsetzen] (http://chat.stackexchange.com/rooms/71165/discussion-between-mr-mendelli-and-it-snuggles). Mr. Mendelli vor 6 Jahren 0

1 Antwort auf die Frage

2
Pimp Juice IT

Ersetzen des gleichen Symbols =in einer Zeichenfolge durch Batch mithilfe von PowerShell

Nach der Prüfung und dann Forschung danach, kam ich auf diese Antwort auf Stackoverflow, die dann auch zu spitz diesen Thread und Beiträgen auf DosTips und Ersetzen der =mit reiner Charge ist nicht einfach.

Wenn ich Probleme mit dem Batch-Scripting bekomme, bei denen eine Menge komplexer Batch-Logik erforderlich ist oder ich einfach nicht herausfinden kann, wie sie problemlos funktioniert, versuche ich normalerweise, PowerShell in den Mix zu integrieren, da sie Windows- nativ ist und sehr viel robuster sein kann als Charge ohne komplexe Logik.

Das untenstehende Batch-Skript wird im Wesentlichen:

Skript

@echo off setlocal enableextensions disabledelayedexpansion  set search=OutDir=bin set replace=OutDir=Build set textFile=%DOCUMENT%.txt  :PowerShell SET PSScript=%temp%\~tmpStrRplc.ps1 ECHO (Get-Content "%~dp0%textFile%").replace("%search%", "%replace%") ^| Set-Content "%~dp0%textFile%">"%PSScript%"  SET PowerShellDir=C:\Windows\System32\WindowsPowerShell\v1.0 CD /D "%PowerShellDir%" Powershell -ExecutionPolicy Bypass -Command "& '%PSScript%'" EXIT 

Ergebnis ausgeben

OutDir=Build 

Weitere Ressourcen