我使用以下脚本在某些任务完成后清除一组文件夹。
@echo off
setlocal
:PROMPT
SET /P AREYOUSURE=Clearing folder! Are you sure? (Y/[N])?
IF /I "%AREYOUSURE%" NEQ "Y" GOTO END
echo
cd /d "P:\folder1\"
rd /s /q . 2>nul
cd /d "P:\folder2\"
rd /s /q . 2>nul
cd /d "P:\folder3\"
rd /s /q . 2>nul
:END
endlocal
问题是,、folder1
等内部有标识符文件和子目录folder2
需要保留在那里。
例如,有一个目录P:\folder1\.identifiersubfolder
,其路径为,其中有一个folder1
名为P:\folder1\identifier.file
这些文件和目录名称已设置,因此我不需要通配符。我需要一种方法来简单地设置要排除的文件和目录名称。我不知道 rd/rmdir 是否可以做到这一点。如果有其他命令可以使用,我愿意接受建议。
谢谢!
答案1
我可以通过Remove-Item –path P:\Testing\folder1\ -Recurse
在 PowerShell 中使用来解决此问题,并通过我的旧批处理文件调用它,而不是rd
。
我只是将要排除的项目设置为隐藏,而没有-Force
在 PS 脚本中使用 来阻止它删除这些项目。如果不使用-Force
,脚本就无权删除隐藏的项目。我的程序默认隐藏这些文件,因此在这种情况下可以正常工作。
谢谢你的建议。:)
答案2
这是针对您的问题的批量解决方案。
@Echo Off
SetLocal
:Prompt
Set /P AreYouSure=Clearing Folder! Are you sure? (Y/[N])?
If /I "%AreYouSure%" NEq "Y" GoTo End
Echo
ChDir /D "P:\Folder1\"
XCopy /E P:\Folder1\.IdentifierSubFolder\ P:\
Copy /Y P:\Folder1\Identifier.File P:\
RmDir /S /Q . 2>Nul
XCopy /E P:\.IdentifierSubFolder\ P:\Folder1\
RmDir /S /Q P:\.IdentifierSubFolder\
Copy /Y P:\Identifier.File P:\Folder1\
Erase /Q P:\Identifier.File
ChDir /D "P:\Folder2\"
XCopy /E P:\Folder2\.IdentifierSubFolder\ P:\
Copy /Y P:\Folder2\Identifier.File P:\
RmDir /S /Q . 2>Nul
XCopy /E P:\.IdentifierSubFolder\ P:\Folder2\
RmDir /S /Q P:\.IdentifierSubFolder\
Copy /Y P:\Identifier.File P:\Folder2\
Erase /Q P:\Identifier.File
ChDir /D "P:\Folder3\"
XCopy /E P:\Folder3\.IdentifierSubFolder\ P:\
Copy /Y P:\Folder3\Identifier.File P:\
RmDir /S /Q . 2>Nul
XCopy /E P:\.IdentifierSubFolder\ P:\Folder3\
RmDir /S /Q P:\.IdentifierSubFolder\
Copy /Y P:\Identifier.File P:\Folder3\
Erase /Q P:\Identifier.File
:End
EndLocal