以下Powershell脚本按扩展名将文件排列在适当的目录中。 我要做的是首先在目标文件夹中找到所有唯一的扩展名,并为所有这些扩展名叫copy,但在Windows上不起作用。我为Windows使用了正确的路径。
当前正在创建文件夹,但文件没有从源文件夹复制到目标文件夹。
$source = "/home/shubham/ps/" #location of starting directory
$destination = "/home/shubham/ps/check"; #location where files will be `copied to`
$extensionArray = @(Get-ChildItem ($source) |
Select-Object Extension |
Sort-Object Extension |
Get-Unique -AsString)
echo ($extensionArray[3])
[string[]]$l_array = ($extensionArray | Out-String -Stream) -notmatch '^$' |
select -Skip 2
for ($i=0; $i -lt $extensionArray.Length; $i++) {
$x = $l_array[$i]
$ext = "*" + "$x"
#foreach ($x in $extension_array){
echo ("*" + ($x))
$newsrc = ($source) + "/" + ($ext)
$files = @("", "*" + ($x)) #edit .xlsx to your desired extension
$outputPath = ($destination) + "_" + ($x)
New-Item -ItemType Directory -Force -Path ($outputpath);
Copy-Item -Path $newsrc -Filter ($ext) -Destination $outputPath -Container
}
echo "end"
答案 0 :(得分:0)
如有疑问,请阅读documentation(强调我的意思):
-路径
将要复制的项目的路径指定为字符串数组。
类型:字符串[]
位置:1
默认值:无
接受管道输入:True(ByPropertyName,ByValue)
接受通配符:False
/home/shubham/ps/*.docx
不支持诸如Copy-Item
之类的平均路径。它可能在Linux上有效,因为外壳程序已经在Copy-Item
之前将通配符扩展到绝对路径列表。
更不用说您的代码过于复杂。这样的东西就足够了:
$src = '/home/shubham/ps/'
$dst = '/home/shubham/ps/check'
$files = Get-ChildItem $src
$files |
Select-Object -Expand Extension -Unique |
New-Item -Path $dst -Name {'_' + $_.TrimStart('.')} -Type Directory |
Out-Null
$files | Copy-Item -Destination {Join-Path $dst ('_' + $_.Extension.TrimStart('.')} -Container