소프트웨어 명령줄로 파일의 수정한 날짜 바꾸는 유틸리티 아시는 분 계신가요
2022.11.10 14:38
안녕하세요?
배치 파일로 사용할 생각입니다.
c:\>set_filetime a.txt /m 2022-11-2 17:31:23
라고 명령을 내리면
a.txt 파일의 수정한 날짜를 2022-11-2일 오후 5시 31분 23초 설정해주는 간단한 유틸이 어디 없을까요?
매번 특정 파일의 수정한 날짜를 지정해줄 필요가 있어서 구해봅니다.
검색해보니 브라우저에서 파일 불러오고 수정 날자를 지정하고 작업 명령을 내래면 고쳐주는 것들은 있는데,
저는 배치 명령 하나면 클릭하면 파일들이 좌악 수정 날짜를 바구고 싶습니다.
개인적으로 이게 왜 필요하냐 하면, 윈도우 10에서 사용자가 폴더의 아이콘 정렬 순서를 임의로 지정할 수가 없어서
저는 폴더의 아이콘을 수정한 날짜 순으로 정렬하게 하고, 그 아이콘의 수정 시각을 임의로 변경하여
아이콘을 정렬시킵니다.
이제까지 토탈 커맨더를 이용하여 수정 시각을 변경했는데, 폴더의 파일이 업데이트될 때마다 수정 시각이 변경하며
아이콘 정렬 순서도 뒤죽박죽이 되어 버립니다.
이런 때 사전에 작성한 배치 파일로 내가 원하는 시각으로 변경하면, 아이콘 정렬 순서가 제가 정한 대로 돌아가겠지요.
프로그램 짜시는 분이라면 금방 짤 수도 있긴 한데... 저는 몇 년 손을 놓아서 다시 머리 싸매기는 싫고,
이런 유틸리티 구하는데 찾지를 못하네요.
댓글 [5]
-
메리아 2022.11.10 16:25
-
컨피그 2022.11.11 18:18
cmd 명령줄에서 아래처럼 명령어 입력했는데요
저는 구문오류 뜨고 잘 안되네요..
제세히 다시 알려주실 수 있나요?
powershell (Get-Item "C:\test.pdf").LastWriteTime=("2022-11-11 11:11:11")
-
메리아 2022.11.12 09:32
설명을 할까하다가 너무 댓글이 길어진 상황이고,
실행방식의 기본방법에 해당하는 사항이라 기초부터 다 설명할 수는 없어서 대충 알아서들 하시겠지 싶었는데
결국 설명을 하는게 좋을 뻔 했나보네요.
"파워셸창"에서 실행할때 ( 프롬프트가 PS 경로> 이렇게 표시될때 )
(Get-Item "경로").LastWriteTime=("날짜시각")
"cmd창"에서 실행할때 ( 프롬프트가 경로> 이렇게 표시될때 )
powershell (Get-Item \"경로\").LastWriteTime=(\"날짜시각\")
보다시피 일반 배치파일 및 cmd에서는 반드시 따옴표 앞에 \를 넣어줘야합니다.
안 그러면 정확하게 인식 못해서 제대로 실행되지 않습니다.
쓰신거 보니 딱 이 문제 같네요.
그리고 이건 제가 짐작하는 부분이라 바로 설명이 나온거지
에러가 나오면 에러메시지 보여주지 않으시면 무슨 문제인지 알기 어렵습니다
다음에 이런거 문의하실때는 에러메시지도 꼭 포함 바랍니다. ^^
(오히려 지금도 다른 문제일지는 모르겠지만, 쓰신거 보니 이거 맞는거 같네요.)
-
컨피그 2022.11.13 21:30
감사합니다~
알려주신 방법으로 파워쉘 및 cmd 명령줄에서 잘 되는거 확인했습니다
간단한 문제였는데 헤맸네요..
-
봄빛깔 2022.11.10 18:50
감사합니다. 파워셀을 이용하니 아주 잘 되네요. 그리고 추가한 소스도 프로그램 짜거나 유틸 만드는 분에게 아주 유용할 것 같습니다. 저는 파워셀을 이용하여 배치 파일 만들고 파일 업데이트될 때마다 실행하여 수정 시각을 고정시킬 생각입니다.
찾아보니 파워셸 쓰면 아주 간단하네요.
파일도 폴더도 다 처리해줍니다.
powershell (Get-Item \"경로\").LastWriteTime=(\"2022-11-10 11:11:11\")
이런식으로 쓰면 됩니다.
이걸 여태 몰랐다니... ㅠㅠ
(다만 앞서 언급한대로, 폴더가 뭔가에 묶이는건 답이 없습니다. 그 경우에는 똑같이 실패하네요.
재부팅하고 백신끄고 다시해야하나... ㅡ.ㅡ)
참고 : https://www.winhelponline.com/blog/change-accessed-modified-created-file-date-timestamp-windows/
제가 쓴 아래는 다 쓸데 없습니다.
다만 일단 썼는데 지우긴 아깝고, 그래도 참고하실분 있을 수 있으니 남겨둡니다.
---------------------------------------------------------------------------------------------------------------------------------------------
저도 예전에 같은 고민으로 만든거 있습니다만,
어째 지금 테스트해보니 될때는 되고 안될땐 안되고 그러네요.
대충 폴더가 뭔가에 묶여 있는 것으로 보이는데, 해법을 모르겠군요.
일단 잘 안되지만 파일은 첨부합니다.(파일,폴더 겸용)
파일폴더날짜_수정.exe
사용법)
파일폴더날짜_수정.exe "파일혹은폴더경로" "수정날짜"
(따옴표 필수)
수정날짜는 일반적인 표현법으로 "2022-11-10 12:34:56" 이런식으로 넣으면 됩니다.
닷넷으로 제작되었으며 소스는 간단합니다.
------------------------------------------------------------------------------------------------------
using System.IO;
...
class Program {
static void Main(string[] args) {
//'0번 인수 : 처리할 파일 혹은 폴더
//'1번 인수 : 처리할 날짜
try {
string strPath;
strPath = args[0];
DateTime baseDate = DateTime.Parse(args[1]);
sel_date_idx = 0; // 그냥 0번 수정날짜만
if(File.Exists(strPath)) {
mySetDateFile(strPath, baseDate);
} else if(Directory.Exists(strPath)) {
mySetDateFolder(strPath, baseDate);
}
} catch(Exception ex) {
// 안되면 그냥 그대로 종료
// Console.WriteLine(ex.Message);
}
}
static int sel_date_idx = 0;
static void mySetDateFile(string strPath, DateTime baseDate) {
switch(sel_date_idx) {
case 0:
File.SetLastWriteTime(strPath, baseDate);
break;
case 1:
File.SetCreationTime(strPath, baseDate);
break;
case 2:
File.SetLastAccessTime(strPath, baseDate);
break;
default:
break;
}
}
static void mySetDateFolder(string strPath, DateTime baseDate) {
try {
switch(sel_date_idx) {
case 0:
Directory.SetLastWriteTime(strPath, baseDate);
break;
case 1:
Directory.SetCreationTime(strPath, baseDate);
break;
case 2:
Directory.SetLastAccessTime(strPath, baseDate);
break;
default:
break;
}
} catch(Exception ex) {
//MessageBox.Show(ex.Message);
}
}
}
------------------------------------------------------------------------------------------------------
아래는 vbs 코드입니다.(폴더불가, 파일전용)
참고로 폴더는 보안문제로 vbs로 직접변경 불가하고 파일만 가능한 것으로 알고 있습니다.
파일만 쓰고, exe 따로 쓰기 싫은분은 vbs코드로 이거 쓰시면 됩니다.
(배치파일만으로는 되는지 잘 모르겠네요. 안되니까 저거 썼던거 같은데...)
------------------------------------------------------------------------------------------------------
' https://www.tek-tips.com/viewthread.cfm?qid=1443439
ModFileDT "파일경로", Date객체 or "문자열날짜시각표현"
Function ModFileDT(strPath, DateTime)
Dim strDir, strFileName
Dim objShell
Set objShell = CreateObject("Shell.Application")
Dim fso 'As FileSystemObject
Set fso = CreateObject("Scripting.FileSystemObject")
Dim objFolder
strDir = fso.GetParentFolderName(strPath)
strFileName = fso.GetFileName(strPath)
Set objFolder = objShell.Namespace(strDir)
objFolder.Items.Item(strFileName).ModifyDate = DateTime
Set objShell = Nothing
Set fso = Nothing
Set objFolder = Nothing
End Function
------------------------------------------------------------------------------------------------------