PowerShell 中的目錄文件管理


前面的一篇文章我們說了部分在PS中進行文件瀏覽的基本概念,說到了幾個虛擬驅動器的概念。並沒有深入的描述相關的命令,這里我們進一步對這一知識點進行描述。

2.1 管理當前工作路徑/位置

  在日常管理中經常需要對當前的路徑進行查詢和管理;PS提供了四個管理的cmdlet: get-location、set-location、push-location、pop-location。

  get-location: 相當於unix/Linux中的‘pwd’;用於獲取當前的工作路徑

  set-location: 相當於chdir、cd命令,用於改變當前工作路徑

  push-location: 這是PS中新增加的特性, 當用這個命令的時候,PS就會創建一個歷史路徑堆棧,這個堆棧用來存儲push-location的路徑信息, push-location用來將路徑保存

          到歷史路徑堆棧。

  pop-location: 用來將當前工作路徑切換到歷史路徑堆棧的最后一條記錄中的位置,並且刪除最上的一條記錄。

Exp:利用push/pop-loction命令切換工作路徑

復制代碼
PS C:\Users\vol_20120330> push-location -path c:\

_____________________________________________________________________________
PS C:\> get-location

Path                                                                            
----                                                                            
C:\                                                                             



_____________________________________________________________________________
PS C:\> pop-location

_____________________________________________________________________________
PS C:\Users\vol_20120330> get-location

Path                                                                            
----                                                                            
C:\Users\vol_20120330                                                           
復制代碼

  如上所示:  首先用push-location命令保存當前路徑並且將當前工作路徑切換到C:\ ; 接下來用get-location查看是否切換成功; 然后用pop-location命令切回到原先

保存的路徑,並用get-location驗證。

 

2、2  獲取當前系統支持的驅動器信息

  get-psdrive 命令獲取當前系統支持的驅動器。

Exp: 利用get-psdrive獲取當前我的系統上支持的驅動器

復制代碼
PS C:\Users\vol_20120330> get-psdrive

警告: 列“CurrentLocation”無法顯示,已被刪除。

Name           Used (GB)     Free (GB) Provider      Root                       
----           ---------     --------- --------      ----                       
Alias                                  Alias                                    
C                  17.89         11.41 FileSystem    C:\                        
cert                                   Certificate   \                          
D                   7.01         22.29 FileSystem    D:\                        
E                  35.61         22.98 FileSystem    E:\                        
Env                                    Environment                              
F                  26.06         32.54 FileSystem    F:\                        
Function                               Function                                 
G                  14.95         33.88 FileSystem    G:\                        
H                  31.67         17.15 FileSystem    H:\                        
HKCU                                   Registry      HKEY_CURRENT_USER          
HKLM                                   Registry      HKEY_LOCAL_MACHINE         
I                                      FileSystem    I:\                        
K                                      FileSystem    K:\                        
N                                      FileSystem    N:\                        
Variable                               Variable                                 
WSMan                                  WSMan  
復制代碼

  前面簡述過get-psdrive命令的psprovider參數,這里不再進行介紹,同時如果需要獲取相關信息,可以get-help online一下,可以得到比較詳細的信息。

  我們也說過可以利用new-item 命令創建虛擬驅動器;這里我們介紹一個新的命令: new-psdrive。

  new-psdrive常用的參數有: name   用來指定新的驅動器盤符名

                psprovider   用來指定驅動器的提供程序

                root   用來指定新驅動器代表的路徑

Exp: 利用new-psdrive命令創建mydirve: 盤符

復制代碼
PS C:\Users\vol_20120330> new-psdrive -name  mydrive   -psprovider  filesystem  -root $home

警告: 列“CurrentLocation”無法顯示,已被刪除。

Name           Used (GB)     Free (GB) Provider      Root                       
----           ---------     --------- --------      ----                       
mydrive                          11.40 FileSystem    C:\Users\vol_20120330   
復制代碼

  如實例所示,我們創建了一個盤符:mydrive。我們可以進入盤符進行操作:

復制代碼
PS C:\Users\vol_20120330> cd mydrive:\

_____________________________________________________________________________
PS mydrive:\> gl

Path                                                                            
----                                                                            
mydrive:\     
復制代碼

  我們還可以刪除當前添加的盤符,這通過remove-psdrive命令實現,見實例。

