Windows 批处理脚本以复制文件夹结构文件

分享于 

5分钟阅读

电脑

 

问题:

我要复制在特定日期范围内具有修改日期值的文件( 从一个文件夹到另一个文件夹)。 使用下面的脚本可以执行复制,但它只复制源位置的父目录中的root 级别文件

我需要复制符合日期范围要求的文件的整个文件夹结构。


SET DESTINATION=c:tempnew


SET DATE_FROM=01/01/2019


SET DATE_TO=01/10/2019



> nul forfiles/S/D +%DATE_FROM%/C"cmd/C if @isdir==FALSE 2> nul forfiles/M @file/D -%DATE_TO% &&> con ( echo @path && copy/V @path %DESTINATION% )"



pause



这个批处理脚本将指定日期范围内的所有文件复制到 C:tempnew 文件夹的root 中,但它不复制源文件夹结构。 我需要目标还包含已经定义日期范围内复制文件的匹配源文件夹结构。


回答 1:


SET"DESTINATION=C:tempnew"


SET"DATE_FROM=20190101"


SET"DATE_TO=20190110"


ROBOCOPY."%DESTINATION%"/MAXAGE:%DATE_FROM%/MINAGE:%DATE_TO%/S/E




回答 2:

在日期范围之间递归复制文件和文件夹结构

你可以使用PowerShell和获取启动源目录中文件的LastWriteTime 属性值。

对于日期范围内具有 LastWriteTime 属性值的源文件,可以用目标文件夹值替换源文件夹值,然后使用复制项创建匹配的结构,并在文件上复制 copy。

注意:我在批处理脚本逻辑和命令行脚本中写了这两个命令:。

批处理

注意:对于源文件夹和目标文件夹,只设置最上面的变量值,也为你在下面脚本示例中设置的那些值的range和destination的日期值设置了( src=dest= )。


SET"src=c:sourceoriginal"


SET"dest=c:tempnew"


SET"Date_From=01/01/2017"


SET"Date_To=02/26/2017"



CALL :PSScript"%src%""%dest%""%Date_From%""%Date_To%"



SET PowerShellDir=C:WindowsSystem32WindowsPowerShellv1.0


CD/D"%PowerShellDir%"


Powershell -ExecutionPolicy Bypass -Command"& '%PSScript%'"


IF EXIST"%PSScript%" DEL/Q/F"%PSScript%"


EXIT



:PSScript


SET PSScript=%temp%~tmp%~n0.ps1


IF EXIST"%PSScript%" DEL/Q/F"%PSScript%"



ECHO $src ^="%~1";>> "%PSScript%"


ECHO $dest ^="%~2";>> "%PSScript%"


ECHO $Date_From ^="%~3";>> "%PSScript%"


ECHO $Date_To ^="%~4";>> "%PSScript%" 



ECHO $Date_From ^=[datetime]$Date_From;>> "%PSScript%"


ECHO $Date_To ^=[datetime]$Date_To;>> "%PSScript%"



ECHO $srcFiles ^= ^(Get-ChildItem -Path $src -Recurse^);>> "%PSScript%"


ECHO $srcFiles ^| %% {If^(^($_.LastWriteTime -ge $Date_From^) -or ^($_.LastWriteTime -le $Date_To^)^)>>"%PSScript%"


ECHO {>> "%PSScript%"


ECHO $dPath ^= ^($_.FullName.Replace^($src,$dest^)^);>> "%PSScript%"


ECHO Copy-Item $_.FullName -destination $dPath -Recurse -Force;>> "%PSScript%"


ECHO }>> "%PSScript%"


ECHO };>> "%PSScript%"


GOTO :EOF



PowerShell

注意:对于源文件夹和目标文件夹,只设置最上面的变量值,也为你在下面脚本示例中设置的那些值的range和destination的日期值设置了( $src=$dest= )。


$src ="c:sourceoriginal";


$dest ="c:tempnew";


$Date_From ="01/01/2017";


$Date_To ="02/26/2017";



$Date_From = [datetime]$Date_From;


$Date_To = [datetime]$Date_To;



$srcFiles = (Get-ChildItem -Path $src -Recurse);


$srcFiles | % {If(($_.LastWriteTime -ge $Date_From) -or ($_.LastWriteTime -le $Date_To))


 {


 $dPath = ($_.FullName.Replace($src,$dest));


 Copy-Item $_.FullName -destination $dPath -Recurse -Force ; 


 }


 };



更多资源



Windows  str  files  Struct  bat  cop  
相关文章