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

文件夹操作
自从用了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”)

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值