2012-09-13 15 views
5

Tengo archivos con ID, model y date. los archivos tienen un formato similar a 10000_9999-99_10-01-2011.zip (donde 10000 es el ID, 9999-99 es el model, y por supuesto 10-01-2011 es el date).¿Cómo puedo leer 2 líneas consecutivas de un archivo de texto y guardarlas como variables temporales

Me gustaría modificar el date s de estos archivos, pero mantener el intervalo entre sesiones con el mismo ID. Por ejemplo, si 2 sesiones tenían las fechas 1/1/2011 y 2/1/2011, y quería actualizar la fecha de la última sesión a 8/1/2012, la primera sesión tendría la fecha 7/1/2012.

Actualmente mi código es el siguiente:

@echo off 
setlocal enabledelayedexpansion 
del filedates.txt 
FOR /F "tokens=1,2,3,4,5 delims=_" %%a in (filenames.txt) do @echo %%c >>filedates.txt 
FOR /F "tokens=1,2,3 delims=-" %%a in (filedates.txt) do (
    echo %%a%%b 
) 

La salida es similar a este (YearMonth):

201107 
201109 
201204 
etc.. 

que estaba buscando para leer una línea en filedates.txt , almacene esta fecha como una variable, luego lea la siguiente línea y almacénela como otra variable. De esta forma, las dos variables podrían compararse para ver cuál es mayor y el proceso continuaría.

+2

MS-DOS no admitió el bucle for extendido utilizando el parámetro '/ F', por lo que debe utilizar Windows (NT o posterior). –

+0

Solo por curiosidad, dado que obviamente está ejecutando una versión bastante reciente de Windows (basada en la sintaxis 'setlocal' y' for/f'), ¿hay alguna razón por la que no esté haciendo esto en 'PowerShell', que lo haría mucho más fácil? –

+0

Estoy trabajando en un código que está casi completo. Todo este código está escrito usando la línea de comando, de lo contrario usaría powershell –

Respuesta

2

Una manera directa de leer dos líneas a la vez es procesar las líneas en el archivo de entrada una por una con un bucle for /f, y "reaccionar" solo en líneas pares. He aquí un ejemplo de código:

@echo off 
setlocal enabledelayedexpansion 
set evenflag=1 
for /f "tokens=*" %%x in (filedates.txt) do set x1=!x2! && set x2=%%x && (
set /a evenflag^^=1 && if !evenflag!==1 (
    rem Do something with !x1! and !x2! 
)) 

Aquí la variable evenflag es un indicador booleano que indica si el número de línea actual es par (1 incluso para líneas, 0 a las líneas impares). x1 y x2 mantienen el par de líneas actualmente leídas.

Cuestiones relacionadas