【问题标题】:Batch copy files from tab delimited file从制表符分隔文件批量复制文件
【发布时间】:2012-07-12 13:47:08
【问题描述】:

我有一个制表符分隔文件,第一列包含文件的当前位置,第二列包含我希望将文件复制到的位置。

我如何创建一个脚本来自动执行此操作,例如 Powershell 或 Windows Batch?

非常感谢

布伦丹

【问题讨论】:

    标签: powershell batch-file copy


    【解决方案1】:

    如果您在 CSV 中的列命名为 PathDestination,则以下操作有效:

    Import-Csv foo.csv -Delimiter "`t" | Copy-Item
    

    如果您的列名称不同(此处为FileTargetPath),您需要进行一些翻译:

    Import-Csv foo.csv -Delimiter "`t" | ForEach-Object {
      Copy-Item -Path $_.File -Destination $_.TargetPath
    }
    

    如果您根本没有列标题,您需要告诉Import-Csv

    Import-Csv foo.csv -Delim "`t" -Headers Path,Destination | Copy-Item
    

    批处理文件中的相同:

    for /f "skip=1 tokens=1,2 delims=   " %%A in (foo.csv) do (
      rem                             ↖ that's a tab
      copy "%%~A" "%%~B"
    )
    

    【讨论】:

    • 如果路径也包含位置,例如 H:\folder\file.doc 并且目标是 h:\folder1\
    • 是的。如有疑问,请阅读 Get-Help Copy-Item -Param Path 或查看该 cmdlet 的示例。
    • 不可否认,第一个解决方案有点逃避,因为它利用了 PowerShell 非常酷的特性,即在管道中传递数据可以通过属性名称使用参数。到目前为止我很少使用它,但如果您的输入数据看起来正确,它可以制作一个非常短的脚本:)
    • 这是我得到的错误(多次)复制项:无法将参数绑定到参数“路径”,因为它为空。在 line:1 char:35 + $data | ForEach-Object { Copy-Item
    • 好吧,适应 CSV 中的列名。
    猜你喜欢
    • 2013-12-27
    • 2014-05-08
    • 2021-03-31
    • 1970-01-01
    • 2014-07-15
    • 2019-08-10
    • 2013-05-29
    • 1970-01-01
    • 2021-09-04
    相关资源
    最近更新 更多