Me gustaría que todos los archivos csv en un directorio que el nombre del archivo no contenga la palabra «resumen». Dentro de los comandos del sistema, escriba el comando siguiente

dir /b my_dir\*.csv | find /V "summary"

Cuando intento transferir el comando anterior en un archivo por lotes se me presenta un problema en el que la tubería de mando no es compatible con el bucle for. Que es que no puedo hacer la siguiente

FOR /f %%A in ('dir /b my_dir\*.csv | find /V "summary"') do (
rem want to do something here
)

Puede alguien arrojar algo de luz a mí sobre cómo resolver el problema anterior?

Gracias de antemano!

InformationsquelleAutor Gilbeg | 2011-05-17

4 Comentarios

  1. 48

    Usted necesita para escapar de la | carácter de impedir su interpretarse en el momento de la analizar el comando loop. Uso ^ para escapar de él:

    FOR /f "delims=" %%A in ('dir /b "my_dir\*.csv" ^| find /V "summary"') do (
    rem do what you want with %%A here
    )
    

    Una vez se escapó, el | se convierte en parte de la 'cadena delimitada. Sólo es interpretado como un símbolo especial cuando esa cadena se analiza por separado desde el bucle, como un «sub-comando», de acuerdo a la sintaxis. Y que se hace después de analizar el bucle.

    • Nope! Tengo find: /V’: No existe el fichero o el directorio de encontrar: summary': No such file or directory
    • A mí me funciona. Está usted seguro de que no se pierda nada? ¿my_dir\*.csv Contener espacios? Si es así, es encerrado en comillas dobles? A pesar de que todavía no se produce este mensaje de error.
  2. 5

    Si el problema que Gilbeg tiene «encontrar: /V’: No such file or directory», entonces lo más probable es que usted tiene cygwin, o similares, en su ruta de acceso y el archivo de proceso por lotes no es con el Windows comando buscar. Si desea modificar la secuencia de comandos para utilizar la ruta absoluta de la buscar de Windows, a continuación, el error desaparecerá:

    FOR /f "delims=" %%A in ('dir /b "my_dir\*.csv" ^| %SYSTEMROOT%\system32\find.exe /V "summary"') do (
    rem want to do something here with %%A
    )
    
    • Bienvenido a StackOverflow. Es genial que te gustaría contribuir. Sin embargo, esta es una respuesta general. Es mucho mejor si usted adaptar su respuesta a la pregunta formulada. Por favor actualizar en consecuencia.
  3. 0

    También puede incrustar una cadena entre comillas dobles dentro de las comillas simples cadena, como en:

    FOR /f "delims=" %%a in ('"dir /b mi_dir\*.csv | find /I /V "resumen""') do @( 
    El ECHO de Hacer algo con "%%A" 
    ) 
    
  4. -3

    echar un vistazo a la de Windows PowerShell. No se que he usado yo mismo, de la mente.

    • Por desgracia PowerShell es la ruta de acceso que el cliente quiere ir.
    • Powershell funciona bien, pero como nota he experimentado previamente inestabilidades cuando se llama desde archivos bat (por ejemplo, de la llamada powershell.exe -comando «bla bla bla»). Esto fue en gran parte relacionadas con las pruebas automatizadas, donde el PS subshell nunca iba a regresar (a pesar de una «Salida» de comandos). No teníamos tiempo para investigar a fondo, pero he pensado que me gustaría mencionar. Tal vez va a salvar a alguien de la cabeza de la depuración 🙂

Dejar respuesta

Please enter your comment!
Please enter your name here