powershell

原文链接

content

 删除一个文件或文件夹(或其它输入的目标) 
Remove-Item cmdlet 正好顾名思义:它能使你清除一个东西和所有东西。清除文件C:/Script/test.txt ?那就删除它:
Remove - Item c:/scripts test.txt 
你也可以使用通配字符删除多个项目。举个例子,这个命令会删除所有在 C:/Scripts 里的文件 :
Remove - Item c:/scripts/ * 
这里是一个捕捉,当然。假设C:/Script包含替代的文件夹。在这种情况下,你可以提示是否要真的想要删除在Scripts文件夹里的任何东西。
Confirm
The item at C:/test/scripts has children and the  - recurse parameter was not specified. 
If you  continue , all children will be removed with the item. Are you sure you want to  continue ?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [ ? ] Help
( default   is   " Y " ): 
有快速绕过这个的方法吗?对;只要在你的命令结尾处附加 -recurse 参数:
Remove - Item c:/scripts/ *   - recurse 
这是一个有趣的变化。假设这个Scripts文件夹包含了一大堆文件和你想要删除的所有东西。等等:也许不是所有的东西,也许想要留下什么 .wav文件。 没问题;只要使用 -exclude 参数并打入要说明的文件应该把它排出删除:
Remove - Item c:/scripts/ *   - exclude  * .wav 
那是什么?现在你仅仅想要删除 .wav 和 .mp3 文件,保留其它所有类型?你不得不要求(使用 -include 参数):
Remove - Item c:/scripts/ *   - include .wav,.mp3 
当你想通后,如果你使用 -include 参数 cmdlet 将运行在那些指定项目的一部分参数上(不错,你可以指定多个项目;只要分开时用逗号)。相比之下,如果你使用 -exclude 参数排除这些项目将免除cmdlet的行动。 
是的,如果你想得到真正喜欢的,你可以使用 -include 与 -exclude 在同一个命令中。你认为在运行这个命令的时候会发生什么?
Remove - Item c:/scripts/ *   - include  * .txt –exclude  * test * 
你懂得:在C:/Scripts文件夹里所有的 .txt 文件(当用 -include 参数标明时)都将被删除,除了一些在文件名为test字符值的任何文件名(当用 -exclude 参数标明时)。尝试一些不同的变化,不久它将变的很完美。 
顺便说一下,Remove-Item cmdlet 有一个 -whatif 参数,这实际上并不能删除任何东西,但能告诉你会发生什么,如果你使用 Remove-Item。没有任何有用的意义那你是什么意思?这里,你先看看这个命令:
Remove - Item c:/scripts/ * .vbs  - whatif 
如果我们运行这个命令,在文件夹C:/Scripts里所有 .vbs 类型的文件将会删除;当然我们会得到像这样返回的如下信息,让我们知道哪个文件被删除,如果你使用 Remove-Item 外部的 -whatif 参数:
What  if : Performing operation  " Remove File "  on Target  " C:/scripts/imapi.vbs " .
What  if : Performing operation  " Remove File "  on Target  " C:/scripts/imapi2.vbs " .
What  if : Performing operation  " Remove File "  on Target  " C:/scripts/methods.vbs " .
What  if : Performing operation  " Remove File "  on Target  " C:/scripts/read-write.vbs
" .
What  if : Performing operation  " Remove File "  on Target  " C:/scripts test.vbs " .
What  if : Performing operation  " Remove File "  on Target  " C:/scripts/winsat.vbs " . 
除此之外,你可以删除其它的文件和文件夹。举个例子,任命一个show别名来获取这个清除命令:
Remove - Item alias:/show 
做一个说明,如这个具体位置:alias:/ 。这是 Windows PowerShell 驱动的标准记号法。驱动字母,然后冒号,然后由一个"/" 。
Set - Location env:    
Remove-Item 别名      ri     rd     erase     rm     rmdir     del

统计二级目录大小

分享一个自己写的项目里用到的PowerShell脚本,
这个脚本写的很简单,功能也不复杂,
主要作用就是统计一个文件夹下的所有子文件夹的大小,
这是为了配合统计之前从各个用户计算机收集的信息,
每个收集到的信息都会被存档到以这台计算机名称命名的
文件夹里,但是哪台计算上收集失败了呢?
每个人收集上来的数据大小是多少呢?这个就需要再统计了。
这种功能的软件其实网上有很多,但是对于一个IT Pro来说,
什么事都问百度可不是个好习惯,自己动手丰衣足食,
反正这也是个很简单的功能不需要太复杂的逻辑,
直接上手用PowerShell就搞定了
下边来看看代码
function filesize ([string]$filepath)
{
    if ($filepath -eq $null)
    {
        throw "路径不能为空"
    }
    dir -Path $filepath |   ForEach-Object -Process {
        if ($_.psiscontainer -eq $true) 
        {
            $length = 0 
            dir -Path $_.fullname -Recurse | ForEach-Object {
                $length += $_.Length
            }
            $l = $length/1KB    $_.name + "文件夹的大小为: {0:n1} KB" -f $l
        }
    }
}
filesize -filepath "E:\系统文件转储\桌面\test"  
就是一个很简单的函数而已,来看看测试用的文件夹结构,test是父目录,在这个目录下会有很多子目录,每个子目录里可能还会嵌套子目录 
wKioL1VTTZuRtxIMAAJv0W-fTJ8698.jpg   
另外这些文件夹里也会包含很多文件 
wKiom1VTTCHBNTmMAAC2mzHXofE576.jpg     
执行这个函数之后,可以看到统计出来的结果如下,为了观看方便这里统计转换成了kb的形式 
filesize -filepath "E:\系统文件转储\桌面\test"
wKiom1VTTCHAPqQ9AAET2oq6s_U019.jpg
---over

shell数组倒序打印

一、方法一:使用字符串切片

#! /bin/bash
read -p "请输入倒序内容:" str
len=${#str} # 获取字符串长度
for((i=$len;i>=0;i--))
do
        echo -e "${str:$i:1}\c"  # 其中 -e 是开启转义 \c 取消echo的换行
done
echo ""

二、第二种:利用shell中的数组

#! /bin/bash
read -p "请输入倒序内容:" s
str=`echo $s | sed 's/./& /g'` # 这里将字符串转化为数组格式 h e l l e v e r y o n e
array=($str)    # 将字符串转化为数组(h e l l e v e r y o n e)
len=${#array[@]}    # 获取数组长度 还有一种方式 len=${#array[*]}
for ((i=$len - 1;i>=0;i--))
do
        echo -e "${array[$i]}\c" # 其中 -e 是开启转义 \c 取消echo的换行
done
echo ""

发表评论