【问题标题】:How can I overwrite a file's "Date created" with its "Date modified" in Windows?如何在 Windows 中用“修改日期”覆盖文件的“创建日期”?
【发布时间】:2015-12-23 01:01:05
【问题描述】:

我有一个folder full of files,其日期修改时间正确,但日期创建时间不正确。我想将 dateCreated 文件属性设置为修改日期的时间。

我最接近我的解决方案的是一个批处理文件,它将日期修改时间设置为文件创建时间(https://stackoverflow.com/a/24951475/2780666),但我想做相反的事情。如果可能,我该怎么做?

【问题讨论】:

标签: file date batch-file command-line attributes


【解决方案1】:

假设您找到的脚本有效,我会尝试以下操作。

@if (@This==@IsBatch) @then
@echo off
rem **** batch zone *********************************************************

setlocal enableextensions disabledelayedexpansion
set "targetFolder=%~1"
if not defined targetFolder set "targetFolder=%cd%"

rem call javascript part of batch file
cscript //nologo //e:Javascript "%~f0" /startFolder:"%targetFolder%"

rem End of batch area. End batch execution before reaching js zone
endlocal
exit /b

@end
// **** Javascript zone *****************************************************

if (!WScript.Arguments.Named.Exists('startFolder')) {
    // if no start folder is given, leave
    WScript.Quit(1);
};

// retrieve start folder
var startFolder = WScript.Arguments.Named.Item('startFolder');

// instantiate needed components
var fso = WScript.CreateObject('Scripting.FileSystemObject');
var shell = WScript.CreateObject('Shell.Application');

// recursive function to set the ModifyDate to the CreationDate
(function processFolder( folderPath ){
    // test for valid paths
    folderPath = fso.GetAbsolutePathName((folderPath || '' ));
    if (!fso.FolderExists(folderPath)) return ;
    // retrieve a reference to the folder namespace
    var folderNS = shell.NameSpace(folderPath);
    // process files inside this folder
    for (var files = new Enumerator(fso.GetFolder( folderPath ).Files ); !files.atEnd() ; files.moveNext()){
        var file = files.item();
        WScript.StdOut.WriteLine( file.Path );
        folderNS.ParseName( file.Name ).DateCreated = file.ModifyDate;
    };
    // process files under child folders
    for (var folders = new Enumerator(fso.GetFolder( folderPath ).SubFolders); !folders.atEnd() ; folders.moveNext()){
        processFolder( folders.item().Path );
    };
})( startFolder );

WScript.Quit(0);

【讨论】:

  • 我已经尝试用 DateCreated 切换 ModifyDate,但它没有改变任何东西,但是当您将修改的日期更改为创建的日期时脚本可以工作。
  • 嗯,这很奇怪@Charles。您是否能够查看文件名并查看是否有 DateCreated 字段?
猜你喜欢
  • 1970-01-01
  • 2016-12-09
  • 2021-11-24
  • 2014-06-08
  • 2019-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-27
相关资源
最近更新 更多