특정 파일이 포함된 폴더를 삭제하고 다른 파일은 유지

특정 파일이 포함된 폴더를 삭제하고 다른 파일은 유지

삭제하고 싶은 폴더 모음이 있습니다. 이 모든 폴더에는 index.html.

예를 들어 이 폴더에는 다음 파일이 포함되어 있으므로 제거해야 합니다 index.html.c:\folder2\folder3\index.html

그러나 동일한 루트 폴더 아래에는 다음과 같은 허용된 파일이 포함된 폴더가 있습니다.c:\folder2\folder1\software.rar

그래서 모든 파일을 찾아 index.html상위 폴더를 변수로 유지하고 나중에 삭제하는 솔루션이 필요합니다.

이것을 테스트했는데 좋은 목록이 만들어졌지만 삭제가 작동하지 않습니다.

dir /ad /b /s %1 >list.txt for /f %%g in (list.txt) do if exist %%g\index.html rd /s /q %%g

답변1

윈도우 10 64비트. 파워셸 5.1

다음을 포함하는 디렉토리만 삭제index.html 테스트를 위해 데스크탑을 정리하세요. folder2데스크탑에는 이름이 지정된 디렉토리가 없어야 합니다 . folder2데스크탑에 이름의 디렉토리가 생성됩니다.

pushd $HOME\Desktop;ni -itemtype directory "folder2\folder3", "folder2\folder1">$null;ni -itemtype file "folder2\folder3\index.html", "folder2\folder1\software.rar">$null;explorer .\folder2;cls 
Read-Host "    
Test files have been created on your desktop. See explorer.
Press enter key to continue"    
Get-ChildItem .\folder2\*\index.html | ForEach-Object { 
  remove-item $_.directoryname -recurse
} 
explorer .\folder2;cls 
Read-Host "    
Directories containing index.html have been deleted. See explorer.
Press enter key to delete all test files"
ri (".\folder2") -recurse
popd 
# 

답변2

파워셸:

말 수가 많은:

$root = 'c:\TopLevel'
Get-ChildItem -path $root -filter index.html -File -Recurse | Select -expand Directory | Remove-Item -Recurse

짧은 버전:

$root = 'c:\TopLevel'
gci $root index.html -Recurse | select -expand directory | ri -Recurse

관련 정보