powershell复制目录结构和删除空目录

来源:互联网 发布:弗林认罪 知乎 编辑:程序博客网 时间:2024/05/18 01:04

文件夹操作
自从用了bat的加强版:powershell,不得不说,很好很强大。
微软从win7开始,就已经将其嵌入到系统,并希望用户使用它。在这里需要说的是vs也支持powershell的调试,它已经像一门语言了。在开发过程中一些繁琐可批量的操作使用powershell十分便捷。

下面说说两个简单的操作:
复制目录结构
顾名思义,就是将原目录的结构复制到目标目录而不拷贝其他文件。
直接上代码
传入源目录和目标目录的路径,将源目录的目录结构拷贝至目标目录。

function CreatEmptyDirs([string]$src, [string]$des)    {           get-childitem $src -recurse -directory | foreach-object { $tmp = $_.fullname;$tmp = $tmp.substring( $src.length, $tmp.length - $src.length ); if( -not (test-path $des$tmp) ) { new-item -path $des$tmp -type Directory -force } }        }

先深度遍历所有源目录下的文件夹(可以这样直接获取文件夹),通过管道处理:如果目标路径没有该文件夹的时候复制文件夹到目标路径。

删除空目录
嗯,如果一个目录比较深,我们可以用一个简单的方法去删除空目录而保留有文件的目录。就是逐级删除空目录。
下面是获取文件大小的函数
传入目录路径,获取目录大小。

function GetDirSize([string]$dir){    $size = 0    $files = get-childitem $dir -file -recurse -erroraction silentlycontinue    foreach($file in $files){$size = $size + $file.length}    return $size}

这里要将size变量置为零,虽然默认是局部变量,但是在运行时候发现它的初始值往往不为零,可能是在运行期间扫描较快,在被函数里的变量被销毁时被访问。
另外-erroraction参数很重要,因为目录可能已经被删除掉了。

传入目录路径,删除该目录下的空目录。

function DeleteEmpytDirs([string]$dir){       get-childitem $dir -recurse -directory -erroraction silentlycontinue | foreach-object {if( $size = (GetDirSize $_.fullname) -gt 0 ) { DeleteEmpytDirs $_.fullname}else {remove-item -path $_.fullname -recurse -force -erroraction silentlycontinue} }}

PS:发现一个好玩的东西

$sapi = new-object -com sapi.spvoice$sapi.speak(“hello world”)

可以让系统发声。个人觉得调试一下可以读中文。。。

0 0