Exp: 利用remove-psdrive命令刪除剛添加的驅動器盤符。

復制代碼
PS mydrive:\> remove-psdrive   mydrive
Remove-PSDrive : 無法刪除驅動器“mydrive”,因為它在使用中。
所在位置 行:1 字符: 15
+ remove-psdrive <<<<    mydrive
    + CategoryInfo          : InvalidOperation: (:) [Remove-PSDrive], PSInvalid 
   OperationException
    + FullyQualifiedErrorId : InvalidOperation,Microsoft.PowerShell.Commands.Re 
   movePSDriveCommand
 

_____________________________________________________________________________
PS mydrive:\> cd c:\

_____________________________________________________________________________
PS C:\> remove-psdrive   mydrive

_____________________________________________________________________________
PS C:\> cd mydrive:\
Set-Location : 找不到驅動器。名為“mydrive”的驅動器不存在。
所在位置 行:1 字符: 3
+ cd <<<<  mydrive:\
    + CategoryInfo          : ObjectNotFound: (mydrive:String) [Set-Location],  
   DriveNotFoundException
    + FullyQualifiedErrorId : DriveNotFound,Microsoft.PowerShell.Commands.SetLo 
   cationCommand
復制代碼

2、3 目錄和文件的建立、復制、移動和刪除

  在windows PS中,用item表示在系統驅動器中的項目,因此用item作為cmdlet名詞部分的cmdlet都與文件或目錄的操作有關。

Exp:利用get-command的發現功能查詢文件操作相關命令

復制代碼
PS C:\> get-command *-item

CommandType     Name                             Definition                     
-----------     ----                             ----------                     
Cmdlet          Clear-Item                       Clear-Item [-Path] <String[]...
Cmdlet          Copy-Item                        Copy-Item [-Path] <String[]>...
Cmdlet          Get-Item                         Get-Item [-Path] <String[]> ...
Cmdlet          Invoke-Item                      Invoke-Item [-Path] <String[...
Cmdlet          Move-Item                        Move-Item [-Path] <String[]>...
Cmdlet          New-Item                         New-Item [-Path] <String[]> ...
Cmdlet          Remove-Item                      Remove-Item [-Path] <String[...
Cmdlet          Rename-Item                      Rename-Item [-Path] <String>...
Cmdlet          Set-Item                         Set-Item [-Path] <String[]> ...
復制代碼

  從上面可以看到一共有9個相關的命令,但是這並沒有包括全部的命令,因為還一個非常實用的命令:get-childitem;下面我們一一進行介紹:

1) get-item

  get-item的作用是獲取指定位置的項的相關信息。

Exp:利用get-item獲取當前路徑下項的信息

復制代碼
PS C:\> get-item .\


    目錄: 


Mode                LastWriteTime     Length Name                               
----                -------------     ------ ----                               
d--hs         2012/4/20      6:38            C:\    
復制代碼

Exp: 利用get-item獲取當前用戶home目錄的信息

復制代碼
 PS C:\> get-item $home


    目錄: C:\Users


Mode                LastWriteTime     Length Name                               
----                -------------     ------ ----                               
d----         2012/5/12     17:31            vol_20120330   
復制代碼

  這個命令具體可以參考幫助,其他就多說了。

2)get-childitem

  這個命令獲取某個項目中子項, 這個命令有很多的參數,但常用的有-name、 -recurse、-path、-force參數。

  name: 指定獲取子項的時候僅枚舉子項的名稱。

  recurse: 遞歸獲取

  path: 指定要枚舉的路徑,這個參數可以省略

  force:  獲取所有的子項,包括隱藏的子項

  這個命令還有include、exclude兩個常用的參數,具體就不介紹了,大家可以查看幫助。

Exp:例舉當前路徑下的子項名稱

復制代碼
PS C:\> get-childitem -name
DRIVERS
PerfLogs
Program Files
Users
Windows
autoexec.bat
config.sys
gdiplus.dll
復制代碼

Exp: 獲取指定路徑下的子項——獲取$home路徑下的子項

復制代碼
PS C:\> get-childitem -path $home


    目錄: C:\Users\vol_20120330


