考虑以下目录结构:
rootdir
subdir_1
12345.tif
56789.tif
subdir_2
00000.tif
...
subdir_n
99999.tif
54321.tif
54345.tif
我需要:
所以期望的输出是:
newdir
2070e4cfb8f24209647d3c9ec55098ee.tif
52e31fe630cebe73cc959d371bd6b353.tif
eec032f144f5af1be2b7f0535a2010d2.tif
936ed95431293660e3499d88e5ae22b0.tif
8bc884dce30d89b53b120adb8bd658b2.tif
ec87470ae6683b539ea69004894e23dd.tif
我现在(在公元前PS 2.0中,我必须与之合作):
Get-ChildItem "D:\rootdir" -filter *.tif |
Foreach-Object {
$content = Get-Content $_.FullName
$md5 = New-Object -TypeName
System.Security.Cryptography.MD5CryptoServiceProvider
$hash = [System.BitConverter]::ToString($md5.ComputeHash([System.IO.File]::ReadAllBytes($content)))
## Write-Host $hash = CB-A9-EB-00-92-18-06-71-D9-DD-7C-2A-08-D9-D9-EF
Set-Content $_.FullName('newroot/'+ $hash +'.tif')
}
这里的第一个问题是MD5之间有-
。那么我在这里做错了什么?
其次,为什么新文件没有写入文件系统?
非常感谢任何帮助!
答案 0 :(得分:1)
首先,这些破折号是.Context
的结果。如果需要,您可以删除它们。其次,如果您要复制文件,则应拨打[System.BitConverter]::ToString()
而不是Copy-Item
。像这样:
Set-Content