我是PowerShell新手,我很想能够编写脚本.我有一个文本文件,其中每一行都是文件名的一部分,没有路径或扩展名.我想要一个循环遍历文件每一行的单行(带有gc - Get-Content,对吗?),获取行的内容,构造源路径(网络驱动器和扩展是静态的),构造目标路径,然后复制每个文件.我的文件内容是这样的:
12345678
98765432
32145698
12365782
Run Code Online (Sandbox Code Playgroud)
我的源文件夹是这样的UNC路径:
\\server\share
Run Code Online (Sandbox Code Playgroud)
我的目标文件夹是:
c:\temp\files
Run Code Online (Sandbox Code Playgroud)
我想做相当于这个DOS命令,使用$_文件的每一行作为文本:
copy \\server\share\$_.ext c:\temp\files\$_.ext
Run Code Online (Sandbox Code Playgroud)
我很确定我可以使用gc和$_访问文件的每一行,并且我需要使用它cp来复制文件,但是我在构造源文件名和目标文件名时遇到了麻烦.
请尝试以下方法
gc theFileName |
%{ "{0}.ext" -f $_ } |
%{ copy "\\server\share\$_" "c:\temp\files\$_" }
Run Code Online (Sandbox Code Playgroud)
它实际上可以在一行上完成,但它看起来更好,作为这个答案的多行格式化:)
在这种情况下,Copy-Item可以直接采用脚本块,因此不需要Foreach-Object阶段:
gc theFileName | cpi -l {"\\server\share\$_.exe"} c:\temp\files -whatif
Run Code Online (Sandbox Code Playgroud)
-WhatIf满意后,请删除该参数。-l是-LiteralPath的缩写,它可以帮助PowerShell确定正在使用的参数集。另外,最好在此处使用原义路径,以免通配符不引起混乱(除非您希望如此,否则请使用-path)。
本质上,可以通过脚本块指定管道绑定参数,PowerShell会尝试将脚本块的结果解析为管道绑定参数期望的类型。
| 归档时间: |
|
| 查看次数: |
9497 次 |
| 最近记录: |