批量,复制和重命名所有子目录中的最新文件

时间:2018-11-09 17:18:19

标签: batch-file copy-paste batch-rename subdirectory

我被困在这个脚本上,试图写在哪里可以完成它的各个部分,我似乎无法将其组合在一起。

在一个文件夹中,有许多带有.mp4文件的子文件夹,在这些子文件夹中,任何子目录中都会经常生成一个新文件。该脚本应该能够遍历每个文件夹,并从所有文件夹中确定哪个是最新文件,然后将其复制到指定文件夹,同时将其重命名为“ Current.mp4”

到目前为止,我所遇到的是一团糟: 这会将文件复制到子目录中,但不会在其余目录中循环

REM Copy the most recent database backups from their folders 
@echo off

REM Copy File in one destination to another --------------------------------------------

setlocal
set srcDir=P:\
set destdir=D:\
set lastmod=



pushd %srcDir%
for /f "tokens=*" %%a in ('dir /S *.mp4 /D /b /o-d /a-d /t:c') do set lastmod=%%a
:::
copy "%lastmod%" "%destDir%"

与此同时,这似乎循环了,但仅引用.bat目录中的最新文件。

setlocal
set destdir=D:\
SET srcDir=P:\

pushd %srcDir%

FOR /F "delims=" %%I in ('dir /ad /s') do (
     pushd "%%~I"
     pushd %srcDir%
     FOR /F "delims=*" %%G IN ('DIR *=.mp4 /B /A:-D /O:D') DO SET NewestFile=%%G
     popd
)
popd

:::
copy "%NewestFile%" "%destdir%"

最后重新命名,我想我可以弄清楚最后要怎么做。我曾经有过使用c ++的经验,但Batch对我来说还比较新。任何帮助将不胜感激!

谢谢

3 个答案:

答案 0 :(得分:1)

批处理不善于对常规属性的文件夹边界进行排序。

为此,我将使用PowerShell,将其打包(未经测试):

  res = helpers.scan(es, index="allcomms", query = {
      "multi_match" : {
      "query":    'multiple terms', 
      "fields": ["text"] 
  }})

答案 1 :(得分:1)

如果不想使用PowerShell,可以使用WMIC:

@For /F "EOL=L Tokens=1*" %%A In ('
    "WMIC DataFile Where (Drive='P:' And Extension='mp4') Get LastModified,Name 2>Nul|Sort /R"
') Do @Call:CopyIt %%B&GoTo :X
:X
@Exit/B
:CopyIt
@If Not "%*"=="" Copy /Y "%*" "D:\current.mp4"&Exit/B

如果您的来源不是驱动器的根目录,或者您的文件名中包含&符,则上述内容仅是示例,需要进行修改。

答案 2 :(得分:0)

还没有,但是我发现了如何扫描一个目录并在重命名的同时复制最新文件。我只需要让它扫描所有子目录即可。

pushd P:\
for /f "tokens=*" %%a in ('dir /b /od') do set newest=%%a
copy "%newest%" "D:\Current.mp4
popd