将X个文件从一个文件夹复制到另一个文件夹的Windows脚本

将X个文件从一个文件夹复制到另一个文件夹的Windows脚本,windows,powershell,batch-file,powershell-2.0,Windows,Powershell,Batch File,Powershell 2.0,我对脚本世界还不熟悉,所以可能会问一些新手问题,但在谷歌搜索了这么多之后,我并没有找到确切的代码 我的要求是生成一个脚本,将X个文件从一个文件夹复制到另一个文件夹。在这里,要复制的文件数量、源文件夹和目标文件夹应在脚本中进行配置 我尝试了Xcopy和Robocopy,但在其中没有找到任何参数来限制要复制的文件数量。该程序将在Win7或Win2008服务器上运行 请帮助。与提出要求的人讨论,并找出确切的过滤需求 将N个文件从位置X复制到位置Y是毫无意义的。通常有更合理的标准,如将DATETIME之

我对脚本世界还不熟悉,所以可能会问一些新手问题,但在谷歌搜索了这么多之后,我并没有找到确切的代码

我的要求是生成一个脚本,将X个文件从一个文件夹复制到另一个文件夹。在这里,要复制的文件数量、源文件夹和目标文件夹应在脚本中进行配置

我尝试了Xcopy和Robocopy,但在其中没有找到任何参数来限制要复制的文件数量。该程序将在Win7或Win2008服务器上运行


请帮助。

与提出要求的人讨论,并找出确切的过滤需求

将N个文件从位置X复制到位置Y是毫无意义的。通常有更合理的标准,如
将DATETIME之后更改的所有文件从位置X复制到位置Y。如果文件超过N个,则只选择N个最旧/最新的文件。
只有利益相关者可以告诉您预期的行为类型。如果没有更多信息,脚本很可能无法提供预期的功能


在您知道确切的要求后,再做一些谷歌搜索以获得解决方案。了解如何在Powershell中完成任务不需要花费太多精力。提示:使用带有适当参数/过滤器的
gci
,并将其结果存储在一个数组中。

与提出要求的人讨论,找出确切的过滤需求

将N个文件从位置X复制到位置Y是毫无意义的。通常有更合理的标准,如
将DATETIME之后更改的所有文件从位置X复制到位置Y。如果文件超过N个,则只选择N个最旧/最新的文件。
只有利益相关者可以告诉您预期的行为类型。如果没有更多信息,脚本很可能无法提供预期的功能

在您知道确切的要求后,再做一些谷歌搜索以获得解决方案。了解如何在Powershell中完成任务不需要花费太多精力。提示:使用带有适当参数/过滤器的
gci
,并将其结果存储在一个数组中。

对于批处理文件标记:

@echo off

    setlocal enableextensions enabledelayedexpansion

    set "source=d:\temp\input"
    set "target=d:\temp\output"
    set num=10

    for /F "tokens=1,2 delims=:" %%f in ('dir /b /a-d "%source%\*"  ^| findstr /n "^" ') do (
        if %%f leq %num% (
            copy "%source%\%%g" "%target%" /y > nul 
        ) else goto endCopy
    )

:endCopy
    endlocal
对于批处理文件标记:

@echo off

    setlocal enableextensions enabledelayedexpansion

    set "source=d:\temp\input"
    set "target=d:\temp\output"
    set num=10

    for /F "tokens=1,2 delims=:" %%f in ('dir /b /a-d "%source%\*"  ^| findstr /n "^" ') do (
        if %%f leq %num% (
            copy "%source%\%%g" "%target%" /y > nul 
        ) else goto endCopy
    )

:endCopy
    endlocal

我必须说我同意沃恩普里兹的观点。这似乎很奇怪。不过,在PowerShell中执行所需操作非常简单。只需使用以下工具获取您想要的项目数:

$sourceFolder = "D:\source"
$destinationFolder = "D:\copiedfiles"
$maxItems = 200
Get-Childitem $sourceFolder | Select-Object -First $maxItems | Copy-Item $destinationFolder

如果目标文件夹不存在,这甚至会创建目标文件夹。

我必须说我同意vonPryz的观点。这似乎很奇怪。不过,在PowerShell中执行所需操作非常简单。只需使用以下工具获取您想要的项目数:

$sourceFolder = "D:\source"
$destinationFolder = "D:\copiedfiles"
$maxItems = 200
Get-Childitem $sourceFolder | Select-Object -First $maxItems | Copy-Item $destinationFolder

如果目标文件夹不存在,这甚至会创建目标文件夹。

顺便说一句。。。上面的PowerShell将引发关于命令不接受管道输入的异常。您需要复制每个对象,因此正确的命令是:
Get Childitem$sourceFolder | ForEach object{Select object-First$maxItems | copy Item$destinationFolder}

顺便说一句。。。上面的PowerShell将引发关于命令不接受管道输入的异常。您需要复制每个对象,因此正确的命令是:
getchilditem$sourceFolder | ForEach对象{selectobject-First$maxItems | copy Item$destinationFolder}

检查
复制项目
检查
复制项目
我对PowerShell执行了操作,但要求是针对Windows脚本的。您使用PowerShell.Get-Childitem$sourceFolder标记了该问题|选择对象-第一个$maxItems |复制项目-目标$destinationFolderI对PowerShell执行了操作,但要求是针对Windows的脚本。您用PowerShell.Get-Childitem$sourceFolder |选择对象-第一个$maxItems |复制项目-目的地$destinationFolderI标记了该问题。我完全同意您的意见,但当客户提出要求时,您几乎没有任何选择,尤其是当他还没有准备好与您共享完整的图片时。我有一个需要拆分的案例16个文件夹中的45k文件,供以后处理(并行处理)。你不可能知道所有可用的场景,因此,它对其他人来说是有意义的。换句话说:回答问题,没有判断=)我完全同意你的意见,但当客户提出要求时,你几乎没有任何选择,尤其是他还没有准备好与你分享完整的图片。我有一个案例,我需要将45k个文件拆分到16个文件夹中,以便稍后处理(并行处理)。你不可能知道所有可用的场景,因此,它对其他人来说是有意义的。换句话说:回答问题,不带任何判断=)