【问题标题】:powershell or batch to copy folders based on date modifiedpowershell 或批处理根据修改日期复制文件夹
【发布时间】:2014-04-19 07:44:30
【问题描述】:

这是我目前正在使用的.bat

for %%I in  (I:\ETOS\00-5-1-WA-1
I:\ETOS\00-5-3-WA-1
I:\ETOS\00-5-15-WA-1
I:\ETOS\00-5-18-WA-1
I:\ETOS\00-20-1-WA-1
I:\ETOS\00-20-2-WA-1
I:\ETOS\00-20-14-WA-1
I:\ETOS\00-25-06-2-2-WA-1
) do copy %%I C:\users\admin\desktop\age\to

现在它只是复制每个文件夹的内容,没有区别。我希望它复制整个文件夹(不仅仅是文件夹内容),并且只复制过去 7 天内修改过的那些。

可能

【问题讨论】:

  • 答案是“是的”,这是可能的。我自己,我会使用powershell。请说明您为使其正常工作所做的尝试以及您在尝试中发现的问题。
  • 所以我尝试了下面的示例,它让我更接近我的最终目标。但我真的希望文件能够抓取整个文件夹,而不仅仅是文件夹内容。
  • 我会详细说明我的问题。我有 9 个批处理文件与上面的批处理文件完全一样,除了它们都有 500 到 1500 个不同的文件,它们从与上面没有不同的文件夹中复制。我使用 9 种不同的脚本,因为我需要保持分离的文件。它们都来自同一个 I:/ETOS/ 目录。

标签: batch-file powershell copy


【解决方案1】:

测试一下:

@echo off
for %%a in (
"I:\ETOS\00-5-1-WA-1"
"I:\ETOS\00-5-3-WA-1"
"I:\ETOS\00-5-15-WA-1"
"I:\ETOS\00-5-18-WA-1"
"I:\ETOS\00-20-1-WA-1"
"I:\ETOS\00-20-2-WA-1"
"I:\ETOS\00-20-14-WA-1"
"I:\ETOS\00-25-06-2-2-WA-1"
) do robocopy "%%~a" "C:\users\admin\desktop\age\to\%%~a" /e /maxage:7

【讨论】:

  • 每个文件周围的引号是否必要?我有一个很长的文件夹列表(因此添加所有引号需要一段时间)并且目前只有包含逗号或括号的名称的引号。不幸的是,我要等到星期一上班时才能检查这个。
  • 我发布的代码是为了检查过去 7 天内被修改的文件。如果说只修改了一个文件,它不会复制整个文件夹,对不起。您的文件夹名称不需要引号,因为它们没有空格或其他导致问题的字符。
  • 谢谢。有没有办法根据文件夹修改日期而不是文件夹中包含的文件来区分?这里的最终目标是让它实际抓取包含在已修改文件夹中的 .pdf。我不关心其中文件的修改日期,只关心文件夹。
  • 如果您想要修改过的 *.pdf 文件,那么单独执行此操作会更有用且更容易。
  • 我希望事情就这么简单。我从中提取这些文件的驱动器由另一方控制(我什至没有见过),无论出于何种原因,文件夹的修改日期都会改变,pdf文档的内容/版本也会改变,但修改日期pdf不会。我知道这很奇怪。这就是为什么我想以文件夹为基础。我想我可以使用“maxage:7”值从“I:\ETOS\”中提取所有内容,然后将我的 pdf 从那里分开。边问。如果我按照上述方式进行操作,是否有命令删除那些目录中不是 pdf 的所有内容?
【解决方案2】:

这适用于 Powershell V3。比如……

Copy-Item -Path C:\Intel -Recurse -Destination C:\Drivers|Where lastwritetime -GT "04/12/2014 12:00:00 AM"

【讨论】:

  • 我是 Powershell 的新手,但我想学习,因为它似乎可以事半功倍。你介意为我分解那个脚本吗?
  • @user3551156 Copy-Item -Path "Source" -Recurse -Destination "Destination" |Where lastwritetime -GT "04/12/2014 12:00:00 AM" Powershell 命令非常直观且一目了然。您可以运行man copy -full 以获取有关命令参数的更多详细信息,或者您可以指定哪个部分让您感到困惑。
  • 我现在明白了。我看到你在上面拍了拍,即“C:\Intel”,但这只是我的名字不能正常工作。我明白现在发生了什么。谢谢。
  • @AyanMullick 该脚本不会复制所有文件,无论上次写入时间如何?您正在应用的Where 过滤器仅应用于Copy-Item cmdlet 输出的对象,这将在执行实际复制后完成。要仅复制过滤的项目,我认为您需要执行Get-ChildItem(或lsdir,它们是Get-ChildItem 的别名),然后是Where 过滤器,最后是Copy-Item。所以,不包括参数,它就像Get-Item {parameters} | Where {filter} | Copy-Item {desinationParameters}
猜你喜欢
  • 2023-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-27
  • 1970-01-01
相关资源
最近更新 更多