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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了野路子出身PowerShell 文件操作实用功能相关的知识,希望对你有一定的参考价值。

 

本文出处: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 = 0
    #获取当前文件的内容
    $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 文件操作实用功能的主要内容,如果未能解决你的问题,请参考以下文章

技术的正宗与野路子_转

C++笔记-函数参数使用void *的野路子

PHP&JavaScript笔记-后端利用Refresh头带错误信息给前端(野路子操作)

软件测试面霸是如何养成的,他的路子真的野

技术的正宗与野路子

有哪些野路子电脑技能让非程序员感到神奇?