Mode                LastWriteTime     Length Name                               
----                -------------     ------ ----                               
d-r--         2012/3/30     18:27            Contacts                           
d-r--         2012/5/12     17:19            Desktop                            
d-r--         2012/5/12     17:18            Documents                          
d-r--         2012/5/12      5:34            Downloads                          
d-r--          2012/5/2      9:51            Favorites                          
d-r--         2012/3/30     18:27            Links                              
d-r--         2012/4/30     14:15            Music                              
d-r--         2012/3/30     18:27            Pictures                           
d-r--         2012/3/30     18:27            Saved Games                        
d-r--         2012/3/30     18:27            Searches                           
d-r--         2012/3/30     18:27            Videos                             
-a---         2012/5/12     17:25      10346 process.txt                        
-a---         2012/5/12     17:31       5254 process1.txt                       
-a---         2012/4/15     19:14        509 regwizard.log                      
-a---         2012/4/15     19:14       9853 sanct.log                          



_____________________________________________________________________________
PS C:\> get-childitem  $home


    目錄: C:\Users\vol_20120330


Mode                LastWriteTime     Length Name                               
----                -------------     ------ ----                               
d-r--         2012/3/30     18:27            Contacts                           
d-r--         2012/5/12     17:19            Desktop                            
d-r--         2012/5/12     17:18            Documents                          
d-r--         2012/5/12      5:34            Downloads                          
d-r--          2012/5/2      9:51            Favorites                          
d-r--         2012/3/30     18:27            Links                              
d-r--         2012/4/30     14:15            Music                              
d-r--         2012/3/30     18:27            Pictures                           
d-r--         2012/3/30     18:27            Saved Games                        
d-r--         2012/3/30     18:27            Searches                           
d-r--         2012/3/30     18:27            Videos                             
-a---         2012/5/12     17:25      10346 process.txt                        
-a---         2012/5/12     17:31       5254 process1.txt                       
-a---         2012/4/15     19:14        509 regwizard.log                      
-a---         2012/4/15     19:14       9853 sanct.log    
復制代碼

Exp: 獲取所有的子項,利用force參數

復制代碼
PS C:\> get-childitem -force


    目錄: C:\


Mode                LastWriteTime     Length Name                               
----                -------------     ------ ----                               
d--hs         2012/3/30     18:27            $Recycle.Bin                       
d--hs         2009/7/14     12:53            Documents and Settings             
d----         2012/3/30     18:30            DRIVERS                            
d-rh-          2012/4/3     16:33            MSOCache                           
d----         2009/7/14     10:37            PerfLogs                           
d-r--          2012/5/5     16:00            Program Files                      
d--h-          2012/5/5     16:00            ProgramData                        
d--hs         2012/3/30     18:26            Recovery                           
d--hs          2012/5/6      9:18            System Volume Information          
d-r--         2012/3/30     18:27            Users                              
d----          2012/5/5     14:54            Windows                            
-a---         2009/6/11      5:42         24 autoexec.bat                       
-a---         2009/6/11      5:42         10 config.sys                         
-a---         2008/9/10     15:00    1724416 gdiplus.dll                        
-a-hs         2012/5/12      3:32 1551273984 hiberfil.sys                       
-a-hs         2012/5/12      3:32 2068369408 pagefile.sys     
復制代碼

Exp:遞歸獲取路徑下的子項

復制代碼
PS C:\> get-childitem -path $home  -recurse


    目錄: C:\Users\vol_20120330


Mode                LastWriteTime     Length Name                               
----                -------------     ------ ----                               
d-r--         2012/3/30     18:27            Contacts                           
d-r--         2012/5/12     17:19            Desktop                            
d-r--         2012/5/12     17:18            Documents                          
d-r--         2012/5/12      5:34            Downloads                          
d-r--          2012/5/2      9:51            Favorites                          
d-r--         2012/3/30     18:27            Links                              
d-r--         2012/4/30     14:15            Music                              
d-r--         2012/3/30     18:27            Pictures                           
d-r--         2012/3/30     18:27            Saved Games                        
d-r--         2012/3/30     18:27            Searches                           
d-r--         2012/3/30     18:27            Videos                             
-a---         2012/5/12     17:25      10346 process.txt                        
-a---         2012/5/12     17:31       5254 process1.txt                       
-a---         2012/4/15     19:14        509 regwizard.log                      
-a---         2012/4/15     19:14       9853 sanct.log                          


    目錄: C:\Users\vol_20120330\Contacts


