Reemplazar comillas dobles por otro carácter

Hace bastante tiempo se subió un script en sentencia de comando, pero no me esta andando cuando quiero reemplazar donde hay un carácter x comillas dobles, se pasan tres parámetros al llamar al script, "sustituye.bat valor a buscar "valor a reemplazar" C:\prueba\*.txt", pero al poner así

"sustituye.bat valor a % """ C:\prueba\*.txt", lo que quiero es donde dice % ponerle " (comillas dobles)

Este es el bat que copie

@echo off
Setlocal EnableDelayedExpansion
if "%3" == "" goto ayuda
set cadorig=%1
set cadorig=%cadorig:"=%
set cadsust=%2
set cadsust=%cadsust:"=%
for %%f in (%3) do (call :cambiar %%f)
goto fin
:cambiar
set archivo=%1
for /f "tokens=* delims=" %%i in (%archivo%) do (set ANT=%%i&echo !ANT:%cadorig%=%cadsust%! >>kk_temp.txt)
copy /y kk_temp.txt %archivo%
del /q kk_temp.txt
goto :EOF
:Ayuda
Echo Reemplaza una cadena por otra en el contenido de archivos (con comodines)
echo Utiliza un archivo temporal kk_temp.txt que no debe existir previamente
echo Formato: %0 cadorig cadsust archivos
echo Si las cadenas contienen espacios deben escribirse entrecomilladas
echo No funciona si la cadena original contiene un "="
Echo Ejemplo:
echo %0 de DE *.txt
:Fin

1 Respuesta

Respuesta
1

No entiendo muy bien si lo que quieres es cambiar los caracteres % por comillas dobles (en todo el texto de un archivo) o si lo que quieres es cambiar las comillas dobles por otro carácter, tal vez % en todo el texto de un archivo.

En cualquier caso esos caracteres son caracteres especiales, que se utilizan en la sintaxis de los comandos de MSDOS, por lo que creo que el bat anterior no te funcionará ni en un sentido ni en el otro. Para saltarse las limitaciones del entorno/shell MSDOS lo recomendable es usar la otra shell de Windows, Powershell. No soy muy experto en esta otra shell pero he aprendido a incluirla en archivos bat. Te propongo que pruebes lo siguiente:

@echo off
set archivo=D:\carpeta prueba\nahuel.txt
set corig=%%
set csust=""
@PowerShell  ^
   (get-content '%archivo%')^| foreach-object {$_ -replace "'%corig%'", "'%csust%'"} ^| set-content '%archivo%'
%End PowerShell%

Este bat utiliza Powershell (PS) y tal como está sustituirá en el archivo situado en la variable ARCHIVO (ahí puedes poner el path del archivo que te interese) todas las apariciones de % por comillas dobles. Hay que duplicarlos en las variables CORIG y CSUST porque también para PS estos caracteres son especiales. Si quieres hacer el cambio a la inversa solo tienes que cambiar la asignación a esas variables. Los cambios se graban en el archivo indicado, de modo que si no quieres perder el original deberías hacer una copia antes.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas