Decir que tengo un directorio con los siguientes archivos:

De la prueba.bat
Test_a.txt
Test_b.txt
Test_v1.zip
Test_v2.zip
Test_v3.zip

Quiero borrar todos Test_v*.zip en silencio (no mensajes de error se registra en la pantalla). Me puedes conseguir con la siguiente secuencia de comandos:

@ECHO OFF
SET OLD_ZIPS=^
C:\Tmp\Test_v*.txt;^
C:\Tmp\Test_a.txt

ECHO Deleting the following files: %OLD_ZIPS%

FOR %%Y IN (%OLD_ZIPS%) DO (
IF EXIST %%Y (
ECHO  Deleting %%Y
DEL /Q %%Y)
)

PAUSE

Esto funciona bien:

Deleting the following files: C:\Tmp\Test_v*.txt;C:\Tmp\Test_a.txt
Deleting "C:\Tmp\Test_v1.txt"
Deleting "C:\Tmp\Test_v2.txt"
Deleting "C:\Tmp\Test_a.txt"
Press any key to continue . . .

Menos de curso de las rutas de archivo contiene espacios. Así, en el ejemplo anterior, si puedo cambiar C:\Tmp\Test_v*.txt a C:\Tmp with spaces\Test_v*.txt puedo obtener:

Deleting the following files: C:\Tmp test\Test_v*.txt;C:\Tmp test\Test_a.txt
Press any key to continue . . .

¿Cómo puedo detenerlo resistencia en los espacios?

Editar – he tratado de espacios, como por Alex K la respuesta (además de un poco más de depuración) y parece que tal vez el bucle for no es la división de las cosas como yo esperaba:

@ECHO OFF
SET OLD_ZIPS=^
C:\Tmp test\Test_v*.txt;^
C:\Tmp test\Test_a.txt

ECHO Deleting the following files: %OLD_ZIPS%

FOR %%Y IN (%OLD_ZIPS%) DO (
ECHO  Checking existance of "%%Y"
IF EXIST "%%Y" (
ECHO  Deleting "%%Y"
DEL /Q "%%Y")
)

PAUSE

..me da:

Deleting the following files: C:\Tmp test\Test_v*.txt;C:\Tmp test\Test_a.txt
 Checking existance of "C:\Tmp"
 Checking existance of "C:\Tmp"
 Checking existance of "test\Test_a.txt"
InformationsquelleAutor Jon Cage | 2012-09-19

3 Comentarios

  1. 1

    La función de necesidades para recorrer cada línea por separado, así que usted necesidad de citar la variable del bucle FOR, acortar en el punto y coma, enjuague y repita.

    @ECHO OFF
    SET OLD_ZIPS=^
    C:\tmp with spaces\Test_v*.txt;^
    C:\tmp\Test_a.txt
    
    ECHO Deleting the following files: %OLD_ZIPS%
    
    :deleteFiles
    for /f "tokens=1* delims=;" %%A in ("%OLD_ZIPS%") do (
        ECHO  Checking existance of "%%A"
        IF EXIST "%%A" (
            ECHO  Deleting "%%A"
            DEL /Q "%%A"
        )
        set OLD_ZIPS=%%B
    )
    if not "%OLD_ZIPS%" == "" goto :deleteFiles
    
    PAUSE
    
    • Buen trabajo de Kevin; que trabajó un regalo! He probado el de tokens / delims poco, pero yo estaba usando tokens=* y no llegar a la respuesta correcta..
  2. 2

    parece que están tratando a más de complicar las cosas.

    for %a in ("C:\Tmp with spaces\Test_v*.txt" "C:\Tmp\Test_a.txt") do del /q "%a"
    

    hace lo que quiere, y puede ser escrito desde la línea de comandos. cambio de %a a %%a, si quieres hacerlo en un archivo por lotes

  3. -1

    Extrañamente, esto parece funcionar. He editado mi versión a la mirada como la suya, así que por favor trate y enmendar cualquier error de sintaxis 😉

    @ECHO OFF
    SET OLD_ZIPS="C:\Tmp with spaces\Test_v*.txt";^
    "C:\Tmp with spaces\Test_a.txt";
    
    ECHO Deleting the following files: %OLD_ZIPS%
    
    FOR %%Y IN (%OLD_ZIPS%) DO (
    IF EXIST %%Y (
    ECHO  Deleting %%Y
    DEL /Q %%Y)
    )
    
    PAUSE
    
    • Inténtelo de nuevo con espacios en el nombre de ruta
    • Que hace el trabajo. Yo mistakingly pegado sus caminos sin espacios en. Los caminos en mi máquina cuando he probado había espacios. Es la cita en los caminos que marcan la diferencia con los espacios. No parece trabajar con ^ directamente después de las CREMALLERAS= sin embargo. He actualizado los caminos ahora.
    • Puedo obtener: Deleting the following files: "C:\Tmp test\Test_v*.txt";"C:\Tmp test\Test_a.txt"; Deleting C:\Tmp test\Test_v1.txt The system cannot find the file specified. Deleting C:\Tmp test\Test_v2.txt The system cannot find the file specified. Deleting "C:\Tmp test\Test_a.txt" y ni Test_v1.txt ni Test_v2.txt quedar eliminado. Estoy corriendo en windows 7 si que hace una diferencia?

Dejar respuesta

Please enter your comment!
Please enter your name here