【发布时间】:2015-07-08 04:05:14
【问题描述】:
我的团队正在迁移到一个新网络,我们无法直接从网络 A 中的计算机复制到网络 B 中的新机器。在网络 A 中的这台机器上使用多年后,我的项目文件散布在各处磁盘。我需要构建一个脚本来将文件夹和文件复制到备份磁盘。那里没问题,但是网络技术人员要求在复制之前知道总字节数。
在 CMD 中,我使用来自 C:\ 的 dir /AD /S /B > C:\Users\r6540\Desktop\UserFiles.txt 来生成一个巨大的目录列表,其中包括很多我手动编辑的垃圾。
例如
C:\Dev\SSIS
C:\Dev\SSIS\DatabaseCleanup
C:\Dev\SSIS\DatabaseMaintTests
C:\Dev\SSIS\EclipseKeys
C:\Dev\SSIS\TemplateProject
我从未使用过 PowerShell,但看起来这项任务确实是在它的能力范围内。我发现了这个:
$startFolder = "C:\Scripts"
$colItems = (Get-ChildItem $startFolder | Measure-Object -property length -sum)
"$startFolder -- " + "{0:N2}" -f ($colItems.sum / 1MB) + " MB"
$colItems = (Get-ChildItem $startFolder -recurse | Where-Object {$_.PSIsContainer -eq $True} | Sort-Object)
foreach ($i in $colItems)
{
$subFolderItems = (Get-ChildItem $i.FullName | Measure-Object -property length -sum)
$i.FullName + " -- " + "{0:N2}" -f ($subFolderItems.sum / 1MB) + " MB"
}
Microsoft technet 和这个,同一页面:
$objFSO = New-Object -com Scripting.FileSystemObject
"{0:N2}" -f (($objFSO.GetFolder("C:\Scripts").Size) / 1MB) + " MB"
我要查找的输出是目录名称、选项卡和文件夹大小(但没有上面显示的“MB”)和 CRLF 作为写入文本文件的 EOL。
例如
C:\Dev\SSIS 70.23
C:\Dev\SSIS\DatabaseCleanup 17.80
C:\Dev\SSIS\DatabaseMaintTests 22.91
C:\Dev\SSIS\EclipseKeys 1.22
C:\Dev\SSIS\TemplateProject 13.29
任何人都知道 PowerShell 足以通过 UserFiles.txt 并获得结果文本文件输出?
形式并不像功能那么重要——所以如果你能想出另一种方法,我会很高兴看到它。
谢谢。
【问题讨论】:
-
那么您的示例输出是否满足您的需求,您需要一种方法来仅使用文本文件作为输入并使用单独的文件作为输出?
-
没错。输出文件基本上只是在 EOL 之前插入选项卡和文件夹大小的输入文件。
标签: shell powershell batch-file cmd