Lote: Encuentra una subcadena entre comillas dentro de una cadena.
No puedo hacer que esto funcione. Estoy leyendo un archivo XML línea por línea y luego reviso cada línea si contiene una etiqueta específica <assemblyIdentity name=”PostDeploymentAction” version”. Cuando la encuentro, la modificaría y escribiría todo de vuelta en un archivo.
Sin embargo, no puedo encontrar la etiqueta ya que contiene comillas.
@ECHO OFF
SETLOCAL EnableExtensions EnableDelayedExpansion
....algo más de código....
SET dllFile=%DestPath%\%ProjectName%.dll.manifest
IF NOT EXIST "%dllFile%" (
ECHO El archivo %ProjectName%.dll.manifest no existe^^!
GOTO ERROR
) ELSE (
ECHO Modificando %ProjectName%.dll.manifest en el directorio:
ECHO %DestPath%
REM Crear un archivo temporal en la carpeta desde donde se ejecuta este archivo por lotes
>"temp.xml" (
FOR /F "usebackq delims=" %%I IN ("%dllFile%") DO (
SET "line=%%I"
REM Insertar línea existente antes de la modificación
SETLOCAL DisableDelayedExpansion
ECHO %%I
ENDLOCAL
REM Encontrar el número de versión correcto
SET "myVariable=<assemblyIdentity name="PostDeploymentAction" version"
IF not "!line!"=="!line:myVariable=!" (
echo !line!
)
....algo más de código....
)
)
)
Cualquier carácter de escape que use, no encontrará esta línea en particular (o encuentra todas las líneas). Todo lo demás en el código anterior funciona bien, solo IF not “!line!”==”!line:myVariable=!” no lo hace. Cualquier ayuda será muy apreciada.
Gracias.
davy.ai
Parece que el problema aquí está en el uso de comillas en la cadena de búsqueda. Cuando el archivo por lotes lee una línea que contiene comillas, las trata como parte de la cadena y no como caracteres especiales. Por lo tanto, la cadena de búsqueda
<assemblyIdentity name="PostDeploymentAction" version"
no puede encontrar una coincidencia.Una forma de resolver este problema es utilizar manipulación de subcadenas para extraer las partes necesarias de la línea sin las comillas, y luego compararla con la cadena de búsqueda. Aquí tienes un ejemplo de código que debería funcionar:
En este fragmento de código, primero definimos la cadena de búsqueda (
searchStr
) y la cadena modificada (modifiedStr
). El bucleFOR
itera a través de cada línea del archivo XML, con la variableline
que contiene la línea actual. Eliminamos las comillas de la variableline
utilizando el comandoSET line=!line:"=!
. Luego, usamos manipulación de subcadenas para extraer los primeros 48 caracteres de la línea y compararlos con la variablesearchStr
. Si coincide, modificamos la línea utilizandoSET line=%modifiedStr%
. Finalmente, añadimos la línea modificada a un archivo temporal (temp.xml
) utilizandoECHO !line!>>temp.xml
.Espero que esto ayude. Avísame si tienes alguna pregunta adicional.