本文出处:http://www.cnblogs.com/wy123/p/6129498.html

因工作需要,处理一批文件,本想写C#来处理的,后来想想这个是PowerShell的天职,
索性就网上各种搜,各种Demo,各种修改,花了半天时间,最后还是拼凑出来能达到效果了。
本身对PowerShell并不熟悉,可能有些弯路,实现的也比较烂,总之是把各种小功能拼凑在一起,最后还是拼凑出来能达到效果了。
如下是原始Demo,比较幼稚,权当是自己记录的笔记了

1,文件信息统计

   如下文件夹下面有六个文本文件,统计这个文件夹下面的文件名称到一个日志文件

    

   将这个文件夹下的文件信息统计出来,存在一个指定路径的文件中,文件是根据时间生成的。

  

如下截图是生成的统计文件信息

  

  如果想要统计文件的全路径的话,直接用FullName即可,$fileName = $file.FullName即可取得文件的全路径。

    

  如果是想便利某一个路径下文件夹下面所有的文件和子文件夹的内容,可以再加上-Recurse参数,也即: $files = Get-Childitem "F:\TestPowerShell\" -Recurse

   

  此时记录的结果就是这样子的了

   

  如果是想统计某一类型的文件,需要加上-Include *.txt参数指定后缀名,也即:$files = Get-Childitem "F:\TestPowerShell\" -Recurse -Include *.txt

2,文件操作(Copy)

  如上建立的文件夹以及子文件夹复制到另外一个路径中,这里新建一个文件夹,用日期和时间命名

   

  运行脚本之后,效果如图,将指定文件夹下的文件和子文件夹下的文件copy到另外一个目录中。

  如果是想把某一个路径(或者多个路径)下的所有(包括子文件夹)下的文件Copy到一个文件夹下

可以便利逐个文件Copy至目标文件夹

foreach ($file in $fileList)
{
    #判断是否是文件,如果是文件,copy值目标文件夹
    if($file -is [System.IO.FileInfo])
    {
        #Copy文件
        Copy-Item $file.PSPath  $filepath\$destinationDir

        #记录copy的日志信息
        $file.FullName | Out-File $filepath\$logfilename -Append
    }
}

效果如图(为了显示出来效果,我将子文件夹中的文件重名了,防止因为重名文件覆盖)

记录的统计信息如下图

最后附上一个上述操作的完成的脚本

CLS

$filepath = "C:"
$name = (get-date).ToString("yyyyMMddHHmmss")
$logfilename = $name+'.txt'

#创建日志文件
New-Item -ItemType File -Path $filepath\$logfilename -Force

#目标文件夹名称
$destinationDir = $name
#创建目标文件夹
if(!(Test-Path $filepath\$destinationDir) )
{
    New-Item $filepath\$destinationDir -type directory
}

#输出F:\下所有文件的文件名
$fileList = Get-ChildItem F:\TestPowerShell -Recurse
foreach ($file in $fileList)
{
    #判断是否是文件,如果是文件,copy值目标文件夹
    if($file -is [System.IO.FileInfo])
    {
        #Copy文件
        Copy-Item $file.PSPath  $filepath\$destinationDir

        #记录copy的日志信息
        $file.FullName | Out-File $filepath\$logfilename -Append
    }
}

3,文件内容操作

   如下是文本文件中的内容,如果想读取具体文件的内容,可以get-content $file.pspath这个命令,将文本文件的内容读取出来

  

  如下截图是读取出来的效果

如下是上述操作完整的处理脚本

cls
$files = Get-Childitem "F:\TestPowerShell" -Recurse -Include *.txt
foreach ($file in $files)   #遍历文件
{
    $linenumber
    #获取当前文件的内容
    $content = get-content $file.pspath
    #打印出来文件名称
    Write-Host "******************"
    Write-Host $file
    Write-Host "******************"
    #遍历文件的每一行信息
    foreach ($line in $content)
    {
        #打印出来文件的每一行信息
        Write-Host $line
        #这里当然可以继续处理,比如对当前行信息继续做其他处理
     }
}

  

  到现在为止,文件可以统计了,可以移动了,可以读取出来起具体内容了,
  PowerShell的很多系统函数跟T-SQL或者C#差不多的,可以借助系统函数对文件内容做更加丰富的处理
  往下的工作就不说了,可以做各种处理来满足需求了。

总结:

  PowerShell的功能当然也不只是这些,上述也只是PowerShell的冰山一角,九牛一毛,只是借助其最最基础的功能来满足自己的需求,
  因为对PowerShell用的不多,可能还有非常多的系统命令来实现上述功能,上述操作应该有更加简单更加方便的实现,这里多写几行代码,算是熟悉的一个过程。

  

