0

我需要一个批处理脚本将文件从特定目录的随机子文件夹复制到目标目录中。

比如在自己的子目录下会有一些文件,例如

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

所以有很多这些文件,我想随机选择其中一个并将其复制到新目录中

.../destination/file.txt

所以目标中的 file.txt 只是被其他同名但内容不同的文件覆盖。

我是批处理脚本的新手,我不太清楚如何从随机子文件夹中选择每个文件。我还希望它每 30 秒重复一次,直到我终止脚本,但我认为只要制作第二个脚本,每 30 秒调用一次这个 .bat 文件就足够了。

谢谢!

4

3 回答 3

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 回答
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

批处理脚本的特点是

  1. 它将所有文件从源文件夹复制到具有相似结构的目标文件夹(甚至保留空文件夹)。
  2. 可以在存档文件夹(源)中保留 N 天最近的文件,剩余的文件将被移动到备份文件夹(目标)。
  3. 可以安排到N天到N年。
  4. 可用于任何源到目标文件夹备份。
  5. 源文件夹可以随时添加N个文件夹并删除文件夹或文件,但目标文件夹始终添加文件夹并且永远不会删除任何文件夹或文件。

@echo off
Set "sourcefolder=E:\Interfaces"
Set "destinationfolder=E:\BackupInterface"
If Exist %sourcefolder% (
For /F %%* In ('Dir /b /aD "%sourcefolder%" 2^>nul') do (If Not Exist "%destinationfolder%\%%*" ( RD /S /Q "%destinationfolder%\%%*")
xcopy /e /v /i /y /q "%sourcefolder%\%%*" "%destinationfolder%\%%*" 
forfiles /p "%sourcefolder%\%%*" /s  /d -30 /c "cmd /c del /Q /S  @file" )
) Else (echo.Source folder could not be found)
:end of batch
echo.&echo.finished!

于 2014-06-27T03:57:58.037 回答