当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] PowerShell:创建、删除、复制、重命名和移动文件

作者:精品下载站 日期:2024-12-14 06:09:24 浏览:12 分类:玩电脑

PowerShell:创建、删除、复制、重命名和移动文件


每天,系统管理员都必须对其 Windows 服务器上的大量文件和文件夹执行各种标准操作。这些任务通常包括管理共享资源上的用户数据以及正确维护备份。您可以使用 PowerShell 来减少涉及的手动工作量。

在开始之前,请确保您的系统策略允许运行 PowerShell 脚本,如“Windows PowerShell 初学者脚本教程”中所述。

查看目录中的对象

要查看 Windows 文件服务器上目录的内容,请使用 Get-ChildItem cmdlet。要显示所有隐藏文件,请添加 -Force 参数。以下命令显示共享文件夹中的所有根对象:

Get-ChildItem -Force \fsShared

如果您还想检查所有子文件夹及其内容,请添加 -Recurse 参数:

Get-ChildItem -Force \fsShared -Recurse

要筛选输出,请将“筛选”、“排除”、“包含”和“路径”参数添加到 Get-ChildItem cmdlet。对于高级对象筛选,请使用Where-Object cmdlet。下面的脚本搜索 IT 文件夹中 2018 年 4 月 1 日之后修改的所有可执行文件:

Get-ChildItem -Path \fsSharedIT -Recurse -Include *.exe | Where-Object -FilterScript {($_.LastWriteTime -gt '2018-04-01')}

使用 PowerShell 创建文件和文件夹

要使用 Windows PowerShell 创建新对象,您可以使用 New-Item cmdlet 并指定要创建的项目类型,例如目录、文件或注册表项。

例如,此命令创建一个文件夹:

New-Item -Path '\fsSharedNewFolder' -ItemType Directory

此命令创建一个空文件:

New-Item -Path '\fsSharedNewFoldernewfile.txt' -ItemType File

创建文件并向其中写入数据

至少有两种内置方法来创建文件并向其中写入数据。第一种是使用 Out-File cmdlet:

$text = 'Hello World!' | Out-File $text -FilePath C:datatext.txt

要覆盖现有文件,请使用 -Force 开关参数。

您还可以使用 Export-Csv cmdlet 创建文件,它将输出导出到可在 Excel 中打开的 csv 文件:

Get-ADuser -Filter * | Export-Csv -Path C:dataADusers.csv

检查文件不存在后创建文件

以下脚本检查特定文件夹中是否已存在特定文件 (pc.txt);如果没有,它会生成所有 AD 计算机的列表并将其保存到名为 pc.txt 的新文件中:

#create array of text files
$files=Get-ChildItem C:data*.txt | select -expand fullname
#check if file exists inside the array
$files -match "pc.txt"
#if matching return “True” key then exit, if “False” then create a report
if($files -eq 'False'){
Get-ADComputer -Filter * | Export-Csv -Path C:datapc.txt
}
else{exit}

使用 PowerShell 删除文件和文件夹

要删除对象,请使用Remove-Item cmdlet。请注意,如果对象不为空,则执行时需要您确认。下面的示例演示了如何删除 IT 文件夹及其中的所有子文件夹和文件:

Remove-Item -Path '\fssharedit'
Confirm
The item at \pdcsharedit 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 -Path '\fssharedit' -Recurse

删除超过 X 天的文件和文件夹

有时您需要清理某个目录中的旧文件。这是实现这一目标的方法:

$Folder = "C:Backups"

#delete files older than 30 days
Get-ChildItem $Folder -Recurse -Force -ea 0 |
? {!$_.PsIsContainer -and $_.LastWriteTime -lt (Get-Date).AddDays(-30)} |
ForEach-Object {
 $_ | del -Force
 $_.FullName | Out-File C:logdeletedbackups.txt -Append
}

#delete empty folders and subfolders if any exist
Get-ChildItem $Folder -Recurse -Force -ea 0 |
? {$_.PsIsContainer -eq $True} |
? {$_.getfiles().count -eq 0} |
ForEach-Object {
 $_ | del -Force
 $_.FullName | Out-File C:logdeletedbackups.txt -Append
}

检查文件存在后删除它们

以下是检查文件是否存在并在存在时将其删除的方法:

$FileName = 'C:datalog.txt'
If (Test-Path $FileName){
 Remove-Item $FileName
}

在一个脚本中删除多台计算机上的文件

要从远程电脑删除文件,您必须具有适当的安全权限才能访问它们。请务必使用 UNC 路径,以便脚本能够正确解析文件位置。

$filelist = @(" c$Temp", "c$Backups") #variable to delete files and folder
$computerlist = Get-Content C:datapc.txt #get list of remote pc's
 foreach ($computer in $computerlist){
 foreach ($file in $filelist){
 $filepath= Join-Path "$computer" "$filelist" #generate unc paths to files or folders
 if (Test-Path $filepath)
 {
 Remove-Item $filepath -force -recurse -ErrorAction Continue}}}

使用 PowerShell 复制文件和文件夹

Copy-Item cmdlet 使您能够将对象从一个路径复制到另一路径。以下命令通过从一台远程计算机 (fs) 复制文件 users.xlsx 并将其通过网络保存到另一台计算机 (fs2) 来创建备份:

Copy-Item -Path \fsShareditusers.xlsx -Destination \fs2Backupsitusers.xlsx

如果目标文件已存在,则复制尝试将失败。要覆盖现有文件,即使它处于只读模式,也请使用 -Force 参数:

