
こんにちは。複数のディレクトリに単一のファイルの複数のコピーを作成しようとしています。
たとえば、各フォルダーに lp.html という名前のファイルが 1 つずつ含まれるフォルダーが 6 つある場合、バッチを実行して各ディレクトリにこれらのファイルのコピーを 100 個作成するにはどうすればよいでしょうか。
私が持っているコードは複数のコピーを作成しますが、それを 1 つずつ実行する必要があり、処理するフォルダーが 100 個を超えると面倒になります。
では、このバッチ ファイルをどのように変更して、目的を達成できるのでしょうか。[Windows 7 を実行しています]
追加情報: すべてのフォルダは同じ親フォルダにあり、フォルダ内のファイルは互いに異なります
@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
答え1
forfiles コマンドを使用します。ヘルプを表示するには、forfiles /? を実行します。
コピーを並列処理することに懸念がある場合は、ディレクトリごとに 1 つずつ、合計 6 つの異なるスクリプトを作成し、start scriptname.bat
のように戻り値を待機せずに、を使用することで、これらすべてを 1 つのスクリプトから実行できcall
ます。
答え2
これを試してみてください。これは見栄えがよくありません。この *$#? エディターではインデント、改行などが失われているからです。
--- 改訂版スクリプト
@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