以下脚本是可测试的并执行以下任务:
检查目标文件夹是否为空,如果不是则退出。
将移动文件操作记录到名为 log.txt 的文件中以供稍后查看。
可以在测试模式下工作,提前知道会发生什么。
可以定义源文件夹-目标文件夹-增量值
function Move-Files {
param ($Source ,$Targert,$Increment=5 , $TestMode, $Logfile)
$currentpath=pwd
if (!$LogFile) {$Logfile= "{0}\{1}" -f $currentpath,"log.txt" }
"log file is created in $logfile"
# check that destination folder is empty and create
if(!(Test-Path -Path $Targert )){
$null=New-Item -ItemType directory -Path $Targert -Force
}
else
{
$targetFiles = get-childitem $Targert -Recurse -File
if ($targetFiles -ne $null) {"Target folder not empty, Please remove it";return}
}
$files=get-childitem $source -Recurse -File
$fileCounter=0
$folderCounter=0
$Nextfolder="00001"
"Moving {0} to {1}| Total Files: {2} | Increment:{3}" -f $Source, $Targert , $files.count,$increment |tee $Logfile
$files |foreach {
$fileCounter++
if ((($fileCounter - 1) % $increment) -eq 0)
{
$folderCounter++
$Nextfolder= "{0}\{1}" -f $targert, $folderCounter.ToString("000000")
"Creating new folder {0} at counter={1}" -f $Nextfolder,$fileCounter |tee -Append $Logfile
#create Folder
$null=New-Item -ItemType directory -Path $Nextfolder -Force
}
if ($testMode)
{
"mv {0} {1}" -f $_.FullName,$Nextfolder |tee -Append $Logfile
}
else
{
mv $_.FullName -Destination $Nextfolder -Force #-WhatIf
"mv {0} {1}" -f $_.FullName,$Nextfolder |tee -Append $Logfile
}
}
}
使用方法:
$source="i:\myfiles"
$targert="i:\My20kFiles"
$increment=5 # for a test, modify 20000
#run in test mode to know what will happen
$TestMode=$true # modify to $flase to actual moving files
Move-Files -Source $source -Targert $targert -Increment $increment -TestMode $TestMode
输出示例:(您可以在日志文件 log.txt 中找到相同的输出)
Moving i:\myfiles to i:\My20kFiles| Total Files: 42 | Increment:5
Creating new folder i:\My20kFiles\000001 at counter=1
mv I:\myfiles\1.txt i:\My20kFiles\000001
mv I:\myfiles\10.txt i:\My20kFiles\000001
mv I:\myfiles\11.txt i:\My20kFiles\000001
mv I:\myfiles\12.txt i:\My20kFiles\000001
mv I:\myfiles\13.txt i:\My20kFiles\000001
Creating new folder i:\My20kFiles\000002 at counter=6
mv I:\myfiles\14.txt i:\My20kFiles\000002
mv I:\myfiles\15.txt i:\My20kFiles\000002
mv I:\myfiles\16.txt i:\My20kFiles\000002
mv I:\myfiles\17.txt i:\My20kFiles\000002
mv I:\myfiles\18.txt i:\My20kFiles\000002
Creating new folder i:\My20kFiles\000003 at counter=11
mv I:\myfiles\19.txt i:\My20kFiles\000003
mv I:\myfiles\2.txt i:\My20kFiles\000003
.................
更新:
我修改了代码:
添加日志文件作为参数。默认路径将是当前的 powershell 工作文件夹
$Testmode 最初为 false,因此您移动文件。您可以传递参数 $Testmode=$true 以在测试模式下运行(不移动到文件),您可以查看描述文件移动位置的日志文件。
您可以根据需要自定义代码