为每个文件创建零字节文件,并在末尾附加扩展名

时间:2016-02-28 00:45:27

标签: powershell powershell-v2.0

我希望这可以递归每个目录,并为每个文件创建一个零字节文件,使用与添加了扩展名.xxx的文件相同的名称。我在想New-Item在这里使用会很好,但我似乎无法让它正常工作。

以下是我在PS版本2中尝试过没有成功的内容:

$drivesArray = Get-PSDrive -PSProvider 'FileSystem' | select -Expand Root 
foreach ($drive in $drivesArray) {
  ls "$drive" | where {
    $_.FullName -notlike "${Env:WinDir}*" -and
    $_.FullName -notlike "${Env:ProgramFiles}*"
  } | ls -ErrorAction SilentlyContinue -recurse | where {
    -not $_.PSIsContainer -and
    $_.Extension -notmatch '\.xxx|\.exe|\.html'
  } | New-Item -Path { $_.BaseName } -Name ($_.FullName+".xxx") -Type File -Force
}

错误
  

无法找到接受参数“+ xxx”的位置参数。

1 个答案:

答案 0 :(得分:1)

您需要在Get-ChildItem语句中包含第二个lsNew-Item)和ForEach-Object。另外,请勿将$_.Basename作为New-Item的路径传递。这样做是这样的:

New-Item -Path ($_.FullName + '.xxx') -Type File -Force

或者像这样:

New-Item -Path $_.Directory -Name ($_.Name + '.xxx') -Type File -Force

修改后的代码:

foreach ($drive in $drivesArray) {
  Get-ChildItem $drive | Where-Object {
    $_.FullName -notlike "${Env:WinDir}*" -and
    $_.FullName -notlike "${Env:ProgramFiles}*"
  } | ForEach-Object {
    Get-ChildItem $_.FullName -Recurse -ErrorAction SilentlyContinue
  } | Where-Object {
    -not $_.PSIsContainer -and
    $_.Extension -notmatch '^\.(xxx|exe|html)$'
  } | ForEach-Object {
    New-Item -Path ($_.FullName + '.xxx') -Type File -Force
  }
}