【问题标题】:Batch delete files in variable批量删除变量中的文件
【发布时间】:2021-03-07 07:46:12
【问题描述】:

我有一个批处理文件,它通过目录树搜索删除生成的文件备份。

我想编辑脚本以针对在搜索中找到的文件运行 del 命令,但我无法让它工作。

我搜索了其他线程并进行了类似的设置,但没有得到预期的结果。

@echo off
pushd FILEPATH
echo Searching directories...
for /f "delims=" %%G in ('dir /b /s *.0**.rfa') do echo "%%G"
echo.
IF /I "%%G" == "" GOTO NOTFOUND 
set /P delete="Delete files? [Y/N]: "
IF /I "%delete%" NEQ "Y" GOTO ENDOF
echo Deleting files...
echo.
del "%%G"
echo.
echo Done!
timeout 5
exit

:ENDOF
echo Aborted.
timeout 5
exit

:NOTFOUND
echo Found nothing.
timeout 5
exit

结果:

Deleting files...

Could Not Find FILEPATH\ %G
 
Done!

【问题讨论】:

  • FOR 变量是 FOR 命令本身的本地变量。一旦您在FOR 命令执行之外,您就不能再使用该变量。如果您需要使用FOR 命令执行多个命令,请在它们周围使用左括号和右括号。 for /f "delims=" %%G in ('dir /b /s *.0**.rfa') do ( ...all your commands....) 命令可以多行。关键是使用括号。
  • 通配符* 表示“任意数量的字符”。 ** 没有意义(“任意数量的字符后跟任意数量的字符”==“任意数量的字符”)
  • @Squashman 你能不能不为整个脚本建立一个变量而不是将所有内容都添加到循环中?
  • @Stephan 是的,我也意识到了这一点......谢谢
  • “你不能为整个脚本建立一个变量吗” - 让我用一个非常小心yes来回答这个问题

标签: batch-file directory del


【解决方案1】:

你真的需要for 循环吗?以下应该完全按照您的意愿工作:

@echo off
dir /b /s "*.0*.rfa" || echo Found nothing. & goto :finish
choice /m "delete all? "
if errorlevel 2 echo Aborted. & goto :finish
echo Deleting files...
del /q /s "*.0*.rfa"
echo Done.
:finish
timeout 5
exit /b

【讨论】:

  • 我将文件掩码设置为一个变量(例如,filemask),然后使用该变量来避免并行维护。
  • 我真的是个新手,但这基本上是我的原始脚本的优化版本,我在其中运行 del 命令,就像在您的示例中一样?该库非常大,可能需要很长时间才能搜索,这就是为什么我只想将 del 命令传递给在 dir 中找到的文件,以避免两次搜索整个库。
  • hm - dirdel 都必须遍历整个树(因此需要类似的时间)。您期望有多少个匹配文件?如果只有“几个”(与所有文件的总和相比),类似数组的变量(请参阅我对您问题的最后评论中的链接)可能是一个解决方案。或者(可能以相同的速度):dir ... >files.txttype files.txtchoice...for /f "delims=" %%a in (files.txt) do del ...。在不事先显示文件的情况下,我希望纯 del /s /q ... 是最快的解决方案。
  • 当我到达 del 我得到“系统找不到文件类型。”。我还怀疑我在这里会遇到瑞典字符的问题,查看 files.txt 特殊字符的格式不正确。但是,如果我输入 files.txt 输出是正确的。也许先做 dir 然后再做 del 并接受更长的处理时间会更容易。
  • 您是否记得将dir/b/a-d 开关一起使用?检查文件是否仅包含完全限定的文件名(没有标题、摘要或日期/时间戳和大小)。瑞典语字符的问题不应该发生(只要您使用相同的代码页 (chcp /?) 编写和阅读)
猜你喜欢
  • 2013-04-22
  • 2013-02-17
  • 1970-01-01
  • 2014-01-19
  • 1970-01-01
  • 2015-05-26
  • 1970-01-01
  • 2016-02-07
  • 1970-01-01
相关资源
最近更新 更多