Powershell 递归文件夹并重命名文件名中添加了创建日期的文件

Powershell 递归文件夹并重命名文件名中添加了创建日期的文件,powershell,copy-item,Powershell,Copy Item,我是powershell的新手,但我已经找到了一些我在工作中需要的东西。我们在与测试位置相关的文件夹中有测试结果文件(PDF、XLS.TXT等)。大多数文件夹都有包含文件的子文件夹。boss要求必须将测试日期附加到文件名的末尾(test_results.pdf->test_results-2014-05-06.pdf) 我的代码确实获取了创建日期并附加了它,但是它只对源文件夹中的文件夹起作用,同时也附加了文件夹的创建日期。如果所有文件都在正确的位置,我不介意文件夹名称中的日期。源子文件夹中的文件

我是powershell的新手,但我已经找到了一些我在工作中需要的东西。我们在与测试位置相关的文件夹中有测试结果文件(PDF、XLS.TXT等)。大多数文件夹都有包含文件的子文件夹。boss要求必须将测试日期附加到文件名的末尾(test_results.pdf->test_results-2014-05-06.pdf)

我的代码确实获取了创建日期并附加了它,但是它只对源文件夹中的文件夹起作用,同时也附加了文件夹的创建日期。如果所有文件都在正确的位置,我不介意文件夹名称中的日期。源子文件夹中的文件将写入新子文件夹,但不附加创建日期

非常感谢您的帮助。这是我的密码:

$SourceDir= 'C:\modem\'
$targetDir = 'C:\test2\'

set-location -path $sourceDir

$files = get-childitem -recurse 
foreach ($file in $files)
{
 [string]$strippedFileName =[io.path]::GetFileNameWithoutExtension($file);
 [string]$extension = [io.Path]::GetExtension($file);
 [string]$crtime=$file.CreationTime.toString(' - yyyy-MM-dd');
 [string]$sourceFilePath = $file.DirectoryName; 
 [string]$DestinationFile = $targetDir + $sourcefilepath.trimstart($sourceDir) + "\" + $strippedFileName +$crtime + $extension;
 Copy-Item $file.Fullname  -Destination $DestinationFile -recurse -Force
}
谢谢你,

tom

这听起来似乎不适用于子文件夹中的文件,因为您正在目标目录中创建具有不同名称(附加日期)的子文件夹,但当您尝试复制文件时,您使用的是目标路径中的原始子文件夹名称,因此您尝试将其复制到不存在的位置

如果是这样的话,您可能会想,为什么源子文件夹中的文件会被复制到相应的重命名子文件夹中,但没有附加日期?简单:因为如果你
复制Item-Recurse
一个文件夹,所有的内容都会被复制。子文件夹中的文件不会被foreach循环单独复制;每次创建新的(重命名的)子文件夹时,循环的最后一行会同时复制所有文件

您只需从Get ChildItem的结果中解压缩目录,就可以同时解决这两个问题

在PowerShell 1和2中:

$files=Get Childitem-Recurse |?{$\u0.PSIsContainer}
在PowerShell 3及更高版本中:

$files=Get Childitem-Recurse-File
另外,看起来您来自于使用强类型语言进行.NET编程的背景(我根据您的口音猜是C#)。PowerShell是动态类型的;将所有变量转换为字符串没有必要(也没有好处)。分配将使它们成为字符串。此外,您不需要[IO.Path]来获取文件名的各个部分;它们是Get ChildItem返回的FileInfo对象的属性

您可以这样编写循环:

foreach($files中的$file)
{
$strippedFileName=$file.BaseName;
$extension=$file.extension;
$crtime=$file.CreationTime.toString('-yyyy-MM-dd');
$sourceFilePath=$file.DirectoryName;
$DestinationFile=$targetDir+$sourcefilepath.TrimStart($sourceDir)+“\”+$strippedFileName+$crtime+$extension;
复制项$file.FullName-目标$DestinationFile-递归-Force
}

所以我在Powershell v1中工作,所以我使用了approprate Get ChildItem并进行了其他更改。哇,我甚至不知道如何使用这些注释框。脚本没有为父文件夹(而不是子文件夹)中的文件追加创建日期,而是递归复制所有文件。我很感谢您的建议,但我发现关于PowerShell我还有很多东西要学习。