【问题标题】:get last modified date of file with strawberry perl on windows [closed]在Windows上使用草莓perl获取文件的最后修改日期[关闭]
【发布时间】:2017-12-20 06:04:58
【问题描述】:

我需要使用 perl 脚本获取文件上次修改时间的信息 相关代码如下:

#where $file equals "MyFile.txt"
$backslash = "\\";
$upTwoLayersHelper = "..$backslash..$backslash";
@fileInfo = qx(forfiles /M $file /P $upTwoLayersHelper /C "cmd /c echo @fdate @ftime");

qx 是 perl 中的一个函数,允许执行系统命令并将输出重定向到变量

我已经研究过使用stat 并且一直返回

Dec 31 of like 1960

所以this 对我不起作用:/

我使用变量 $backslash 和 $upTwoLayersHelper 来构建“安全”路径,因为 Windows 喜欢使用 \ 而不是 /,并且我测试以确保变量在 qx(...here.. .) 函数调用。

我的问题是我得到的唯一输出是

ECHO is on.

当我打印 @fileInfo 变量时

BUT 当我在 perl 的 qx(...) 函数调用 outside 中运行相同的命令时,并且只是从命令行批量作为命令它有效并返回正确的日期信息

我在 perl 脚本中做错了什么?

感谢您的宝贵时间!

【问题讨论】:

  • 您是否尝试使用file test 修改时间_ -- $mod_days = -M $file ?此外,模块Win32API::File::Time 应该会有所帮助。
  • 您确实提到了stat,但以防万一:您是否将(stat $file)[9] 用于mtime? (ctime 在 Windows 上无法正常工作。)
  • 澄清一下——-M 使用了stat 调用,但你所说的尝试它很奇怪。 stat 时间相关字段以秒为单位自纪元,开始 1970年。你如何得到一个日期“像1960年”那? -M 以天为单位返回时间,检查起来更加清晰。

标签: windows perl batch-file command-line


【解决方案1】:
@fileInfo = qx(for %x in ($file) do echo %~tx);

也许?

用于此类目的的cmd 命令是

for %x in (filename) do echo %~tx

(将文件名分配给元变量%x,然后echo该文件的[修改]日期)

如果在批处理中而不是从提示符中执行,% 必须是 %%。

ECHO is on. 是不带参数的 echo 语句的特征。

我不确定two directories 更高的想法是什么,但如果这是您的目标文件所在的位置,您需要在filename 前面加上..\..\

也许

qx(echo %* whatever)

whatever 是您提议的cmd 命令将产生cmd 在所有转义字符解析后收到的内容(%* 表示“所有提供的参数”)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-26
    • 2018-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-16
    相关资源
    最近更新 更多