代码之家  ›  专栏  ›  技术社区  ›  AJ.

PowerShell:从文本文件中读取行,构造源文件名和目标文件名,然后复制文件

  •  4
  • AJ.  · 技术社区  · 15 年前

    我是一名医生 PowerShell Get-Content ,对吗?),获取行的内容,构造源路径(网络驱动器和扩展是静态的),构造目标路径,然后复制每个文件。我的文件内容如下:

    12345678
    98765432
    32145698
    12365782
    

    UNC 路径如下:

    \\server\share
    

    我的目标文件夹是:

    c:\temp\files
    

    $_ 作为文件每行的文本:

    copy \\server\share\$_.ext c:\temp\files\$_.ext
    

    我很确定我可以用 gc 要访问文件的每一行,我需要使用 cp 复制文件,但我在构建源文件名和目标文件名时遇到问题。

    2 回复  |  直到 15 年前
        1
  •  5
  •   JaredPar    15 年前

    试试下面的方法

    gc theFileName | 
      %{ "{0}.ext" -f $_ } |
      %{ copy "\\server\share\$_" "c:\temp\files\$_" }
    

    实际上,它可以在一行上完成,但对于这个答案,最好将其格式化为多行:)

        2
  •  5
  •   Keith Hill    15 年前

    在这种情况下,复制项可以直接获取脚本块,因此不需要Foreach对象阶段:

    gc theFileName | cpi -l {"\\server\share\$_.exe"} c:\temp\files -whatif
    

    -WhatIf 参数,一旦您满意它的工作。-l是-LiteralPath的缩写,它可以帮助PowerShell确定正在使用的参数集。在这里最好使用文本路径,这样通配符就不会被全局化(除非您需要这样做,否则使用-path)。

    实际上,管道绑定参数可以通过scriptblock指定,PowerShell将尝试将scriptblock的结果解析为管道绑定参数所期望的类型。