es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo extraer 2 columnas de un archivo CSV en CMD?

Tengo un archivo csv con 29 columnas, solo necesito la 6ª y 7ª para copiar archivos a una carpeta diferente. Hay algunos campos vacíos en la columna G, así que quiero saltar esas líneas.

Pensé que podía renunciar a asignar todas las variables, pero cuando el código no funcionó, las escribí todas… pero, desafortunadamente, eso no me ayudó a resolver esto 🙂

Mi script parece estar atascado sin las variables, ya que no funciona como esperaba y no entiendo lo que hice mal. ¿Alguien puede explicar qué me perdí?

@ECHO OFF
SETLOCAL

SET pathname=E:\2021\1130
SET inputfile=%pathname%\test.csv

FOR /F "tokens=1-29* delims=," %%A IN (%inputfile%) DO (
    Set "var1=%%A"
    Set "var2=%%B"
    Set "var3=%%C"
    Set "var4=%%D"
    Set "var5=%%E"
    Set "var6=%%F"
    Set "var7=%%G"
    Set "var8=%%H"
    Set "var9=%%I"
    Set "var10=%%J"
    Set "var11=%%K"
    Set "var12=%%L"
    Set "var13=%%M"
    Set "var14=%%N"
    Set "var15=%%O"
    Set "var16=%%P"
    Set "var17=%%Q"
    Set "var18=%%R"
    Set "var19=%%S"
    Set "var20=%%T"
    Set "var21=%%U"
    Set "var22=%%V"
    Set "var23=%%W"
    Set "var24=%%X"
    Set "var25=%%Y"
    Set "var26=%%Z"
    Set "var27=%%AA"
    Set "var28=%%AB"
    Set "var29=%%AC"
    CALL :OUTPUT
)

:OUTPUT
IF NOT DEFINED [%var7%] echo goto next record
IF [%%G] == [] Echo valor faltante
echo copiar %%F/%%G %pathname%/%var6%/%var7%
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El script anterior lee un archivo csv y copia archivos a una carpeta diferente basándose en los valores encontrados en las columnas 6 y 7. Sin embargo, el script no funciona correctamente porque se queda sin las variables.

    Parece que el script está intentando asignar valores a una gran cantidad de variables (var1 a var29) pero en realidad no está utilizando todas ellas en el código posterior. Esto se puede simplificar asignando valores solo a las variables que se usarán más adelante.

    Además, para saltar líneas con campos vacíos en la columna G, el script puede comprobar si la variable de esa columna está definida y luego comprobar si el valor está vacío. Si está vacío, el script puede saltar al siguiente registro.

    Aquí se sugiere un script actualizado:

    @ECHO OFF
    SETLOCAL
    
    SET "pathname=E:\2021\1130"
    SET "inputfile=%pathname%\test.csv"
    
    FOR /F "tokens=6,7 delims=," %%F IN (%inputfile%) DO (
        if "%%G"=="" (
            echo Saltando línea con columna G vacía
            goto :next
        )
        echo copy "%%F\%%G" "%pathname%\%%F\%%G"
        :next
    )
    

    En este script actualizado, solo estamos asignando valores a variables para las columnas 6 y 7 utilizando “tokens=6,7”, y estamos comprobando valores vacíos en la columna G utilizando “if “%%G”==”””. Si una línea tiene un valor vacío en la columna G, saltamos al siguiente registro utilizando “goto :next”.

Comments are closed.