2010-10-17 23 views
2

今天我在Windows PowerShell中启动脚本 - 所以请原谅我的“哑” ...的PowerShell:子目录上市到一个txt文件

我想创建TXT的文件,每个文件的子文件夹的名称“根文件夹“在驱动器G:上。在G:\我有以下文件夹:

1_data
2_IT_area
3_personal
4_apprenticeship
7_backup
8_archives
9_user_profile

所以我写这个剧本:

get-childitem G:\ | ForEach-Object -process {gci $_.fullName -R} | WHERE {$_.PSIsContainer} > T:\listing\fileListing+$_.Name+.txt 

但脚本没有做我所做的事情nt - 它只创建一个文本文件..你能帮助我吗?我已经尝试过这里所描述的>>http://www.powershellpro.com/powershell-tutorial-introduction/variables-arrays-hashes/“T:\ listing \ $ _.Name.txt” - 不起作用...

非常感谢您的帮助!

-Patrick

回答

3

这应该做你想要什么:

Get-ChildItem G:\ | Where {$_.PSIsContainer} | 
    Foreach {$filename = "T:\fileListing_$($_.Name).txt"; 
      Get-ChildItem $_ -Recurse > $filename} 

如果键入此交互(使用化名):

gci G:\ | ?{$_.PSIsContainer} | %{$fn = "T:\fileListing_$($_.Name).txt"; 
            gci $_ -r > $fn} 

$_特殊变量通常只在有效用于Foreach-Object,Where-Object或任何其他与管道相关的脚本块的脚本块{ ... }。所以下面的文件名结构T:\listing\fileListing+$_.Name+.txt不太对。当你像$_.Name,那么你需要能够在字符串中执行表达式访问对象的成员

$name = "John" 
"His name is $name" 

但是:通常你会扩展变量在字符串中像这样。你可以这样做,使用子表达式运算符$()例如为:

"T:\listing\fileListing_$($_.Name).txt" 

所有这些文件名字符串建设之外,您不能使用$_一个脚本块之外。所以你只需在Foreach脚本块中移动文件名就可以了。然后创建该文件,将相关目录的内容重定向到该文件名 - 这将创建该文件。

+0

非常感谢! - 超精确地解释:)非常感谢! – 2010-10-19 15:51:21

相关问题