Windows版Unix touch命令从文件名部分修改文件的修改日期

时间:2014-06-05 14:22:03

标签: windows bash shell batch-file timestamp

我有 bash脚本,它会遍历当前目录中的文件并从文件名中提取日期部分,然后使用( Unix)touch命令将该文件的修改日期mtime)修改(或更新)到此日期。

文件名示例

Electric company name - bill - 2014-03-22.pdf

Bash脚本:

我将此bash脚本保存为_save_file_mtime_from_filename.sh(向其添加chmod +x)并放入我想要更改文件修改时间的目录。然后从命令行运行它。

#!/bin/bash
CURRENT_DIR=$(dirname $_)
cd $CURRENT_DIR

for f in *
do
    # Strip the file extension
    d=${f%.*}

    # Strip the last 10 characters
    d=${d:${#d}-10}

    # Check the format / mask
    if [[ $d = ????-??-?? ]] ; then
        # Strip the dash
        d=${d//-}

        # Run `touch` on the file with the extracted date format
        # and add `0000` to the file date
        touch -t ${d}0000 "$f"
    fi
done

现在我正在搜索此脚本的Windows版本

我搜索网络(和Stackoverflow)。找到了一些相关问题,例如https://stackoverflow.com/questions/51435/windows-version-of-the-unix-touch-commandhttps://superuser.com/questions/251470/windows-recursive-touch-command/251507#251507

是否有人对使用_save_file_mtime_from_filename.bat可执行版本的 Windows版有任何想法,而该版本的内容基本相同?

通过稍微调整和帮助(Mac)Automator操作保存为“应用程序”,您甚至可以通过鼠标右键(https://discussions.apple.com/thread/5287944?start=15&tstart=0)在Mac Finder中触发此脚本。甜!

2 个答案:

答案 0 :(得分:0)

安装Cygwin,或从GnuWin32UnixUtils安装二进制文件

答案 1 :(得分:0)

我同意@konsolebox。只需安装Cygwin,就可以无需更改即可运行脚本。

但是,如果你不想走那条路,你应该可以安装" coreutils"来自GnuWin32。 Coreutils包含" touch"等等。编写DOS批处理文件来模拟上面写的内容可能会有点痛苦。对我来说看起来很棘手的部分是[[ $d = ????-??-?? ]]。您必须做一些与之相匹配的创意,可能使用grep,您可以从同一页面获取。现在你要安装一些东西,然后做很多工作。安装Cygwin会更容易。