Editar bat desde otro bat

Tengo tengo dos .bat en el mismo directorio necesito que el primero modifique a el segundo de la siguiente manera. Le cambie el símbolo "?" por ">" y el símbolo "¿" por ">>". Pero no lo e logrado hacer con tu código.

1

1 Respuesta

92.475 pts. Experiencia en manejo de bases de datos Oracle,...

Le he echado un vistazo y he hecho algunas pruebas sin éxito. El problema de fondo es que los símbolos reemplazadores tienen que ver con la redirección. Ahora no puedo seguir revisando el asunto, pero esta tarde volveré a intentarlo.

Ya te diré algo.

Creo que he encontrado una solución, aunque es específica para cada una de las dos sustituciones (al menos de momento no he conseguido que funcione de forma genérica). Se trata de "escapar" los símbolos reemplazadores (">" y ">>") mediante el carácter "caret" (circunflejo o "^"). Por ejemplo el código siguiente cambiaría en cualquier archivo (cuyo nombre se pasa como parámetro) el carácter MSDOS "¿" (que visto desde Windows es el carácter "¨", código ASCII 168) por la serie ">>":

@echo off
Setlocal EnableDelayedExpansion
del /q tmp.txt
for /f "tokens=* delims=" %%i in (%1) do (
set ANT=%%i
echo antes:!ANT!
echo !ANT:¨=^>^>! >>tmp.txt
echo despues:!ANT:?=^>^>!
)
copy /y tmp.txt %1

Pruébalo y me dices algo. Si no entiendes alguna cosa dímelo también.

en la carpeta tengo varios archivos .bat el archivo 13.bat debe modificar a el 14.bat así que puse el código que me das a el final del código del archivo 13.bat pero no modifico a el archivo 14.bat

gracias

El ejemplo que te puse sirve para hacer los cambios en el archivo que se le pase como parámetro (variable interna %1). Si lo quieres añadir al final del 13.bat para que haga los cambios en el 14.bat tendrías que poner algo como:

Setlocal EnableDelayedExpansion
del /q tmp.txt
for /f "tokens=* delims=" %%i in (14.bat) do (
set ANT=%%i
echo antes:!ANT!
echo !ANT:¨=^>^>! >>tmp.txt
echo despues:!ANT:?=^>^>!
)
copy /y tmp.txt 14.bat

Por si acaso salva previamente el 14.bat por si te lo estropea ;-)

A ver si ahora hace lo que quieres.

Se me olvidaba. Si además de cambiar el carácter "¿" (insisto en que tiene que ser "¿" vista desde una ventana CMD, no desde una ventana de Windows o Notepad) quieres también cambiar el carácter "?" (este es el mismo en Windows y en MSDOS) por ">" tendrás que añadir este otro código:

del /q tmp.txt
for /f "tokens=* delims=" %%i in (14.bat) do (
set ANT=%%i
echo !ANT:?=^>! >>tmp.txt
)
copy /y tmp.txt 14.bat

