【问题标题】:Syntax/Script to only select files created %date% (today) for batch file?语法/脚本仅选择为批处理文件创建%date%(今天)的文件?
【发布时间】:2018-10-18 17:56:06
【问题描述】:

创建了一个批处理文件以进入我们今天创建的特定目录中的 AutoCAD '.scr' 文件。我不确定是否要做我需要的,如果我必须使用 FORFILES 代替。该代码有效,但不适用于今天创建的文件。

我试过提出诸如之类的论点

(%~ti :: FindSTR %DATE%)

并按照 cmets 中的建议:

ECHO %~ti |FindSTR %DATE% && (echo today) || (echo other day)

在查找要打开的文件时尝试为 FOR 命令指定日期并查找要替换为 OPEN Y.open,但我不确定语法或我可以将它添加到脚本的地方。

脚本似乎会进入所有文件并保存,即使文本不需要更改,但将其更改为仅更改今天创建或最后修改的文件将防止这种情况发生。

 @echo off 
 setlocal enableextensions disabledelayedexpansion

 FOR /R "V:\PPY005\CSC\Script Maker" %%S in (*.scr) DO (
    for /f "delims=" %%i in ('type "%%S" ^& break ^> "%%S" ') do (
         set "line=%%i"
         setlocal enabledelayedexpansion
         >>"%%S" echo(!line:.open=open y!
         endlocal
     )

 )

我需要它仅适用于今天创建的文件,因为它会在我们手动加载这些文件时造成一些混乱,如果加载标题中注明日期的文件,例如 9-10-IMP-EM.scr并出现在顶部,就好像它是为今天创建/修改的一样。

我需要列出的目录,因为此批处理不会位于正在更改的文件的根目录中,并且脚本正在该特定文件类型的目录中查找文件,我们更喜欢将脚本放在特殊目录中并仅引用它们来自该网络位置,例如从文档打开链接位置或使用批处理文件,该文件将有一个菜单来选择和运行中引用的特定批处理文件(不需要帮助,我知道该怎么做)

我有点担心这个问题,因为我在网上找不到有关如何使用 FOR 命令执行此操作的文档。可以说我是批处理文件的初学者,我在这一点上写了几个,但我不知道该怎么做。

我知道通过 Powershell 可能更容易做到这一点,但我工作的公司出于安全原因不允许我们使用 Powershell。

【问题讨论】:

  • 请不要删除和转发问题。如果您有新信息要添加到您的问题中,请在其中进行编辑。
  • 第一行的语法是:echo %~ti |FindSTR %DATE% && (echo today) || (echo other day)
  • @Stephan 我究竟是如何实现的?将其作为使脚本崩溃的第一行。我该把这个论点放在哪里?
  • 好吧,%~tifor 命令的伪变量,因此将它放在for 循环中是有意义的。请参阅for /?SS64
  • @Stephan 我的 %date% 变量与 t 修饰符输出的日期不匹配,因为 date 变量还输出星期几。但我知道你要去哪里。如果您可以将它们放入一个公共变量中,那么比较它们会很容易。

标签: windows batch-file command


【解决方案1】:

您可以使用FORFILES 命令根据日期选择文件。然后,您可以使用 FOR /F 命令解析 FORFILES 命令的输出,然后将其直接嵌套到您的原始代码中。

@echo off 
setlocal enableextensions disabledelayedexpansion

FOR /F "delims=" %%G IN (
    'FORFILES /P "V:\PPY005\CSC\Script Maker" /M *.scr /D +0 /C "cmd /c echo @path"'
) DO (
for /f "delims=" %%H in ('type "%%~G" ^& break ^> "%%~G" ') do (
    set "line=%%H"
    setlocal enabledelayedexpansion
    >>"%%~G" echo(!line:.open=open y!
    endlocal 
)
)

【讨论】:

  • 我遇到了一些错误在批处理脚本 x2 之外调用批处理标签的尝试无效(这个在 :Process @Path 之后发生了两次)并且它没有更改文件中的文本。我试过了它正是你拥有它的方式,但它没有工作,然后我将其更改为使用我已经为批处理实用程序提供的正确 GOTO 命令。0bin.net/paste/… 另外,这个批处理将每天使用,是否可以使用 %DATE%而不是静态的日期 ID 必须每天更改?
  • id 想补充一点,我将路径更改为测试这个,这就是为什么链接有引用不同路径的代码。并且在我正在测试的任何文件中都找不到任何文件或将 .open 更改为 Open Y。在我关闭“)”之后,它还说无效的参数/选项 - ':进程',我注意到它在代码中是打开的。
  • @Daggerfella,我忘记了 FORFILES 命令的限制。您不能直接对标签执行CALL,因为它无权访问父进程。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-17
相关资源
最近更新 更多