Copy-Item -Path \fsShareditusers.xlsx -Destination \fs2Backupsitusers.xlsx -Force

使用 PowerShell 将文件复制到远程计算机或从远程计算机复制文件

如果您要将文件复制到远程计算机或从远程计算机复制文件,请务必使用 UNC 路径。

例如,使用以下命令将文件从远程文件服务器复制到本地 C: 目录:

Copy-Item \fsc$temp -Recurse C:data

要将文件从本地目录复制到远程文件夹,只需颠倒源位置和目标位置即可:

Copy-Item C:data -Recurse \fsc$temp

在一个脚本中通过网络将多个文件从一台服务器复制到另一台服务器

您还可以将文件从一台远程服务器复制到另一台远程服务器。以下脚本将 \fsSharedtemp 文件夹递归复制到 \fsSharedtest:

Copy-Item \fsSharedtemp -Recurse \fsSharedtest

仅复制某些类型的文件

要仅将某些文件从源内容复制到目标,请使用 -Filter 参数。例如,以下命令仅将 txt 文件从一个文件夹复制到另一个文件夹:

Copy-Item -Filter *.txt -Path \fsSharedit -Recurse -Destination \fs2Sharedtext

使用 XCOPY 和 ROBOCOPY 命令或 COM 对象复制文件

您还可以运行 XCOPY 和 ROBOCOPY 命令来复制文件,或使用 COM 对象,如下例所示:

(New-Object -ComObject Scripting.FileSystemObject).CopyFile('\fsShared', 'fs2Backup')

使用 PowerShell 移动文件和目录

Move-Item cmdlet 将项目(包括其属性、内容和子项目)从一个位置移动到另一个位置。它还可以将文件或子目录从一个目录移动到另一位置。

以下命令将特定备份文件从一个位置移动到另一个位置:

Move-Item -Path \fsSharedBackups1.bak -Destination \fs2Backupsarchive1.bak

此脚本将整个备份文件夹及其内容移动到另一个位置:

Move-Item -Path \fsSharedBackups -Destination \fs2Backupsarchive

然后,备份目录及其所有文件和子文件夹将出现在存档目录中。

使用 PowerShell 重命名文件

Rename-Item cmdlet 使您能够更改对象的名称,同时保持其内容不变。无法使用“重命名项目”命令来移动项目;对于该功能,您应该使用如上所述的 Move-Item cmdlet。

以下命令重命名文件:

Rename-Item -Path "\fsSharedtemp.txt" -NewName "new_temp.txt"

重命名多个文件

要一次重命名多个文件,请使用如下脚本:

$files = Get-ChildItem -Path C:Temp #create list of files
foreach ($file in $files)
{
 $newFileName=$file.Name.Replace("A","B") #replace "A" with "B"
 Rename-Item $file $newFileName
}

使用 PowerShell 更改文件扩展名

您还可以使用重命名项来更改文件扩展名。如果要一次更改多个文件的扩展名,请结合使用 Rename-Item cmdlet 和 Get-ChildItem cmdlet。

以下脚本将所有“txt”文件扩展名更改为“bak”。通配符 (*) 确保包含所有文本文件:

Get-ChildItem \fsSharedLogs*.txt | Rename-Item -NewName { $_.name -Replace '.txt$','.bak' }

使用本文中的信息,您可以自动执行与文件存储上的文件管理相关的各种简单操作,并节省时间来执行更重要的任务。祝你好运!

常问问题

如何创建文件?

使用 New-Item cmdlet 创建文件:

New-Item -Path '\fsSharedNewFoldernewfile.txt' -ItemType File

创建文件会覆盖任何现有的同名文件,因此您可能需要检查该文件是否已存在。
您还可以使用 New-Item cmdlet 创建文件夹、目录或注册表项。

如何创建文本文件

要使用 Windows PowerShell 创建新对象,请使用 New-Item cmdlet 并指定要创建的项目的类型,如下所示:

New-Item -Path '\fsSharedNewFoldernewfile.txt' -ItemType File

您可以使用 New-Item cmdlet 创建文件、文件夹、目录和注册表项。

如何创建目录

要使用 PowerShell 创建新目录,请使用 New-Item cmdlet:

New-Item -Path '\fsSharedNewFolder' -ItemType Directory

您还可以使用 New-Item cmdlet 创建文件、文件夹或注册表项

如何删除文件?

要删除对象,请使用Remove-Item cmdlet。如果对象不为空,则执行时将请求确认。

Remove-Item -Path '\fssharedit'

您还可以使用 PowerShell 删除所有早于 X 天的文件或从多台计算机中删除文件。

如何复制文件?

使用 Copy-Item cmdlet 将对象从一个路径复制到另一路径。以下命令通过将文件 users.xlsx 通过网络从一台远程计算机 (fs) 复制到另一台远程计算机 (fs2) 来创建备份:

Copy-Item -Path \fsShareditusers.xlsx -Destination \fs2Backupsitusers.xlsx

请注意,如果目标文件已存在,则复制尝试将失败。了解从远程计算机复制文件或将文件复制到远程计算机时如何覆盖文件。

如何移动文件?

Move-Item cmdlet 将项目(包括其属性、内容和子项目)从一个位置移动到另一个位置:

Move-Item -Path \fsSharedBackups1.bak -Destination \fs2Backupsarchive1.bak

您还可以使用 PowerShell 移动整个文件夹。

如何重命名文件?

要使用 PowerShell 重命名单个文件,请使用以下命令:

Rename-Item -Path "\fsSharedtemp.txt" -NewName "new_temp.txt"

您还可以使用 PowerShell 重命名多个文件。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