Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 批处理、复制和重命名所有子目录中的最新文件_Batch File_Copy Paste_Batch Rename_Subdirectory - Fatal编程技术网

Batch file 批处理、复制和重命名所有子目录中的最新文件

Batch file 批处理、复制和重命名所有子目录中的最新文件,batch-file,copy-paste,batch-rename,subdirectory,Batch File,Copy Paste,Batch Rename,Subdirectory,我被困在这个脚本上,我试图在那里完成它的各个部分,我似乎不能把它放在一起 在一个文件夹中,有许多包含.mp4文件的子文件夹,其中每隔一段时间就会在任何子目录中生成一个新文件。脚本应该能够循环遍历每个文件夹,并确定其中哪个文件是最新的,并将其复制到指定的文件夹,同时将其重命名为“Current.mp4” 到目前为止,我的情况一团糟: 这将复制子目录中的文件,但不会循环其余部分 REM Copy the most recent database backups from their folders

我被困在这个脚本上,我试图在那里完成它的各个部分,我似乎不能把它放在一起

在一个文件夹中,有许多包含.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++的经验,但是批量对我来说是比较新的。任何帮助都将不胜感激


谢谢

还不太清楚,但我已经找到了如何扫描一个目录并在重命名最新文件时复制它。我只需要让它扫描所有子目录

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

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

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

Batch不擅长对常规属性的文件夹边界进行排序

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


Batch不擅长对常规属性的文件夹边界进行排序

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


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

@For/F“EOL=L令牌=1*”%%A在('
“WMIC数据文件,其中(Drive='P:'和Extension='mp4')得到最后修改,名称2>Nul | Sort/R”
“)Do@Call:CopyIt%%B&GoTo:X
:X
@退出/B
:复制
@如果不是“%*”==“复制/Y”%*“D:\current.mp4”&退出/B

以上只是一个示例,如果您的源不是驱动器的根目录,或者您的文件名中包含了安培数,则需要进行修改。

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

@For/F“EOL=L令牌=1*”%%A在('
“WMIC数据文件,其中(Drive='P:'和Extension='mp4')得到最后修改,名称2>Nul | Sort/R”
“)Do@Call:CopyIt%%B&GoTo:X
:X
@退出/B
:复制
@如果不是“%*”==“复制/Y”%*“D:\current.mp4”&退出/B

以上只是一个示例,如果您的源不是驱动器的根目录,或者您的文件名中包含了安培,则需要修改。

非常感谢!你太棒了,我已经试了很久了!我想从现在起我会更加习惯powershell函数。非常感谢!你太棒了,我已经试了很久了!我想从现在起我会更加习惯powershell函数。