
Hola, ¿estoy intentando crear varias copias de un solo archivo en varios directorios?
por ejemplo, tengo 6 carpetas con un solo archivo en cada carpeta llamado lp.html. ¿Cómo puedo ejecutar un lote para crear 100 copias de dichos archivos en cada directorio?
El código que tengo crea varias copias, pero tengo que hacerlo una por una y se vuelve tedioso cuando tengo más de 100 carpetas que hacer.
Entonces, ¿cómo puedo convertir este archivo por lotes para hacer lo que estoy tratando de lograr? [Estoy ejecutando Windows 7]
INFORMACIÓN AÑADIDA: Todas las carpetas están en la misma carpeta principal, los archivos de las carpetas son diferentes entre sí
@echo off
for /L %%i IN (1,1,100) do call :docopy %%i
goto end
:docopy
set FN=00%1
set FN=%FN:~-3%
copy source-file.html poll%FN%.html
:end
Respuesta1
Utilice el comando forfiles. Ejecutar archivos /? por ayuda.
Si le preocupa procesar las copias en paralelo, puede crear 6 scripts diferentes, uno para cada directorio, y luego ejecutarlos todos desde un único script que start scriptname.bat
no esperará un valor de retorno como call
lo hace.
Respuesta2
Prueba esto. No es bonito, ¿porque esto *$#? El editor ha perdido la sangría, los saltos de línea, etc.
--- GUIÓN REVISADO
@echo off
setlocal
set ROOT_DIR=c:\temp\test
for /f "tokens=*" %%D in ('dir /ad /b "%ROOT_DIR%"') do call :PROCESS_DIR "%ROOT_DIR%" "%%D"
endlocal
goto END
:PROCESS_DIR
set PD_ROOT=%1
set PD_ROOT=%PD_ROOT:"=%
set PD_DIR=%2
set PD_DIR=%PD_DIR:"=%
set PD_FIRST_FILE=
set PD_SOURCE_FILE=
REM ***
REM *** GET THE NAME OF THE FIRST FILE IN THIS FOLDER.
REM ***
for /f "tokens=*" %%F in ('dir /o-n /b "%PD_ROOT%\%PD_DIR%"') do set PD_FIRST_FILE=%%F
if "%PD_FIRST_FILE%" == "" (
echo WARNING : No files found in [%PD_DIR%] - skipping.
goto END
)
set PD_SOURCE_FILE=%PD_ROOT%\%PD_DIR%\%PD_FIRST_FILE%
REM ***
REM *** CREATE FILES.
REM ***
for /l %%I in (1,1,100) do call :CREATE_FILE_COPY "%PD_ROOT%\%PD_DIR%" "%PD_SOURCE_FILE%" 00%%I
goto END
:CREATE_FILE_COPY
set CFP_DIR=%1
set CFP_DIR=%CFP_DIR:"=%
set CFP_FILE=%2
set CFP_INDEX=%3
set CFP_FILE_NO_EXT=
REM ***
REM *** GET FILE NAME WITHOUT EXTENSION.
REM ***
for /f %%F in ("%CFP_FILE%") do set CFP_FILE_NO_EXT=%%~nF
REM ***
REM *** COPY THE FILE.
REM ***
copy /y %CFP_FILE% "%CFP_DIR%\%CFP_FILE_NO_EXT%.%CFP_INDEX:~-3%
goto END
:END