Buenas tardes, ¿En el caso de que el sistema sea x64 como lo harías con el comando edlin?

Echo %yester%
set datayester=%yester%/%month%/%year%
Echo %datayester%
(
echo 37
echo LastBusinessDateExported=%datayester%
echo w
echo e
) | edlin /b config.ini
Pause

El problema de esto es que necesito hacerlo en x64

1 respuesta

Respuesta

Me parece que no se puede usar edlin en x64. Puedes verlo en:

https://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/edlin.mspx?mfr=true

Lo que no sé es si lo que intentas hacer con edlin se podría hacer de alguna otra manera desde el MSDOS de x64.

Si me cuentas lo que quieres hacer se puede intentar encontrar otra solución.

en realidad el bat completo, toma la fecha de hoy lo transforma en "ayer" y modifica la linea 37 de un .ini con la fecha de ayer.

Dos preguntas:

1 - ¿Cómo calculas la fecha de ayer si el día de hoy es el 1? Para ser riguroso tendrías que tener en cuenta el mes y tal vez el año.

2 - ¿Hay qué usar que sea la línea 37 o se puede uno basar en que esté precedida de "LastBussinessDateExported"?

Es que se me ocurre alguna forma puede que sea más cómodo si se puede usar esa cadena de búsqueda.

Mientras me contestas he investigado sobre la primera cuestión para darle una solución general y he supuesto que la respuesta a la segunda era mantener la sustitución a ciegas de la línea 37.

Este código podría funcionar aunque me temo que puede borrar las líneas en blanco del archivo original, config.ini.

@echo off
Setlocal EnableDelayedExpansion
for /f "tokens=1,2,3 delims=-/." %%a in ("%date%") do (
set dd=%%a&set mm=%%b&set yy=%%c)
set /a dd=100%dd%%%100,mm=100%mm%%%100
set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2
set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
set /a j+=-1
set /a a=%j%+2472632,b=4*a+3,b/=146097,c=-b*146097,c/=4,c+=a
set /a d=4*c+3,d/=1461,e=-1461*d,e/=4,e+=c,m=5*e+2,m/=153,dd=153*m+2,dd/=5
set /a dd=-dd+e+1,mm=-m/10,mm*=12,mm+=m+3,yy=b*100+d-4800+m/10
(if %mm% LSS 10 set mm=0%mm%)&(if %dd% LSS 10 set dd=0%dd%)
del kkk.txt
set nlin=1
for /f "tokens=*" %%i in (config.ini) do (
if not "!nlin!" == "37" echo %%i>> kkk.txt
if "!nlin!" == "37" echo LastBusinessDateExported=%dd%/%mm%/%yy%>>kkk.txt
set /a nlin=!nlin!+1
)
copy /y kkk.txt config.ini

Genera un archivo temporal kkk.txt con el que al final se reescribe el config.ini. Para las pruebas puedes eliminar (o comentar con "rem") la última línea.

Si te funciona pero la eliminación de las líneas en blanco te supone algún problema dímelo que creo que también se podría hacer algo para respetarlas.

Con esta versión creo que se respetarían las líneas en blanco.

@echo off
Setlocal EnableDelayedExpansion
for /f "tokens=1,2,3 delims=-/." %%a in ("%date%") do (
set dd=%%a&set mm=%%b&set yy=%%c)
set /a dd=100%dd%%%100,mm=100%mm%%%100
set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2
set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
set /a j+=-1
set /a a=%j%+2472632,b=4*a+3,b/=146097,c=-b*146097,c/=4,c+=a
set /a d=4*c+3,d/=1461,e=-1461*d,e/=4,e+=c,m=5*e+2,m/=153,dd=153*m+2,dd/=5
set /a dd=-dd+e+1,mm=-m/10,mm*=12,mm+=m+3,yy=b*100+d-4800+m/10
(if %mm% LSS 10 set mm=0%mm%)&(if %dd% LSS 10 set dd=0%dd%)
echo. > temp.txt
del kkk.txt
set nlin=1
for /f "skip=2 tokens=1*" %%i in ('fc /n temp.txt "config.ini" ^| findstr -v "*****"') do (
if not "!nlin!" == "37" (
if not "%%j" == "" echo %%j>> kkk.txt
if "%%j" == "" echo. >> kkk.txt
)
if "!nlin!" == "37" echo LastBusinessDateExported=%dd%/%mm%/%yy%>>kkk.txt
set /a nlin=!nlin!+1
)
copy /y kkk.txt config.ini

Ya me dirás.

Un nuevo intento de que me digas algo.

¿Has leído mis últimos mensajes? ¿Sigue interesándote el asunto? ¿Has encontrado otra solución?

Si puedes leerlo, me encantaría saber de ti.

Hola, buenas tardes.

disculpen la demora, estaba viajando.

lo probare esta semana y les aviso.

el problema del día 1 y comienzo de año ya lo resolvi

¿Lo has probado?

:: Sustituye la línea 37 del archivo config.ini por un valor concreto
:: Que incluye la fecha de ayer (el -1 de la linea 11)
:: Respeta lineas en blanco
@echo off
Setlocal EnableDelayedExpansion
for /f "tokens=1,2,3 delims=-/." %%a in ("%date%") do (
set dd=%%a&set mm=%%b&set yy=%%c)
set /a dd=100%dd%%%100,mm=100%mm%%%100
set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2
set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
set /a j+=-1
set /a a=%j%+2472632,b=4*a+3,b/=146097,c=-b*146097,c/=4,c+=a
set /a d=4*c+3,d/=1461,e=-1461*d,e/=4,e+=c,m=5*e+2,m/=153,dd=153*m+2,dd/=5
set /a dd=-dd+e+1,mm=-m/10,mm*=12,mm+=m+3,yy=b*100+d-4800+m/10
(if %mm% LSS 10 set mm=0%mm%)&(if %dd% LSS 10 set dd=0%dd%)
echo.> temp.txt
del kkk.txt
set nlin=1
for /f "skip=2 tokens=1*" %%i in ('fc /n temp.txt "config.ini" ^| findstr -v "*****"') do (
if not "!nlin!" == "37" (
if not "%%j" == "" echo %%j>> kkk.txt
if "%%j" == "" echo.>> kkk.txt
)
if "!nlin!" == "37" echo LastBusinessDateExported=%dd%/%mm%/%yy%>>kkk.txt
set /a nlin=!nlin!+1
)
copy /y kkk.txt config.ini

Por si le sirve a alguien más.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas