このコードを使用して、親フォルダ内の各サブフォルダ(E:\ "New folder")から新しいコピー先フォルダ(E: \「新しいフォルダ」)\サンプル[それは素晴らしい作品]:ファイルが指定された場合はバッチスクリプト:コピーしたファイルの名前を元のフォルダに変更する
:
@echo off
setlocal EnableDelayedExpansion
cd E:\"New folder"
set t=0
for /d %%i in (*) do (
cd "%%i"
set /A t+=1
set n[!t!]=0
for %%f in (*.jpeg *.jpg *.gif *.bmp *.png) do (
set /A n[!t!]+=1
set "file[!n!]=%%f"
)
set /A "rand=(n[!t!]*%random%)/32768+1"
copy "!file[%rand%]!" E:\samples\"New folder"
cd..
)
pause
をしかし、私のようなので、その起源フォルダに応じてコピーされたファイルを再命名されている必要がありDC20140912.jpg "Italy2014.jpg"という名前のサブフォルダに由来するので、 "Rome2015.jpg"という名前に変更するために、 "Rome2015"という名前のサブフォルダに由来するファイル "Italy2014.jpg"に名前を変更する必要があります。
各サブフォルダから1つのファイルしかコピーされないため、ファイル名の衝突の危険はありません。拡張子は、あなたがそれらを抽出したり、別々にそれらを格納する必要があります異なるので
悲しいことに、あなたの質問の中でもう一つ説明したように、このルーチンはうまくいくように見えますが、実際には失敗しません。 'for/d'コマンドは'%random% 'を乱数で'%rand% 'を* nothing *に置き換えます。あなたはファイルを 'n [t]'にカウントしていますが、 'n'がセットされていないので'!n! 'は* nothing *に置き換えられますので、ファイル名は' file [] 'に割り当てられ、選択されたグループの名前。 'copy'コマンドは' file [] 'をコピーします - 常に同じファイル - ディレクトリで最後に選択されたファイルです。確かに、毎回** a **ファイルを選択しますが、常に同じファイルを選択します。 – Magoo
ありがとう!この変更(@ LotPings)を行った、素晴らしい作品 – Amos