【问题标题】:forfiles with exec() and spaces in the path路径中带有 exec() 和空格的 forfiles
【发布时间】:2012-10-29 16:09:52
【问题描述】:

我正在尝试使用 exec() 中的 forfiles 递归地仅删除目录中的 sql 文件。

这就是我所拥有的:

$dir = date('D jS, M Y \a\t H-i a') ;

exec('forfiles /p "E:\Database Dump\\'.$dir.'\" /m *.sql /c "cmd /c del @file"') ;

但是,当我在命令提示符下运行我的 PHP 脚本时,它表示“@file”不是参数/有效选项。

我知道它一定与路径名中的空格有关(我认为!),我尝试不带引号运行它,用 / 和 ^ 转义空格,但没有任何乐趣。

我该怎么做?


这是一个回声:

forfiles /p "E:\Database Dump\Fri 9th, Nov 2012 at 10-36 am\" /m *.sql /c "cmd /c echo @file"

【问题讨论】:

  • 你是不是刚刚做了一个 print_r() of 'forfiles /p "E:\Database Dump\\'.$dir.'\" /m *.sql /c "cmd /c del @文件”'并查看它?
  • 您可以更轻松地使用for /f %f in ('dir $dir\*.sql /s/b') do del "%f" 执行相同操作——将$dir 替换为路径。根本不需要涉足forfiles 和额外的shell。

标签: php for-loop batch-file cmd exec


【解决方案1】:

一个更简单的方法就是

del dir\*.sql /f /q

或通过子目录递归使用/s 开关。

根本不需要forfiles

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-26
    • 1970-01-01
    • 2016-01-09
    • 2012-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多