仅删除 ASP 文件

仅删除 ASP 文件

我正在尝试编写一个 Windows 批处理脚本文件来删除只是.asp 文件。

如果我做:

del *.asp /s

这会产生副作用,即删除所有扩展名为 .aspx 的文件。这很糟糕,因为我想保留扩展名为 aspx 的文件。

有没有什么方法可以解决这个问题,而不需要安装自定义应用程序?

答案1

这似乎在 Vista 上有效:

for %i in (*.asp) do @if not %~xi==.aspx del %i

了解更多信息

help for

变量有各种类型的修饰符:

此外,FOR 变量引用的替换功能也得到了增强。现在您可以使用以下可选语法:

%~I         - expands %I removing any surrounding quotes (")
%~fI        - expands %I to a fully qualified path name
%~dI        - expands %I to a drive letter only
%~pI        - expands %I to a path only
%~nI        - expands %I to a file name only
%~xI        - expands %I to a file extension only
%~sI        - expanded path contains short names only
%~aI        - expands %I to file attributes of file
%~tI        - expands %I to date/time of file
%~zI        - expands %I to size of file
%~$PATH:I   - searches the directories listed in the PATH
               environment variable and expands %I to the
               fully qualified name of the first one found.
               If the environment variable name is not
               defined or the file is not found by the
               search, then this modifier expands to the
               empty string

答案2

我怀疑是因为 del 是一个 DOS 老式命令,它不能理解长度超过 3 个字符的扩展名。

我能看到几种解决方案,其中只有一种你会喜欢,但没有一种能满足你的确切要求:

  • 手动运行并添加 /p 开关以提示并跳过 aspx 文件
  • 安装电源外壳(假设您使用的是 XP 或更高版本),它应该能够以更细粒度的方式迭代文件。我不是 powershell 专家,但这可能是最好的选择,因为它至少是一个 Windows 组件,而不是自定义应用程序
  • 安装 GNU查找工具核心工具然后像在 unix 上一样删除文件:“find directoryname -name '*.asp' | xargs rm”。优点:它会起作用。缺点:它绝对是自定义的
  • 如果你已经在机器上安装了 Perl、C 或 Java,那么可以用它们编写一些代码,来执行与在 powershell 中相同的操作

答案3

Powershell 将执行此操作。虽然dir -r *.asp将匹配*.aspx,但您可以轻松优化输出:

dir . -r -inc *.asp

使用-include来匹配 PSH 中的通配符,而不是-filter(通常更快)与 Win32 API 匹配(与 的结果相同cmd.exe)。

您可能只想删除文件,因此,为了进行测试:

dir . -r -inc *.asp | ?{-not $_.PSIsContainer} | del -whatif

使用-whatif仅列出将要发生的事情。使用-confirm提示配置文件删除。在脚本中使用时避免使用别名,但列出已完成的操作:

Get-ChildItem -path . -recurse -include *.asp | 
  Where-Object {-not $_.PSIsContainer} |
  Remove-Item -Verbose

相关内容