How can I change the timestamp on a file?

269,657

Solution 1

Due to William Jackson's answer, I found a similar question on Stack Overflow.

The accepted answer states to use Powershell and these commands:

$(Get-Item ).creationtime=$(Get-Date "mm/dd/yyyy hh:mm am/pm")
$(Get-Item ).lastaccesstime=$(Get-Date "mm/dd/yyyy hh:mm am/pm")
$(Get-Item ).lastwritetime=$(Get-Date "mm/dd/yyyy hh:mm am/pm")

Edit

Two examples:

(This one is from the comments:) Set the last-access time for a file aaa.csv to the current time:

$(Get-Item aaa.csv).lastwritetime=$(Get-Date)

Set the creation time of a file foo.txt to November 24, 2015, at 6:00am:

$(Get-Item foo.txt).creationtime=$(Get-Date "11/24/2015 06:00 am")

Solution 2

See the answers to this question.

Specifically, this can be done natively with:

copy /b filename.ext +,,

This will set the timestamp to the current time.

Documentation for the copy command is on TechNet.

The commas indicate the omission of the Destination parameter.

Solution 3

Nirsoft to the rescue: try the freeware tool nircmd. It's a bunch of useful tools in one small command line program. One of the commands allows you to specify either or both of created time and modified time, like this:

nircmd.exe setfiletime "c:\temp\myfile.txt" "24-06-2003 17:57:11" "22-11-2005 10:21:56"

Solution 4

Using Cygwin, to set the timestamp of test.txt to January 31, 2000, at 00:01.00:

touch -t 200001310001.00 test.txt

Solution 5

Check out the following webpage: http://www.stevemiller.net/apps/

The Win32 Console Toolbox contains a utility called 'touch' that lets you modify the times on one or more files. I believe it only works with US format times, though.

Share:
269,657

Related videos on Youtube

Joe Hansen
Author by

Joe Hansen

Updated on September 18, 2022

Comments

  • Joe Hansen
    Joe Hansen almost 2 years

    Possible Duplicate:
    How to modify timestamp in a dll or exe?
    Windows equivalent of the Linux command 'touch'?

    How can I set the timestamp for a file via the command-line to a specific date?

    My specific situation is Windows 7.

    • William Jackson
      William Jackson about 13 years
      You should probably clarify your question and state that you want to choose the new timestamp. The two current answers assume you are looking for a Windows port of the Unix command touch that sets a files's timestamp to the current time.
    • William Jackson
      William Jackson about 13 years
      I've looked through Sysinternals, and I'm pretty sure they don't have a utility for this. You should try the programs linked to from superuser.com/questions/135901/…
    • Joe Hansen
      Joe Hansen about 13 years
      @William Jackson Changed, thanks for that. Also, if it truly was a port of the Unix command touch, I could specify the date. en.wikipedia.org/wiki/Touch_(Unix). Something is wrong with the auto linking though, make sure you get both parentheses.
    • William Jackson
      William Jackson about 13 years
      I ... can't believe I never bothered to read man touch. You have taught me something new.
    • Scott - Слава Україні
      Scott - Слава Україні over 8 years
  • Joe Hansen
    Joe Hansen about 13 years
    Can you explain how that is working? What is the +,,? How do I know what date it is being set to?
  • William Jackson
    William Jackson about 13 years
    @josmh Check the documentation link for details. The timestamp gets set to the current time when you run the command. Are you implying that you want to be able to change the timestamp to an arbritary time of your choosing?
  • Joe Hansen
    Joe Hansen about 13 years
    I'm not seeing how that helps me choose a new date for the file?
  • codybartfast
    codybartfast almost 13 years
    A slight variation that is recursive and a little shorter, though less readable: "gci -rec | %{ $_.lastWriteTime = ($_.lastAccessTime = ($_.creationTime = (get-date "2011-09-14T07:10:00"))) }"
  • ziggy
    ziggy about 11 years
    This comes back with invalid date format error.
  • sjbotha
    sjbotha almost 11 years
    For people that don't know much about Powershell, you have to put the filename after Get-Item. You can also omit the string after Get-Date to set the attribute to the current date/time like the default behavior of the touch command. Finally you can pass that code as an argument to the powershell command to have it just execute that from an existing batch file. Example: powershell $(Get-Item aaa.csv).lastwritetime=$(Get-Date)
  • Joe Hansen
    Joe Hansen about 9 years
    @ziggy make sure you get all the zeros...
  • JasonXA
    JasonXA about 9 years
    Also if you want to transfer time from a file to another, clonefiletime filefrom fileto works best!
  • CodyBugstein
    CodyBugstein almost 8 years
    What if I want to do this for every file in a directory?
  • Joe Hansen
    Joe Hansen almost 8 years
    Search for "Powershell every file". You might find questions like these: stackoverflow.com/q/16804265/756329 and stackoverflow.com/q/181036/756329
  • SebastianH
    SebastianH over 7 years
    This worked perfectly for me touch -t 201608221400 filename to set it to 22.08.2016 14:00:00.
  • Kasey Speakman
    Kasey Speakman almost 7 years
    Main problem with this is when the file is not in current directory... it will copy the file to current directory instead of "touching" it in place.
  • SaAtomic
    SaAtomic over 6 years
    Non-commandline, but more convenient for bulk editing: BulkFileChanger by Nirsoft
  • Martin Argerami
    Martin Argerami over 6 years
    The date and time format is not as per the command, but the system wide one (so, in my system, it was dd/mm/yyy).
  • Tydaeus
    Tydaeus about 6 years
    @KaseySpeakman - this command relies on being in the current directory. Use pushd FILEDIR, before the comand and popd after
  • Tydaeus
    Tydaeus about 6 years
    @JosephHansen This works by copying the file over itself, resulting in the file counting as having been modified "now"
  • Tydaeus
    Tydaeus about 6 years
    FYI, "optimizations" in Vista+ means that, depending on context, the timestamp may not get updated as expected. It appears to work fine if this is the only command you run, but if your script does more, the timestamp may be left untouched.
  • Matthieu Rouget
    Matthieu Rouget over 3 years
    For every file in directory : Get-ChildItem -File | foreach { $_.CreationTime=$(Get-Date) }
  • Admin
    Admin about 2 years
    Exactly what I needed for a quick file change. In my case, had new files to add, wanted to use originals as template. Copied modified files to another folder, added and overwrote to the current folder, then used this command to update all the dates on the file copies I had saved out. Now I'll know which I edited and which I hadn't.
  • Admin
    Admin about 2 years
    How do you set creation time of one file to creation time of another file? How do you do it in a batch?