使用forfiles命令传递变量

时间:2012-06-19 07:34:40

标签: variables batch-file

我在这里搜索了一段时间但找不到有效的解决方案。

我正在尝试运行以下命令(test.bat):

SET CURRENT_DATE=%date:~6,4%_%date:~3,2%_%date:~0,2%
SET DOCSRC = "C:\scripts\e2Vault\docdata"
SET DOCSTAGING = "C:\Scripts\e2Vault\staging"
SET LOGFILE = "C:\Scripts\e2Vault\log files"
SET DOCPROCESS = "C:\scripts\e2Vault\process"
SET DOCREMOVED = "C:\scripts\e2Vault\removed"

forfiles /p "%DOCSRC%" /m *.drd /d -547 /c "cmd /c echo @path && Move @file "%DOCSTAGING%"" >> %LOGFILE%\e2Vault_archive_%CURRENT_DATE%.log

但它在没有移动文件或记录的情况下给了我以下输出:

C:\scripts\e2Vault>forfiles /p "" /m *.drd /d -547 /c "cmd /c echo @path && Move @file """  1>>\e2Vault_archive_2012_06_19.log
ERROR: Value for '/p' option cannot be empty.
Type "FORFILES /?" for usage.

我尝试在各种配置中使用“”和“”,但我尝试的每一个都只显示变量所在的引号。

你可能会看到我正在测试这个,但变量的实时系统路径中有空格,所以我需要让它工作。

如果我不使用SET变量并输入绝对路径,则脚本可以正常工作。

真的希望有人可以指出我做错了什么!

1 个答案:

答案 0 :(得分:2)

=命令中的set周围不能有空格。你在那里用空格创建环境变量。

SET CURRENT_DATE=%date:~6,4%_%date:~3,2%_%date:~0,2%
SET DOCSRC=C:\scripts\e2Vault\docdata
SET DOCSTAGING=C:\Scripts\e2Vault\staging
SET LOGFILE=C:\Scripts\e2Vault\log files
SET DOCPROCESS=C:\scripts\e2Vault\process
SET DOCREMOVED=C:\scripts\e2Vault\removed

将是正确的方法。