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

[玩转系统] 自动从文件夹名称生成 robocopy 作业

作者:精品下载站 日期:2024-12-14 07:12:23 浏览:15 分类:玩电脑

自动从文件夹名称生成 robocopy 作业


自动从文件夹名称生成 robocopy 作业

你好呀,

我有时会迁移一些小型文件服务器。我经常必须为新文件服务器创建一个新的文件夹结构。当结构可用时,我当然必须使用 robocopy 迁移数据。但在新环境中将所有数据复制到正确的位置是很困难的。因此,我创建了一个小型 Excel 来生成带参数的孔机器人复制。

通过这个 execl,我可以在几秒钟内生成大量 robocopy 批次。

让我们看看我的例子(当然你必须合并新旧文件夹名称,否则excel不知道如何生成命令):

=(""&B3&"|robocopy  ""\oldfile\share\"&A3&""" ""\newfile\share\"&B3&"""  /MIR /COPY:DAT /DCOPY:T /R:2 /W:3 /LOG+:""\someserver\logs\%DATE:~6,4%-%DATE:~3,2%-%DATE:~0,2%-%time:~0,2%-%time:~3,2%-%time:~6,2%-"&B3&".log"" /TEE /NDL")

正如你所看到的,我可以轻松地在 Excel 中创建 robocopy 命令

[玩转系统] 自动从文件夹名称生成 robocopy 作业

列 csv robocopy 作业生成 powershell 可以读取和解释的未来 csv 文件的内容。

您可以更改特殊的临时文件夹来生成 csv 文件。只需创建一个空文本文件,并在文件中包含以下“标题”。 “名称|robocopyjob”

注意:csv 文件的标题中不应有空格或其他内容,否则分隔符将无法正常工作。

让我们看看我的 csv 文件

[玩转系统] 自动从文件夹名称生成 robocopy 作业

请将目录从打开的 powershell 更改为特殊临时目录以导入 csv 文件。就我而言,我使用 ISE。

[玩转系统] 自动从文件夹名称生成 robocopy 作业

第一步是导入 csv 内容。请查看您提供的文件名。

$jobs = @()
$jobs = (Import-Csv -Path .\robocopy-csvimportfile.csv -Delimiter "|")
$jobs

[玩转系统] 自动从文件夹名称生成 robocopy 作业

下一步是执行脚本的其余部分以生成 robocopy 批处理文件。

foreach ($job in $jobs){

  $name = ($job.name)
  $robocopy = ($job.robocopyjob)
  New-Item -Path .\ -Name "$name.cmd" -ItemType File -Force
  Get-Item -Path .$name.cmd | Add-Content -Value "chcp 1252"
  Get-Item -Path .$name.cmd | Add-Content -Value "$robocopy"
  Get-Item -Path .$name.cmd | Add-Content -Value "pause"

}

使用此脚本,您可以在浏览的目录中为每个作业生成一个批处理文件。就是这样。

这是带有更多功能的孔脚本。

#define codepage (utf8 code would be 65001)
$codepage  = "1252"
#create array for csv import 
$jobs = @()
$jobs = (Import-Csv -Path .\robocopy-csvimportfile.csv -Delimiter "|")
#write all robocopy jobs to variable 
$all = (($jobs.robocopyjob))
#generate new cmd file 
New-Item -Path .\all.cmd -ItemType File -Force
#set encoding to west european latin (utf8 code would be 65001)
Get-Item -Path .\all.cmd | Add-Content -Value "chcp $codepage"
#adding content from $all to cmd file
$all | Out-File -FilePath .\all.cmd -Append -Encoding utf8 -Force
Get-Item -Path .\all.cmd | Add-Content -Value "pause"
#foreach loop to generate the seperate robocopy jobs
foreach ($job in $jobs){

  $name = ($job.name)
  $robocopy = ($job.robocopyjob)
  New-Item -Path .\ -Name "$name.cmd" -ItemType File -Force 
  Get-Item -Path .$name.cmd | Add-Content -Value "chcp $codepage"
  Get-Item -Path .$name.cmd | Add-Content -Value "$robocopy"
  Get-Item -Path .$name.cmd | Add-Content -Value "pause"
}

[玩转系统] 自动从文件夹名称生成 robocopy 作业

excel和powershell的结合确实很强大。如果您喜欢它,请按“有帮助”或写一条简短的评论。谢谢你!

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

取消回复欢迎 发表评论:

关灯