
Hallo, ich versuche, mehrere Kopien einer einzelnen Datei in mehreren Verzeichnissen zu erstellen?
Ich habe beispielsweise 6 Ordner mit jeweils einer einzelnen Datei namens lp.html. Wie kann ich eine Stapelverarbeitung ausführen, um in jedem Verzeichnis 100 Kopien dieser Dateien zu erstellen?
Der Code, den ich habe, erstellt mehrere Kopien, aber ich muss es einzeln machen, und wenn ich über 100 Ordner zu bearbeiten habe, wird es mühsam.
Wie kann ich diese Batchdatei also so einrichten, dass sie das tut, was ich erreichen möchte? [Ich verwende Windows 7]
HINZUFÜGTE INFORMATIONEN: Alle Ordner befinden sich im selben übergeordneten Ordner, die Dateien in den Ordnern unterscheiden sich voneinander
@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
Antwort1
Verwenden Sie den Befehl forfiles. Führen Sie forfiles /? aus, um Hilfe zu erhalten.
Wenn Sie die Kopien parallel verarbeiten möchten, können Sie sechs verschiedene Skripte erstellen, eines für jedes Verzeichnis, und sie dann alle von einem einzigen Skript aus ausführen, start scriptname.bat
das nicht wie dieses auf einen Rückgabewert wartet call
.
Antwort2
Versuchen Sie dies. Es sieht nicht schön aus, weil dieser *$#?-Editor die Einrückungen, Zeilenumbrüche usw. verloren hat.
--- ÜBERARBEITETES SKRIPT
@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