1

ここでしばらく検索しましたが、うまくいく解決策が見つかりません。

以下を実行しようとしています (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 変数を使用せずに絶対パスを入力すると、スクリプトは機能します。

誰かが私が間違っていることを指摘できることを本当に望んでいます!

4

1 に答える 1

2

=insetコマンドの前後にスペースを入れることはできません。そこにスペースで終わる環境変数を作成しています。

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

が正しい方法になります。

于 2012-06-19T07:42:15.200 に答える