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.
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
- Compartir respuesta