Necesito ayuda para escribir un script en cmd
Estoy en una carpeta que tiene subcarpetas, tienes que buscar en estas subcarpetas (no profundices) y copiar archivos cuyo nombre termine en "_0001.png" a la carpeta. _ TEMP (esta carpeta está en el lugar donde inicia el programa)
¿Me puedes ayudar?
Esto no funciona:
for /R "%folder%" %%G in (*_0001.png) do copy "%%G" "%folder%\!!_TEMP\"
Respuesta1
pushd "%folder%"
for /D %%D in (*) do copy "%%D\*_0001.png" "!!_TEMP"
popd
Respuesta2
CMD no es mi fuerte, así que ofreceré mi solución Powershell.
$content = Get-ChildItem .\Desktop\localtmp -Depth 1
foreach($file in $content){
if($file.Name -like "*_0001.png"){
$path = $file.DirectoryName + "\" + $file.Name
Copy-Item $path -Destination .\Desktop\anotherlocaltmp
}
}
solo necesitas agregar tus caminos
¡Espero eso ayude!
Respuesta3
Esto debería funcionar para ti:
@echo off
set "dir=C:\Your\Root\Folder"
set "tem=%dir%\!!_Temp"
for /d %%A in (*) do (
for %%B in (%%A\*_0001.png) do (
if not exist "%tem%\%%~nxB" copy /y "%%B" "%tem%\"
)
)
Para hacer las cosas más limpias y fáciles de cambiar, configuramos dos variables: una para su carpeta raíz ( dir
) y otra para la !!_Temp
carpeta ( tem
) dentro de su raíz; Esto también supone, según su pregunta, que está ejecutando el archivo .bat desde la carpeta raíz; si este no es el caso, podemos editar la ruta en el primer bucle for.
El primer bucle for /d
busca solo las carpetas de nivel superior en su directorio actual, y para cada iteración del bucle, esas carpetas de nivel superior se configuran como parámetro %%A
. El siguiente bucle mira sólo los archivos que coinciden con los criterios que establecimos (que es cualquier cosa que %%A
termine en _0001.png
) y establece cada uno de ellos como parámetro %%B
. El comando en este bucle final es if not exist "%tem%\%%~nxB" copy /y "%%B" "%tem%\"
: incluimos el if not exist
para que no se ejecute en archivos que ya se han copiado !!_Temp
. Según su pregunta, no estoy seguro de si alguna vez se encontrará con varios archivos en varias subcarpetas que tienen exactamente el mismo nombre, pero si ese es un caso potencial, podemos solucionarlo.
Respuesta4
Esta línea for loop debería funcionar. Tiene las mismas variables que las que estás usando.
for /f "delims==" %%G in ('dir "%folder%\*_0001.png" /s /b') do copy "%%G" "%folder%\!!_TEMP\"