Mode                LastWriteTime     Length Name                               
----                -------------     ------ ----                               
-a---         2012/3/30     18:27      68381 vol_20120330.contact               
復制代碼

  get-childitem還有一個值得一提的功能: 就是支持通配符 * 、?和 [] ; 具體不舉實例了,基本和cmd里面的通配符差不多。

3) new-item

  通過new-item命令創建新項, 這個命令支持的常用參數有: path、itemtype。

  path: 指定要創建的新項的存放位置

  itemtype:指定要創建的新項的類型

Exp:  在 home路徑下創建一個vol的文件夾,創建一個vol.txt 的文件

復制代碼
PS C:\Users\vol_20120330> new-item -path $home\vol.txt  -itemtype file  


    目錄: C:\Users\vol_20120330


Mode                LastWriteTime     Length Name                               
----                -------------     ------ ----                               
-a---         2012/5/12     18:56          0 vol.txt    
復制代碼

  如上所示就為創建的文件。

復制代碼
PS C:\Users\vol_20120330> new-item -path $home\vol  -itemtype directory


    目錄: C:\Users\vol_20120330


Mode                LastWriteTime     Length Name                               
----                -------------     ------ ----                               
d----         2012/5/12     18:57            vol    
復制代碼

  如上所示創建的是文件夾/目錄。

4、重命名項

  利用rename-item來重命名項。

exp:

復制代碼
PS C:\Users\vol_20120330> rename-item  vol.txt  volcanol.txt

_____________________________________________________________________________
PS C:\Users\vol_20120330> ls


    目錄: C:\Users\vol_20120330


Mode                LastWriteTime     Length Name                               
----                -------------     ------ ----                               
d-r--         2012/3/30     18:27            Contacts                           
d-r--         2012/5/12     17:19            Desktop                            
d-r--         2012/5/12     17:18            Documents                          
d-r--         2012/5/12      5:34            Downloads                          
d-r--          2012/5/2      9:51            Favorites                          
d-r--         2012/3/30     18:27            Links                              
d-r--         2012/4/30     14:15            Music                              
d-r--         2012/3/30     18:27            Pictures                           
d-r--         2012/3/30     18:27            Saved Games                        
d-r--         2012/3/30     18:27            Searches                           
d-r--         2012/3/30     18:27            Videos                             
d----         2012/5/12     18:57            vol                                
-a---         2012/5/12     17:25      10346 process.txt                        
-a---         2012/5/12     17:31       5254 process1.txt                       
-a---         2012/4/15     19:14        509 regwizard.log                      
-a---         2012/4/15     19:14       9853 sanct.log                          
-a---         2012/5/12     18:56          0 volcanol.txt                       
復制代碼

  如上所示,命令執行成功后vol.txt變為volcanol.txt;  注意rename-item不能用於移動項目。

5、移動項目

   通過move-item移動項目

Exp: 通過move-item將當前路徑下的volcanol.txt 移動到vol目錄下

復制代碼
PS C:\Users\vol_20120330> cd vol

_____________________________________________________________________________
PS C:\Users\vol_20120330\vol> ls

_____________________________________________________________________________
PS C:\Users\vol_20120330\vol> move-item   ..\volcanol.txt  .\

_____________________________________________________________________________
PS C:\Users\vol_20120330\vol> ls


    目錄: C:\Users\vol_20120330\vol


Mode                LastWriteTime     Length Name                               
----                -------------     ------ ----                               
-a---         2012/5/12     18:56          0 volcanol.txt                       
復制代碼

  如上所示,命令成功執行,volcanol.txt 被移動到vol目錄下。

6、復制項

  通過copy-item復制項,但是這里copy-item命令有一點特殊的特性,copy-item僅能復制容器,不能復制容器內的類容。

復制代碼
PS C:\Users\vol_20120330> copy-item vol .\desktop

_____________________________________________________________________________
PS C:\Users\vol_20120330> get-childitem vol


    目錄: C:\Users\vol_20120330\vol


Mode                LastWriteTime     Length Name                               
----                -------------     ------ ----                               
-a---         2012/5/12     18:56          0 volcanol.txt                       



_____________________________________________________________________________
PS C:\Users\vol_20120330> get-childitem .\Desktop


    目錄: C:\Users\vol_20120330\Desktop


