Powershell将目录中的最新文件添加到现有文件中

时间:2013-06-24 20:36:50

标签: powershell

在powershell中运行add-content命令时,我得到了一个奇怪的结果。这是我的代码:

gci "C:\dir\*.txt" | sort LastWriteTime  | select -last 1 | add-content  "C:\dir2\blah2.txt"

当我打开blah2时,我只看到文件名* .txt

我也尝试使用out-file,并得到另一个令人费解的(对我而言)结果:

Directory: C:\

Mode                LastWriteTime     Length Name                                                                      
----                -------------     ------ ----                                                                      
-a---         6/24/2013   4:02 PM        719 00010_06242013_1600.txt                                                   

2 个答案:

答案 0 :(得分:3)

我假设您正在尝试获取“C:\ blah.txt”的内容并将其添加到“C:\ blah2.txt”?

目前您获得1个项目(“C:\ Blah.txt”)然后按上次写入时间排序,然后选择1(只有一个),然后将输出添加到“C:\ blah2” 。文本”。这将写出常规输出到文件的任何内容。

如果你想把blah的内容写入blah2,你就错过了一个至关重要的步骤:

Get-ChildItem "C:\blah.txt" | sort LastWriteTime  | select -last 1 | Get-Content | add-content  "C:\blah2.txt"

删除冗余呼叫后:

Get-ChildItem "C:\blah.txt" | Get-Content | add-content  "C:\blah2.txt"

希望这有帮助。

答案 1 :(得分:0)

这个怎么样:

(gci .\blah.txt).lastwritetime > blah2.txt

我可以在您的代码中看到几件事:

  1. 如果只处理一个文件,我们不需要“排序”。
  2. “排序”和“选择”不会更改对象类型,因此add-content得到的只是来自管道“gci”c:\ blah.txt“中第一个命令的文件名blah.txt。以下是我的测试,以表明,我将为两者做一个get-member,你会看到对象是相同的:System.IO.FileInfo。

    PS C:\ Documents \ ManualScripts> gci。\ test.txt |得到构件

    TypeName:System.IO.FileInfo ........

  3. 与之相比:

    PS C:\Documents\ManualScripts> gci .\test.txt |  get-member
    
    
       TypeName: System.IO.FileInfo
    ......
    

    它们完全一样。