Ya le he limpiado los "echo" de depuración (los que hablaban de "antes" y "despues".

hola amigo creo que es mejor comenzar desde el inicio porque los resultados están perdiendo la forma

el archivo 13.bat en la parte final lleva un codigo que crea el archivo 14.bat mi problema conmezo justo en esa parte porque el nuevo archivo 14.bat contiene ">" ">>"

zxc123 > 15.bat
vbn123 >> 15.bat
jkl123>> 15.bat

para crearlo puse el codigo asi

echo zxc123 > 15.bat>> 14.bat
echo vbn123 >> 15.bat>> 14.bat
echo jkl123>> 15.bat>> 14.bat

pero el resultado fue. como contenido del nuevo .bat

zxc123 
vbn123 
jkl123

entonces intente con las " "

echo "zxc123 > 15.bat">> 14.bat
echo "vbn123 >> 15.bat">> 14.bat
echo "jkl123>> 15.bat">> 14.bat

pero el resultado fue que el contenido del .bat fue

"zxc123 > 15.bat"
"vbn123 >> 15.bat"
"jkl123>> 15.bat"

e intentado con otros simbolos que no sean las " " para encerrar el codigo pero que no aparescan en el codigo de resultado. ya use ( ), < >, { }, [ ] y ^ ^ como no me dieron resultado. use el siguiente codigo para

@Echo OFF
Set "OldTextFile=Archivo.txt"
Set "NewTextFile=Nuevo Archivo.txt"
(
 FOR /F "Usebackq Delims=" %%@ IN ("%OldTextFile%") DO (
 Set "str=%%@"
 Call Set "str=%%str:~1,-1%%"
 Call Echo %%str%%
 )
)> "%NewTextFile%"
Pause&Exit

este ultimo codigo no modifica el archivo lo que hace es que crea un nuevo archivo modificado. a diferencia de su codigo que observo que crea un archivo tem.txt aunque esperaba que fuera un archivo temporal pero queda residual en la carpeta donde están los .bat

a el mezclar este ultimo codigo como los que usted me dio los resultados no son los deseados.

el porque necesito sustituir los ? ¿ es porque remplace los > >> por estos desde el inicio para a el final bolverlos a remplazar pero no funciono como esperaba.

creo que me seria de igual manera util una forma de usar un simbolo que encierre el codigo como las " " pero que no aparesca en el codigo de resultado

Efectivamente, creo que es mucho mejor el nuevo enfoque que me has comentado. Con lo que he aprendido para intentar resolver el problema con el enfoque original ya tengo claro que lo que necesitas es:

Echo zxc123 ^> 15.bat>> 14.bat
Echo vbn123 ^>^> 15.bat>> 14.bat
Echo jkl123^>^> 15.bat>> 14.bat

Yo lo he probado y funciona. Ahora compruébalo tú.

mil gracias funciona bien. pero veo un error que no se cual sera la causa.

en una parte del codigo va algo asi

echo zxc123=%1 > 15.bat>> 14.bat
echo vbn123=%DirFtp:\=/% >> 15.bat>> 14.bat
echo jkl123 %DirFtp% >> 15.bat>> 14.bat
echo jkl123 %1>> 14.bat
echo jkl123 %DirFtp%>> 14.bat

queda asi en realidad en el archivo 14.bat

echo zxc123= > 15.bat>> 14.bat
echo vbn123=\=/ >> 15.bat>> 14.bat
echo jkl123  >> 15.bat>> 14.bat
echo jkl123 >> 14.bat
echo jkl123 >> 14.bat

estoy tratando de sulucionarlo pero sin avances

No entiendo muy bien como quieres que aparezca en el 14.bat. Si, como supongo, quieres que en el 14.bat aparezca, por ejemplo

echo zxc123=%1 > 15.bat

tendrás que poner en el BAT que genera el 14.bat lo siguiente:

echo echo zxc123=^%1 ^> 15.bat >14.bat

Y, análogamente, si quieres que en el 14.bat aparezca (añadido a lo anterior)

echo vbn123=%DirFtp:\=/% >> 15.bat

tendrás que poner en el BAT que genera el 14.bat lo siguiente:

echo echo vbn123=^%DirFtp:\=/^% ^>^> 15.bat >>14.bat

Cada carácter que pueda ser tratado por el comando echo como algo propio (caso del % para las variables y el > para las redirecciones) tiene que precederse del ^ que hace de "escape" del propio comando. Y no olvides duplicar el "echo" si quieres que en el archivo de destino aparezca un "echo".

Si lo que he supuesto no era lo que pretendías dime que es lo que quieres que aparezca en el 14.bat y te diré lo que tendrías que poner en el bat generador.

esta es la parte del código que presenta el problema.

set DirFtp=%1 >> 14.bat
set DirFtp=%DirFtp:\=/% >> 14.bat
echo mkdir %DirFtp% ^>^> ftp.txt >> 14.bat
echo lcd %1 ^>^> ftp.txt >> 14.bat
echo cd %DirFtp% ^>^> ftp.txt >> 14.bat

gracias por su ayuda.

Pero no me queda claro como quieres que se vea "exactamente" en el 14.bat.

Por ejemplo a la primera instrucción

set DirFtp=%1 >> 14.bat

No le veo mucho sentido porque redireccionar un SET no veo que sirva para nada (enviaría a 14.bat la salida del comando SET que no es ninguna).

Otra cosa sería que pretendas que en 14.bat aparezca se grabe "set DirFtp=%1".

Para ello tendrías que escribir en el BAT que está generando el 14.bat lo siguiente:

echo set DirFtp=^%1 >> 14.bat

Por eso te decía que me dijeras que es "exactamente" lo que quieres que se vea en el 14.bat (obviamente en el 14.bat no es muy lógico que se escriba en sí mismo como aparece en todas las instrucciones que me has escrito en el mensaje anterior).

¡Venga, que ya falta poco para que nos entendamos correctamente!

Espero tener noticias tuyas antes pero si no fuera así te deseo un Feliz Año 2014.

bueno el bat 13 crea el bat 14

una parte del código del bat 13 es la siguieten

set DirFtp=%1 >> 14.bat
set DirFtp=%DirFtp:\=/% >> 14.bat
echo mkdir %DirFtp% ^>^> ftp.txt >> 14.bat
echo lcd %1 ^>^> ftp.txt >> 14.bat
echo cd %DirFtp% ^>^> ftp.txt >> 14.bat

se supone que se crearía el bat 14 de esta manera

set DirFtp=%1
set DirFtp=%DirFtp:\=/%
echo mkdir %DirFtp% >> ftp.txt
echo lcd %1 >> ftp.txt
echo cd %DirFtp% >> ftp.txt

esa es la parte del código que presenta el error porque se crea de la siguiente manera

set DirFtp=
set DirFtp=\=/
echo mkdir  >> ftp.txt
echo lcd  >> ftp.txt
echo cd  >> ftp.txt

gracias y feliz año o nuevo ciclo solar jajjaj

Veamos.

Tenía una respuesta preparada en base a pruebas directas desde la ventana CMD y se me ocurrió probar desde un BAT y comprobé que estaba cometiendo un error. El ^ no sirve para "escapar" el % desde un BAT. En vez de eso hay que duplicarlo

Si quieres que en 14.bat aparezca:

set DirFtp=%1

Tendrás que poner en el 13.bat lo siguiente (creo que se te olvidaba el "echo" delante de las "set"):

echo set DirFtp=%%1 >> 14.bat

En resumen, para obtener lo que quieres en el 14.bat esto es lo que debe aparecer en el 13.bat

echo set DirFtp=%%1 >> 14.bat
echo set DirFtp=%%DirFtp:\=/%% >> 14.bat
echo mkdir %%DirFtp%% ^>^> ftp.txt >> 14.bat
echo lcd %%1 ^>^> ftp.txt >> 14.bat
echo cd %%DirFtp%% ^>^> ftp.txt >> 14.bat

muchas gracias con eso finalice los errores.

feliz año

Perfecto. Me alegro mucho.

Una vez más, ha sido un placer.

Cierra la pregunta, por favor.

Saludos ya en el 2014 (al menos en Madrid).

GGG

Supongo que las actividades de estas fechas te hacen tener un poco olvidado el correo y que eso explicará que todavía no hayas cerrado la pregunta.

Si no te importa, ciérrala.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas