我正在编写一个脚本,用于存档文件以供分析.我的问题是文件名在多个文件夹中不是唯一的,因此它们被覆盖.
例如:
C:\StuffToCopy\Folder1\myFile1.txt
C:\StuffToCopy\Folder1\myFile2.txt
C:\StuffToCopy\Folder2\myFile1.txt
C:\StuffToCopy\Folder2\myFile2.txt
Run Code Online (Sandbox Code Playgroud)
在我的复制过程结束时,我只收到2个文件,但我想要4个.
我希望输出如下:
C:\ArchiveCopy\Folder1_myFile1.txt
C:\ArchiveCopy\Folder1_myFile2.txt
C:\ArchiveCopy\Folder2_myFile1.txt
C:\ArchiveCopy\Folder2_myFile2.txt
Run Code Online (Sandbox Code Playgroud)
到目前为止,这是我的脚本.
$files = dir -r -path "C:\StuffToCopy\" -i *.*
foreach ($file in $files)
{
if ($file.LastWriteTime -gt (get-date).AddDays(-1)) {
copy -path $file C:\ArchiveCopy\
}
}
Run Code Online (Sandbox Code Playgroud)
我想做点什么 copy -path $file.FolderName & '_' & $file C:\ArchiveCopy\
我只是不确定该怎么做.
Ric*_*ard 13
如果$file它确实是一个文件 - 一个实例System.IO.FileInfo(而不是一个真正的目录System.IO.DirectoryInfo:) Directory,那么它的属性是一个实例,DirectoryInfo其中包含Name:
$file |
copy-item -destination {
Join-Path C:\ArchiveCopy\ -childpath ($_.Directory.Name + "_" + $_.Name) }
Run Code Online (Sandbox Code Playgroud)
(使用管道启动,因为-LiteralPath参数将从管道Copy-Item绑定到PSPath属性,因此无需从$file对象中提取原始文件的名称.)
如果$file可能是目录,那么您需要自己完成更多工作,但可能更容易首先过滤掉目录:
dir -r -path C:\StuffToCopy\ |
where { -not $_.PSIsContainer } |
copy-item -destination {
Join-Path C:\ArchiveCopy\ -childpath ($_.Directory.Name + "_" + $_.Name) }
Run Code Online (Sandbox Code Playgroud)
注意:
-i "*.*":这是默认的(如果你需要过滤通配符模式上的文件更喜欢-filter pattern参数:过滤器被传递到文件系统而不是创建.NET对象,然后过滤它们,如果有的话,它会慢得多很多文件).试试这个:
dir -r -path C:\StuffToCopy |
where {!$_.psiscontainer} |
copy -dest { "C:\ArchiveCopy\$($_.Directory.Name)_$($_.Name)"}
Run Code Online (Sandbox Code Playgroud)
根据您的脚本,这是另一种方法:
$files = dir -r -path "C:\StuffToCopy\" -i *.*
$destPath = "c:\ArchiveCopy\"
foreach ($file in $files)
{
$folderPath = Split-Path $file.fullname -parent
$folder = Split-Path $folderPath -leaf
$destFilename = $folder + "_" + $file.name
$destFileFullPath = $destPath + $destFilename
write-host $destFileFullPath
if ($file.LastWriteTime -eq (get-date).AddDays(0)) {
copy -path $file $destFileFullPath
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
42063 次 |
| 最近记录: |