Mode                LastWriteTime     Length Name                               
----                -------------     ------ ----                               
d----         2012/5/12     19:10            vol                                
-a---          2012/5/5     14:54       2001 QQ影音.lnk                           
-a---         2012/5/12     17:05      79858 截圖00.jpg                           
-a---         2012/5/12     17:10     129290 截圖01.jpg                           
-a---         2012/5/12     17:16      10264 截圖02.jpg                           
-a---         2012/5/12     17:19      97789 截圖03.jpg                           
-a---          2012/4/6     19:36       1007 騰訊QQ.lnk                           



_____________________________________________________________________________
PS C:\Users\vol_20120330> get-childitem .\Desktop\vol

_____________________________________________________________________________
復制代碼

  如上面的執行情況所示,vol目錄被成功的復制到desktop目錄,但是vol下的volcanol.txt文件沒有復制到desktop\vol下面。

  為了復制容器下的項目需要添加recurse參數。

exp:復制容器下的項目

復制代碼
PS C:\Users\vol_20120330> copy-item vol  .\desktop  -recurse

_____________________________________________________________________________
PS C:\Users\vol_20120330> get-childitem vol


    目錄: C:\Users\vol_20120330\vol


Mode                LastWriteTime     Length Name                               
----                -------------     ------ ----                               
-a---         2012/5/12     18:56          0 volcanol.txt                       



_____________________________________________________________________________
PS C:\Users\vol_20120330> get-childitem .\Desktop


    目錄: C:\Users\vol_20120330\Desktop


Mode                LastWriteTime     Length Name                               
----                -------------     ------ ----                               
d----         2012/5/12     19:14            vol                                
-a---          2012/5/5     14:54       2001 QQ影音.lnk                           
-a---         2012/5/12     17:05      79858 截圖00.jpg                           
-a---         2012/5/12     17:10     129290 截圖01.jpg                           
-a---         2012/5/12     17:16      10264 截圖02.jpg                           
-a---         2012/5/12     17:19      97789 截圖03.jpg                           
-a---          2012/4/6     19:36       1007 騰訊QQ.lnk                           



_____________________________________________________________________________
PS C:\Users\vol_20120330> get-childitem .\Desktop\volcanol
 
PS C:\Users\vol_20120330> get-childitem .\Desktop\vol


    目錄: C:\Users\vol_20120330\Desktop\vol


Mode                LastWriteTime     Length Name                               
----                -------------     ------ ----                               
-a---         2012/5/12     18:56          0 volcanol.txt                       



_____________________________________________________________________________
復制代碼

  如上所示,vol下的文件也被復制。

7、刪除項目

  利用remove-item刪除項目

Exp:利用remove-item刪除上面復制的內容

復制代碼
PS C:\Users\vol_20120330> remove-item  .\Desktop\vol

_____________________________________________________________________________
PS C:\Users\vol_20120330> remove-item  .\Desktop\vol -recurse

_____________________________________________________________________________
PS C:\Users\vol_20120330> get-item .\Desktop\vol
Get-Item : 找不到路徑“C:\Users\vol_20120330\Desktop\vol”,因為該路徑不存在。
所在位置 行:1 字符: 9
+ get-item <<<<  .\Desktop\vol
    + CategoryInfo          : ObjectNotFound: (C:\Users\vol_20120330\Desktop\vo 
   l:String) [Get-Item], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetIte 
   mCommand
 
復制代碼

  如上,第一個命令:  “PS C:\Users\vol_20120330> remove-item .\Desktop\vol”  在執行的時候當vol下面有文件的時候,會彈出一個

對話框詢問是否刪除非空目錄。

  第二個命令: “PS C:\Users\vol_20120330> remove-item .\Desktop\vol -recurse”  將直接刪除目錄容器及其包含的內容,而且不提示,因此

在使用的時候需要注意。

  第三個命令:  “PS C:\Users\vol_20120330> get-item .\Desktop\vol” 的執行情況,說明第二個命令成功執行了。

7、執行項目

  通過在PS中使用 invoke-item 命令可以實現執行項目的作用。

Exp: 在PS中執行$home

  invoke-item  $home       #這個命令像在windows資源管理器中雙擊$home 目錄一樣,將會打開資源管理器,並且定位到$home目錄。

三、小結

  PS中關於重定向和文件目錄管理的功能,還是非常易於使用的,掌握這些對系統管理將大有幫助。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM