PowerShell获取某⽬录下所有的⽂件、⽂件夹,以及过滤某⽂
件、⽂件夹
⽬录
背景
上实验课收集实验报告,同学是通过红蜘蛛上传,教师电脑上会给每⼀个⽂件创建⼀个⽂件夹,防⽌同名⽂件,⽂件夹名字还是随机的,那么如何把所有实验报告,提取到⼀个⽂件夹中呢?
忙了⼀下午,因为⼀点shell编程的知识都没有。。。。百度全是垃圾,⼀点⼀点拼凑出如下代码。
问题描述
每个⽂件夹下都有⼀些⽂件,我要把它们放到同⼀个⽂件夹下。
右键运⾏move.ps1
所有⽂件都到了新创建的newfolder⽂件夹下
问题
1. 不知道怎么得到所有⽂件,⽂件夹
2. 不知道怎么过滤⽂件,⽂件夹
3. 不知道怎么得到当前路径
4. 不知道这个脚本⽂件的后缀名是什么
5. 不知道怎么运⾏脚本⽂件
6. ⼀开始⼿写的绝对路径,路径中包含汉字,powershell默认是gbk,我保存的是utf-8,⼀直报错
解决⽅法
百度+编程经验,主要查⼀些函数⽤法,以及参数
代码⼤致流程
1. 创建⼀个newfolder⽂件夹⽤来存储所有实验报告(⽂件)
2. 获得当前⽂件夹的路径
3. 将当前⽂件夹中的所有⽂件,不包括⽂件夹,获取
4. 将所有⽂件复制到newfolder
powershell创建目录
md newfolder # store the files folder
$x = Split-Path -Parent $MyInvocation.MyCommand.Definition # get the path
$fileList = Get-ChildItem  $x -recurse * | where{!$_.PSIsContainer} # get the files exclude folders foreach($file in $filelist){ # enum the files list
if(($file.name -ne 'move.ps1')){ # 'move.ps1' is this program, it don't need copy or move
echo $file.name #print the file name
copy $file.fullname newfolder # copy files to the folder named newfolder
}
}
pause
⾷⽤办法
1. 在某⽬录下(你需要的那个⽬录)新建⼀个⽂件命名“move.ps1",
2. 双击打开将上述代码复制到move.ps1中,保存,
3. 然后右键move.ps1->PowerShell运⾏,
4. 正常的话,所有⽂件都会复制到newfolder⽂件夹中。
结果
把这个程序给了两位助教同学,得到了好评。⾃⼰也积累了⼀些shell编程知识。