【问题标题】:Script help rename - copy - move脚本帮助重命名 - 复制 - 移动
【发布时间】:2015-12-29 21:31:15
【问题描述】:

我正在尝试编写一个 PowerShell 脚本来执行以下操作。

  1. 根据源文件“Source_list.csv”将源(FTP 文件夹)目录中的文件重命名为“current_name_datetime.csv”,该文件具有我希望该脚本查看的目录“源、目标”。

  2. 根据 Source_list.csv 中的目标将新重命名的文件复制到备份目录,此文件包含我希望此脚本查看的目录“源、目标”。

  3. 将新重命名的文件移动到不在我当前脚本中的最终目标目录。

Source_list.csv 内容

cscenter,Costume_Supercenter

fkimports,FKImports

我的脚本:

$sdfiles = Get-Content c:\!tony\Source_list.csv
$sourceDir = "c:\test\"
$destinationDir = "c:\testing\"

Get-ChildItem $sourceDir -Recurse -Include $sdfiles "*.csv"|
ForEach-Object{
       $newname= "{0}{1}_{2}.csv" -f $destinationDir, $_.BaseName,     [datetime]::Now.ToString('MM-dd-yyyy-hh-mm-ss')
    $_|Copy-Item -Include ,$sdfiles -Destination $newname -whatif }

错误:

What if: Performing operation "Copy Directory" on Target "Item: C:\test\cscenter Destination: C:\testing\cscenter_10-01-2015-12-22-24.csv".

我在错误中看到它试图复制目录而不是每个目录中的单个文件,并使用原始文件夹名称创建新文件夹并重命名文件夹并附加日期/时间戳。

【问题讨论】:

  • 我们可以看看Source_list.csv 中的几行是什么样的吗?
  • 无论$sfiles 是什么。除非这是一个错字,否则这将是一个问题。
  • Source_list.csv cscenter,Costume_Supercenter fkimports,FKImports
  • $sfiles 应该是 sdfiles
  • edit 提供这些细节的问题,以便我更好地了解结构

标签: powershell


【解决方案1】:

困惑。 -Include 参数应该只接受单个字符串数组,将 "*.csv" 扔到它的末尾将无法正常工作。此外,它将解释 CSV 的整行,即搜索文件“cscenter,Costume_Supercenter”,因此不应返回任何内容。至少当我在我的计算机上复制它时,我看到的是这样。

最后您尝试过滤文件,将其传送到 Copy-Item 并尝试再次过滤它?

我会采取更直接的方法:

$sdfiles = Import-CSV c:\!tony\Source_list.csv -Header @("File", "Folder")

$sourcedir = "c:\test\"
$destinationdir = "c:\testing\"

$sdfiles | ForEach-Object {
    $path = $sourcedir + $_.File + ".csv"
    $folder = $destinationdir + $_.Folder + '\'
    if (!(Test-Path $folder)) { New-Item -Type Directory -Path $folder }
    if (Test-Path ($path))
    {
        $newname = "{0}{1}_{2}.csv" -f $folder, $_.File, (Get-Date).ToString('MM-dd-yyyy-hh-mm-ss')
        Copy-Item -Path $path -Destination $newname -whatif
    }
    else { Write-Error "File $($_.File) not found" }
}

它有点笨重,但更容易阅读和调整以适应您的喜好。请注意,Import-CSV 确实需要 PowerShell v3。如果您有 v2 并且需要帮助以将其调整为二维数组,请告诉我。

我还建议查看 Microsoft 的 PowerShell MVA 课程,它们是很好的入门资源。

【讨论】:

  • 上面的脚本也找不到要重命名的 *.csv 文件,我使用的是 PS v3。也。
  • 文件 FKImports*.csv;在 C:\Users\TONY\Desktop\PowerShell\File_copy_Rev22.ps1:6 char:27 + $sdfiles | 找不到 FKImports ForEach-Object { + ~ + CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException
  • 出现错误的奇怪地方,但我认为这可能是因为该目录不存在?我假设您希望将备份目录设置为C:\Testing\[2nd column],但可以根据自己的喜好进行调整。我又添加了一行,再试一次。
  • 嗨,Deadly-Bagel,更新现在将文件夹结构复制到而不是文件,文件夹结构已经存在,因此无需复制它。它是对错误文件 COSTSS_*.csv 的处理在 line:24 char:28 + $sdfiles | ForEach-Object { + ~ + CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException
  • 这个任务好像不是几行代码就可以完成的,我认为文件需要在当前目录中重命名,然后复制到备份文件夹,最后移动到结束位置。
猜你喜欢
  • 2011-10-25
  • 1970-01-01
  • 1970-01-01
  • 2015-06-05
  • 1970-01-01
  • 2015-09-29
  • 2018-07-19
  • 1970-01-01
  • 2013-01-17
相关资源
最近更新 更多