Forfiles 命令:在目录路径中使用斜杠而不是反斜杠

Thr*_*rax 1 windows batch-file backslash

我的脚本用于删除超过n几天的日志文件。它在特定上下文(Spring 批处理)中调用,该上下文先前已初始化多个环境变量。

这是脚本的内容:

set DAYS = 3
forfiles /p %LOG_PATH% /s /d -%DAYS % /m *.* /c "cmd /c del @FILE"
Run Code Online (Sandbox Code Playgroud)

如您所见,我无法控制LOG_PATH. 它在别处初始化并包含一个带有斜杠(而不是反斜杠)的路径,例如:D:/DATA/LOGS

当我启动这个脚本时,我得到了这个错误: The directory name is invalid.

如果我手动用反斜杠写路径,则命令成功。

那么,是否可以将环境变量隔开以便命令接受斜杠?或者你将如何在运行时用反斜杠替换斜杠?

谢谢。

MC *_* ND 5

我会尝试

set "DAYS=3"
forfiles /p "%LOG_PATH:/=\%." /s /d -%DAYS% /m *.* /c "cmd /c del @PATH"
Run Code Online (Sandbox Code Playgroud)

在哪里

  • %LOG_PATH:/=\% 将执行斜杠到反斜杠替换。
  • 包含额外的引号以处理空格或特殊字符的问题。
  • 如果变量包含结尾斜杠,则末尾还有一个额外的点可以避免出现问题,该斜杠将转换为反斜杠并转义引号。
  • 变量%DAYS%定义更改为删除名称和值中的空格
  • forfiles /s要求递归搜索,并且@FILE只会检索文件的名称和扩展名,因此更改为@PATH以确保代码只会从当前活动目录中删除找到的文件。

如果您无法控制 的内容%LOG_PATH%并且不知道变量是否包含引号,则再次引用变量可能会导致更多问题。一个更安全的版本可能是

set "DAYS=3"
forfiles /p "%LOG_PATH:/=\%." /s /d -%DAYS% /m *.* /c "cmd /c del @PATH"
Run Code Online (Sandbox Code Playgroud)

在请求for命令引用的元素的完整路径时,删除变量中的引号(如果存在)并更正路径