野路子出身PowerShell 文件操作实用功能的更多相关文章

  1. 野路子出身PowerShell 文件操作实用功能 MSSQL123

    因工作需要,处理一批文件,本想写C#来处理的,后来想想这个是PowerShell的天职, 索性就网上各种搜,各种Demo,各种修改,花了半天时间,最后还是拼凑出来能达到效果了. 本身对PowerShe ...

  2. PowerShell~文件操作和对象遍历

    ps提供了丰富的文件操作,如建立,删除,改名,移动,复制,文件夹建立,显示文件列表,同时对数组对象的遍历也很方便,如果在使用PS脚本时,希望现时传入参数,可以把参数声明为param,当然需要把它写在文 ...

  3. 野路子Java开发的一篇随笔

    园子的朋友们,一年半的时间大家过的还好吧?       流水它带走光阴的故事改变了我们,再次的见面我们又历经了多少的路程,落花流水,冷暖自知,这一年半,关于工作上的关键词只有两个:加班(996弱多了) ...

  4. 技术的正宗与野路子 c#, AOP动态代理实现动态权限控制(一) 探索基于.NET下实现一句话木马之asmx篇 asp.net core 系列 9 环境(Development、Staging 、Production)

    黄衫女子的武功似乎与周芷若乃是一路,飘忽灵动,变幻无方,但举手抬足之间却是正而不邪,如说周芷若形似鬼魅,那黄衫女子便是态拟神仙. 这段描写出自<倚天屠龙记>第三十八回. “九阴神抓”本是& ...

  5. 野路子土鳖ASP.NETer谈互联网的发展趋势

    有些话别在憋在心里太久了,容易伤身体,总得找个借口吐槽一下,今日不小心看到园有关于互联网发函趋势的文章,作为一名ASP.NET程序员,自然要说说什么是趋势,机会找到了,好高兴. http://zzk. ...

  6. 野路子码农系列(2)Python中的类,可能是最通俗的解说

    啥叫佩奇?啥叫类?啥叫面向对象?后面两个问题以前在大学里“祖传谭浩强”的时候我经常会有所疑问.老师说着一堆什么public, private,我都是一脸懵逼,啥叫私有?为啥要私有?然后就神游天外了…… ...

  7. 野路子码农系列(1) 创建Web API

    新工作正式开始了2天,由于客户暂时还没交接数据过来,暂时无事可做.恰逢政佬给某超市做的商品图像识别的项目客户催收了,老板要求赶紧搞个API,于是我就想我来试试吧. 说起API,我其实是一窍不通的,我对 ...

  8. 文件操作(day15)

    调用函数可以使用被调用函数动态分配的 存储区 calloc函数也可以动态分配一组连续的 存储区 这个函数可以把所有动态分配的存储区 内容设置成0 为了使用这个函数也需要包含stdlib.h头文件 这个 ...

  9. Python基本语法_文件操作_读写函数详解

    目录 目录 软件环境 file文件对象 open文件操作 读文件 read读取所有文件内容 readline获取一行内容 readlines读取所有文件内容 readreadlinereadlines ...

随机推荐

  1. [PHP内核探索]PHP中的哈希表

    在PHP内核中,其中一个很重要的数据结构就是HashTable.我们常用的数组,在内核中就是用HashTable来实现.那么,PHP的HashTable是怎么实现的呢?最近在看HashTable的数据 ...

  2. 用CIL写程序:你好,沃尔德

    前言: 项目紧赶慢赶总算在年前有了一些成绩,所以沉寂了几周之后,小匹夫也终于有时间写点东西了.以前匹夫写过一篇文章,对CIL做了一个简单地介绍,不过不知道各位看官看的是否过瘾,至少小匹夫觉得很不过瘾. ...

  3. C# 中参数验证方式的演变

    一般在写方法的时候,第一步就是进行参数验证,这也体现了编码者的细心和缜密,但是在很多时候这个过程很枯燥和乏味,比如在拿到一个API设计文档的时候,通常会规定类型参数是否允许为空,如果是字符可能有长度限 ...

  4. HTML5 localStorage本地存储

    介绍 localStorage(本地存储)的使用方式.包括对存储对象的添加.修改.删除.事件触发等操作. 目录 1. 介绍 1.1 说明 1.2 特点 1.3 浏览器最小版本支持 1.4 适合场景 2 ...

  5. 23种设计模式--观察者模式-Observer Pattern

    一.观察者模式的介绍      观察者模式从字面的意思上理解,肯定有两个对象一个是观察者,另外一个是被观察者,观察者模式就是当被观察者发生改变得时候发送通知给观察者,当然这个观察者可以是多个对象,在项 ...

  6. JS继承之借用构造函数继承和组合继承

    根据少一点套路,多一点真诚这个原则,继续学习. 借用构造函数继承 在解决原型中包含引用类型值所带来问题的过程中,开发人员开始使用一种叫做借用构造函数(constructor stealing)的技术( ...

  7. duang~免费的学习视频来啦:学霸君之全栈测试

    学霸君向童鞋们推荐一款 同名学霸学习 视频教程 重点是完全免费收看学习噢!!! 今天 学霸君推荐腾讯课堂的学霸君之全栈测试 复制下方链接至腾讯课堂中报名学习 https://ke.qq.com/cou ...

  8. Log4net - 规则简介

    参考页面: http://www.yuanjiaocheng.net/CSharp/csharprumenshili.html http://www.yuanjiaocheng.net/entity/ ...

  9. 总结30个CSS3选择器

    或许大家平时总是在用的选择器都是:#id  .class  以及标签选择器.可是这些还远远不够,为了在开发中更加得心应手,本文总结了30个CSS3选择器,希望对大家有所帮助. 1 *:通用选择器 ;; ...

  10. Winserver2012下mysql 5.7解压版(zip)配置安装

    一.安装 下载mysqlzip版本mysql不需要运行可执行文件,解压即可,下载zip版本mysqlmsi版本mysql双击文件即可安装,相对简单,本文不介绍此版本安装 配置环境变量打开环境变量配置页 ...