batch file从folder1复制每个第n个文件到folder2?

我正在尝试从一个文件夹复制每个第30个文件到另一个文件夹,并自动化其他文件夹的过程。 我已经尝试在这个线程批处理脚本: Windowsbatch file脚本复制每个第十个文件从一个文件夹到另一个文件夹 ,只是得到“该命令的语法是不正确的”当我运行该文件(是的,我已经尝试两个版本)。

我的文件夹名称中有空格(不是我的select,也不能更改)。 这些文件被命名为image00000X.jpg,是的,有超过10万(这就是为什么我真的希望脚本工作)。

理想情况下,我想要一种方法来设置脚本,这样我就可以更改input和输出path,而不必在运行时在不同文件夹之间移动脚本,但是我会尽我所能解决这个问题。因为我已经尝试了其他一切(包括robocopy,Xcopy,五个Powershell脚本和一些BASH脚本)。

谢谢!

Solutions Collecting From Web of "batch file从folder1复制每个第n个文件到folder2?"

你也可以使用一个标准for循环。 我也添加了一些参数,所以你可以改变源,目的地,跳过计数:

 param( [string]$Source = $( throw "You Must Specify Source Directory" ), [string]$Destination = $( throw "You Must Specify Destination Directory" ), [int]$Skip = 30 ) $Files = Get-ChildItem -Path $Source -File for( $idx = 0; $idx -lt $Files.count; $idx += $Skip ) { $Files[$idx] | Move-Item -Destination $Destination } 

SourceDestination是必需的参数,但如果不指定值,则Skip默认为30。 要使用,请将其命名为move30th.ps1 ,并像move30th.ps1这样运行它:

 .\move30th.ps1 -Source "C:\Path\To\Files" -Destination "C:\New\Path" -Skip 30 

这是一个简单的批处理文件:

 :: copyNth.bat interval sourcePath destinationPath @echo off setlocal set /an=0 for %%F in ("%~f2.\*") do 2>nul set /a "1/(n=(n+1)%%%1)" || copy "%%F" %3 

sampleUsage:

 copyNth 30 "c:\someSourcePath" "d:\someDestinationPath" 

"%~f2.是语法,它允许您安全地将文件(或文件掩码)附加到任何提供的路径 。

获得每个N值的诀窍是让SET / A故意提高一个除数为0的误差。 我将错误消息重定向到nul,并且只有在发生错误时才有条件地复制文件。

你可以做一个简单的Do / While循环,如:

 $Files = Get-ChildItem C:\Path\To\Files $i = 0 Do{ $files[$i]|Move-Item -Dest C:\New\Path $i=$i+30 }While($i -le $files.count)