【问题标题】:How to clear but not delete all files in all subfolders with exception of the batch file?如何清除但不删除除批处理文件外的所有子文件夹中的所有文件?
【发布时间】:2015-04-23 08:36:08
【问题描述】:

我已经有了这个批处理代码:

@echo off
setlocal
:PROMPT
SET /P AREYOUSURE=Are you sure (Y/[N])?
IF /I "%AREYOUSURE%" NEQ "Y" GOTO END
@echo off
pushd %*
for %%j in (*) do if /I not "%%j"=="%~nx0" type nul > "%%j"
popd

我想为所有子文件夹中的所有文件创建一个 0 字节备份。因此,如果我丢失了它们,我会知道要重新下载什么。批处理文件本身不应被清除。

必须对此代码进行哪些更改才能在所有子文件夹中的所有文件上运行?

【问题讨论】:

  • 你想清除所有子文件夹中的所有文件,但不改变蝙蝠本身,对吧?
  • 是的,我确实这样做了,我想创建一些文件的 0 字节备份,所以如果我丢失了它们,我会知道要重新下载什么..

标签: batch-file subdirectory


【解决方案1】:

FORFILES 是你的朋友!语法是:

forfiles [/p <Path>] [/m <SearchMask>] [/s] [/c "<Command>"] [/d [{+|-}][{<Date>|<Days>}]]

/s 选项将使您的脚本查看子文件夹。这应该有效:

@echo off
setlocal
:PROMPT
SET /P AREYOUSURE=Are you sure (Y/[N])?
IF /I "%AREYOUSURE%" NEQ "Y" GOTO END
FORFILES /S /C "CMD /C IF @ISDIR==FALSE IF NOT @FILE==\"%~nx0\" type nul > @PATH"

FORFILES 构造中可能的变量有:

  • @FILE:文件名。
  • @FNAME:没有扩展名的文件名。
  • @EXT:文件扩展名。
  • @PATH:文件的完整路径。
  • @RELPATH:文件的相对路径。
  • @ISDIR:如果文件类型是目录,则评估为 TRUE。否则,此变量的计算结果为 FALSE。
  • @FSIZE:文件大小,以字节为单位。
  • @FDATE:文件上的最后修改日期戳。
  • @FTIME:文件的最后修改时间戳。

更多信息请查看https://technet.microsoft.com/en-us/library/cc753551.aspx

编辑:添加了跳过 if 文件夹

【讨论】:

  • 编辑了跳过文件夹的答案。
  • 非常感谢 MichaelS 真的很有帮助!!
  • 不客气。我将不胜感激并“接受解决方案”:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多