0

特定のディレクトリのランダムなサブフォルダから目的のディレクトリにファイルをコピーするバッチ スクリプトが必要です。

たとえば、独自のサブディレクトリにいくつかのファイルがあります。たとえば、

.../source/a/file.txt
.../source/b/file.txt

これらのファイルが多数あり、そのうちの1つをランダムに選択して、新しいディレクトリにコピーしたいと思います

.../destination/file.txt

したがって、宛先の file.txt は、同じ名前で内容が異なる他のファイルで上書きされているだけです。

バッチ スクリプトは初めてで、ランダムなサブフォルダーから各ファイルを選択する方法がよくわかりません。また、スクリプトを終了するまで 30 秒ごとに繰り返したいと思いますが、この .bat ファイルを 30 秒ごとに呼び出す 2 つ目のスクリプトを作成するのは簡単だと思います。

ありがとう!

4

3 に答える 3

0

これはあなたが要求することをすることができます。ソースディレクトリ、宛先ディレクトリ、およびファイル名フィルタを設定するだけです。

@echo off
setlocal EnableExtensions EnableDelayedExpansion

pushd "...\source\"

:: Enumerate Files. Method 1
set "xCount=0"
for /r %%A in (file.txt) do if exist "%%~A" set /a "xCount+=1"
echo %xCount%

:: Select a Random File.
set /a "xIndex=%Random% %% %xCount%"
echo %xIndex%

:: Find an Copy that File. Method 1
set "xTally=0"
for /r %%A in (file.txt) do if exist "%%~A" (
    if "!xTally!" EQU "%xIndex%" (
        xcopy "%%~fA" "...\destination\file.txt" /Y
        goto End
    )
    set /a "xTally+=1"
)

:End
popd
endlocal
pause

入力xcopy /?すると、すべてのオプションが表示されます。

ファイル列挙の代替ループ方法を次に示します。

:: Enumerate Files. Method 2
set "xCount=0"
for /f %%A in ('dir *.txt /a:-d /s ^| find "File(s)"') do set "xCount=%%~A"
echo %xCount%

:: Find an Copy that File. Method 2
set "xTally=0"
for /f "delims=" %%A in ('dir *.txt /a:-d /b /s') do (
    if "!xTally!" EQU "%xIndex%" (
        xcopy "%%~fA" "...\destination\file.txt" /Y
        goto End
    )
    set /a "xTally+=1"
)

楽しみ :)

于 2012-12-27T19:33:42.563 に答える
0
@echo off
setlocal EnableDelayedExpansion
rem Enter into the directory that contain the folders
pushd \Fullpath\source
rem Create an array with all folders
set i=0
for /D %%a in (*) do (
   set /A i+=1
   set folder[!i!]=%%a
)
rem Randomly select one folder
set /A index=(%random%*i)/32768 + 1
rem Copy the desired file
copy "!folder[%index%]!\file.txt" "\Fullpath\destination" /Y
rem And return to original directory
popd
于 2012-12-27T19:26:15.173 に答える