리눅스 명령 'touch'에 해당하는 Windows?


175

Windows에서 파일의 날짜 수정 필드를 업데이트하려는 경우 무엇을 사용합니까?

  1. C ++, .NET, C # 또는 Windows 고유의 명령을 통해 액세스 할 수있는 명령 (Vista가 바람직 함)
  2. 도구 / 애플리케이션은 무료이며, 가능하면 오픈 소스도 가능

편집 : CheapScotsman이 지적한대로 응용 프로그램에 대한 페이지가 이미 있습니다 .

누군가 내가 C ++, C #, WSH 또는 이와 비슷한, 잘하고 좋은 것을 통해 어떻게 할 수 있는지 알고 있다면 다른 모든 것이 관련 질문에 포함되어 있다고 생각합니다.


위에서 언급 한 네 가지 대안과 여기에 언급되지 않은 네 가지 대안은 비슷한 질문에 대한 답변에서 찾을 수 있습니다. "Windows Recursive Touch Command"
JdeBP

stackoverflow.com/questions/210201/… 다음을 포함하여로드를 언급합니다.REM.>a
barlop

답변:


356

Windows를 사용하여 파일의 날짜 스탬프를 터치하려면 명령 프롬프트에서 다음 명령을 사용하십시오.

copy /b filename.ext +,,

( filename.ext파일 이름은 어디에 있습니까 ). 는 +,,에 특별한 플래그입니다 copy단순히 그것을 말하는 파일의 날짜 / 시간을 업데이트 :

* 파일 시간과 날짜 변경

파일을 수정하지 않고 파일에 현재 시간과 날짜를 지정하려면 다음 구문을 사용하십시오.

copy /b Source+,,

쉼표는 Destination 매개 변수가 생략되었음을 나타냅니다.

Lumi와 Justin의 의견에 따라 편집하십시오 . 예를 들어 배치 파일에 넣으십시오. touch.cmd

@COPY /B %1+,, %1

파일이 현재 디렉토리에없는 경우에도 작동합니다 (Windows 7에서 테스트).


46
이게 뭐야? 어디에 기록되어 있습니까? (Google은 "+,"의 색인을 생성하지 못하고 '복사'를 검색하면 유용한 정보가 많이 나오지 않아 MS 사이트가 올바른 방향으로 이끌지 못하고 있습니다.) 당연한 일이지만 궁금합니다.
dash-tom-bang


14
type touch.batis @echo offand next line copy /b %1 +,,-put에 넣거나 C:\bin자신 만의 스크립트에 넣은 것을 다음과 같이 사용할 수 있습니다 touch myfile.txt.
루미

17
Win7에서는 파일이 들어있는 폴더에 있지 않으면 작동하지 않습니다. 현재 작업 디렉토리에 사본을 작성합니다.

6
원격 폴더 (UNC 경로)에서이 작업을 수행해야하는 경우 - 당신은뿐만 아니라 복사 명령 대상을 지정해야합니다 - copy /b Source+,, Source- 어디 Source파일의 전체 경로 포함
저스틴

162

나는 많은 일반적인 유닉스 유틸리티의 네이티브 Win32 포트 인 unxutils 를 사용하고 추천 했습니다 . 거기에 touch명령이 있습니다.


5
거의 모든 유닉스-윈도우 포트와 마찬가지로, 이것은 유니 코드가 아닌 프로그램의 기본값으로 설정된 인코딩 외부의 파일 이름에있는 유니 코드 문자로는 작동하지 않습니다. 이러한 도구를 모두 트립 할 파일 이름을 테스트하십시오."test тест τεστ.txt"
RomanSt

gnuwin32에 있습니다. 그러나 실제로 gnuwin32는 유니 코드 문자에도 실패합니다.
barlop

1
2017에서 업데이트 Windows 10에서는 bash를 설치하는 Windows 용 Linux 하위 시스템을 사용할 수 있습니다. cygwin, MinGW, unxutils 또는 Windows 용 부분 유닉스에 대한 필요가 없습니다. docs.microsoft.com/en-us/windows/wsl/install-win10
Davos

@ 다 보스 (일반적으로 권한이없는) 사용자 컨텍스트 이외의 파일에서 시도해 보셨습니까? 기술적으로 LXSS의 사용자 영역은 권한이없는 사용자로 실행되기 때문입니다.
0xC0000022L

@ 0xC0000022L touch명령 의 맥락에서 무슨 의미인지 잘 모르겠습니다 . 그것은 nix 환경의 다른 것과 비슷합니다. 또는 할 수 있거나 권한이 없기 때문에 할 수 없습니다.
다 보스

96

원하는 것은 파일의 마지막 수정 날짜 (내 경우)를 변경하는 것입니다.

C:\> powershell  (ls your-file-name-here).LastWriteTime = Get-Date

9
PowerShell FTW. 진심으로, 유닉스는 시원하지만 PS는 시원합니다.
매트

1
당신은뿐만 아니라 여러 개의 파일 / 폴더에 대한 마지막 기록을 업데이트 할 수 있습니다

12
이것은 하나의 파일에서만 작동합니다. 여러 파일의 경우 : ls * | ForEach-Object {$ _. LastWriteTime = Get-Date}
Eli Algranti

2
재귀 적으로 수행하려면 gci -recu -inc " . "| % {$ _. LastWriteTime = Get-Date}
BrainSlugs83

6
@ BrainSlugs83 : 코드를 사용하여 역 따옴표`:gci -recu -inc "*.*" | % { $_.LastWriteTime = Get-Date }
alldayremix

58
type nul >>file & copy file +,,
  • 작성 file이 존재하지 않는 경우.
  • 파일 내용 만 남겨 둡니다.
  • cmd내장 기능 만 사용하십시오 .
  • 모두 마지막 액세스작성 시간이 업데이트되었습니다.

최신 정보

가! 읽기 전용 파일에서는 touch작동하지 않지만 그렇지 않습니다. 나는 제안한다 :

:touch
if not exist "%~1" type nul >>"%~1"& goto :eof
set _ATTRIBUTES=%~a1
if "%~a1"=="%_ATTRIBUTES:r=%" (copy "%~1"+,,) else attrib -r "%~1" & copy "%~1"+,, & attrib +r "%~1"

xcopy처럼 + r 속성을 copy가 무시할 수없는 것은 유감입니다. 또는 xcopy가 이상한 filename +,,구문을 지원하지 않는 것이 유감입니다 .
Abel

불행히도 이것은 작동하지 않습니다 (적어도 Windows 7에서는 그렇지 않음). 파일이 실제로 수정되지 않은 경우 (즉, 리디렉션 할 데이터가없는 경우) 명령 인터프리터가 리디렉션 대상의 타임 스탬프를 업데이트하지 않는 것 같습니다.
Synetech

32

@ 대 시방 :

신비한 '+'와 쉼표에 대한 Technet의 설명은 다음과 같습니다.

/ b Source + 복사,

쉼표는 Destination 매개 변수가 생략되었음을 나타냅니다.

copy 명령은 여러 파일을 단일 대상 파일로 병합하는 것을 지원합니다. 명령 프롬프트에서 공백 문자를 사용하여 공백 대상을 지정할 수 없으므로 두 개의 쉼표를 사용하여이를 나타낼 수 있습니다.

그리고 이것은 Technet의 복사 명령 참조입니다 : http://technet.microsoft.com/en-us/library/bb490886.aspx


16
이제 그것은 엉망인 구문입니다. 진심으로, 그들은 무엇을 생각하고 있었습니까? 또한 동일한 문서에 "대상 : 필수."라는 메시지가 표시됩니다. 놀랍습니다.
sth

1
이것은 Vista에서도 작동하지 않는 것 같습니다 ... 그들이 그들의 감각에 왔는지 궁금합니다?
quillbreaker 2009

1
Windows 7에서 작동
Imran

5
그것은 쉼표 없이도 나를 위해 일했습니다 : copy file.ext + 따라서 문서는 실제 행동과는 거리가 멀고 합리적인 기대치와 다릅니다.
Abgan

2
Windows Server 2008에서 작동했지만 파일이 들어있는 폴더에있는 경우에만 해당
FrinkTheBrave


21

다음은 powershell을 사용하는 재귀 버전입니다. 이것은 모든 파일과 하위 디렉토리 및이 디렉토리의 하위 디렉토리에있는 파일의 마지막 수정 시간을 변경합니다

ps c:myDir> Get-ChildItem . * -recurse | ForEach-Object{$_.LastWriteTime = get-date}

2
덜 장황하지만 표준 Powershell 속기 만 사용합니다.ls * -recurse | % { $_.LastWriteTime = Get-Date }
Jonas

15

GnuWin32의 프로젝트는 유닉스 명령 행 유틸리티는 GNU 버전의 윈도우 포트가 있습니다.

여러 개의 개별 패키지로 제공되며 다른 종속 항목없이 필요한 명령 만 설치할 수 있습니다. 들어 touch당신이 필요 로 coreutils 패키지를.


15

cygwin와 함께 제공됩니다 touch. 전체 프레임 워크를 설치하고 싶지 않다고 언급했지만 cygwin은 매우 가볍고 전체 유닉스 계열 명령 줄을 켜지 않고 dos 명령 창에서 호출 할 수 있습니다.

설치할 도구를 제어 할 수도 있으므로 touch.exe파일을 간단히 설치 하고 나머지 프레임 워크를 그대로 둘 수 있습니다.


2
여기까지 도구를 사용하려면 디렉토리에 touch.exe 및 cygwin.dll 파일 만 설치하면됩니다. cygwin 기반 도구를 사용하는 것과 관련된 다른 종속성은 없습니다.
Tall Jeff

1
나는이 (win7x64를)하려고 할 때 touch.exe에 추가로 4 개 Cygwin에서의 dll을의 필요 : cygiconv-2.dll의 cygintl - 8.dll의 cygwin1.dll의 cyggcc_s-1.dll을을
매트 윌키

15

배치 스크립트에서 빈 파일을 만들려고 시도했습니다. 이것을 사용할 수 있습니다 :

ECHO text>file1.txt

3
이것은 가장 빠른 빠른 방법입니다 .. 방금 .gitignore 파일을 만들 필요가 있었고 Windows 7은 "파일 이름을 입력해야합니다"등으로 계속 불평합니다. echo pie>.gitignore감사합니다!

4
@Alex 이것은 관련이 없지만 Windows 오류는 파일이 마침표로 시작하기 때문입니다. Windows 탐색기에서 그 문제를 해결하는 이상한 해킹이 있습니다. 파일도 마침표로 끝내십시오. 따라서 .gitignore.Enter 키를 누르면 Windows가 후행을 제거합니다. 미쳤지 만 작동합니다.
Brad Cupit

1
나는 이것이 큰 선수들을 인기있게 잡을 수있을만큼 충분한지지를 줄 수 있기를 바란다.
Jonathan Mee

1
이것은 빈 파일을 생성하지 않지만 file1.txt에는 "텍스트"가 있습니다.
Joshua Meyers

14

다음 은 Windows 탐색기에서 마우스 오른쪽 버튼으로 "touch"추가 하기 위해 작성한 간단한 regfile 입니다. 다음을 호출하기 때문에 스크립트하기도 쉽습니다.

cmd.exe /c copy %1+nul %1 /by

그리고 copy nul some_file빈 파일을 만드는 것을 잊지 마십시오 ( touch가장 많이 사용되는 것으로 보임).
Joey

Ack! Zip 파일에 액세스 할 수 없습니다 (brinkster22.com에 대한 참조 사이트가 필요함). 존, 이거 업데이트 할 수 있어요?
Dan7119

Win7에서 작동합니다. WinXP에서 작동하지 않음 : "복사"를 실행 한 후 파일 시간이 동일하게 유지됩니다.
Egor Skriptunoff


11

CodeProject 에서 이것을 사용해보십시오 .

  • 설치할 필요가 없습니다.
  • 원하는 경우 소스를 수정할 수도 있습니다.

2
이 링크가 질문에 대한 답변을 제공 할 수 있지만 여기에 답변의 필수 부분을 포함시키고 참조 용 링크를 제공하는 것이 좋습니다. 링크 된 페이지가 변경되면 링크 전용 답변이 유효하지 않을 수 있습니다.
Yan Sklyarenko 2016 년

9

또한 Cygwin 을 설치 하여 다른 * NIX 명령뿐만 아니라 Touch도 제공합니다.


2
cygwin이 없으면 창문에 살 수 없습니다.
jweede

박하없는 cygwin은 꽤 절름발이입니다.
Ahe


5

스택 오버플로에 대한 비슷한 질문 에서.

타임 스탬프를 업데이트하려면 (의 다른 기능은 무시 touch) 다음을 수행합니다.

copy /b filename.ext +,,

1
이것은 설명없이 2 년 전의 Gish Domains 답변의 반복입니다.
fixer1234


4

웹 사이트에서 :

Funduc Software Touch 는 하나 이상의 파일에서 시간 / 날짜 및 / 또는 속성 스탬프를 변경할 수있는 무료 '터치'유틸리티입니다. 또한 FS Touch는 기존 파일 시간에서 지정된 시간 (초)을 더하거나 뺄 수 있습니다. '복잡한 파일 마스크'를 통해 변경할 파일 및 / 또는 하위 디렉토리를 지정할 수 있습니다. 대화식으로 또는 명령 줄에서 프로그램을 실행할 수 있습니다. 버전 7.2의 새로운 기능은 파일 수정 타임 스탬프 +/- 지정된 초 수를 변경하는 명령 줄 스위치입니다.

FS Touch는 Windows XP, Vista, Windows 7 및 Windows 8에서 실행됩니다.


4

이 내용은 reg 파일에 저장할 수 있습니다. "터치 파일"기능이있는 모든 파일에 대해 마우스 오른쪽 버튼을 클릭하면 나타나는 상황에 맞는 메뉴가 추가됩니다 (Windows 7에서 테스트). 복사합니다 모든 다음 줄은 파일을 등록합니다. 파일을 실행하고 질문을 승인하십시오. 파일 (또는 여러 파일)을 마우스 오른쪽 버튼으로 클릭하십시오. "파일 터치"옵션을 사용할 수 있습니다.

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell]

[HKEY_CLASSES_ROOT\*\shell\Touch File]

[HKEY_CLASSES_ROOT\*\shell\Touch File\command]
@="cmd /C copy /b \"%1\" +,,"

3

하나 이상의 프로젝트에 git을 사용하는 경우 git-bashWindows 용 mingw 에 touch명령이 있습니다. @ greg-hewgill에게 'nix 유틸리티는 Windows 용으로 존재합니다 .git-bash에서 만져보십시오.


3

PowerShell에서 다음을 시도하십시오.

ni fileName.txt

NINew-Item cmdlet 의 별칭입니다 .


1
수퍼 유저에 오신 것을 환영합니다. 게시 해 주셔서 감사합니다! ni명령 에 대한 자세한 정보를 제공하는 웹 사이트에 대한 링크를 추가하고 명령의 기능을 자세히 설명 할 수 있습니까?
hBy2Py

1
New-Itemcmdlet은 기존 파일의 타임 스탬프를 업데이트 할 수 없습니다.
Twisty Impersonator 2016

타임 스탬프를 업데이트하지는 않지만 새로운 파일을 생성하므로 터치가 수행합니다. 나에게서 +1
MikeMurko 2016 년

2

다음을 % windir % \ system32 폴더에 touch.bat로 저장하거나 PATH 환경 변수에 저장된 폴더를 추가하십시오.

@echo off
if %1.==. goto end
if not exist %1 goto end
copy /b %1 +,, > nul
echo %1 touched!
:end

샘플 사용법 :

touch *.cpp
touch somefile.c

참조 : Microsoft KB 69581


우수한! 외부 물건이 아니라 그냥 복사하십시오. 그리고 물론 우리 대부분은 배치
Bogdan Gavril MSFT

2

vim이 설치되어 있으면 빠른 방법을 찾았습니다 (큰 파일에는 적합하지 않으며 전체 파일을 연 다음 닫을 것입니다 ...)

vim foobar.txt +wq!

"+"는 다음 명령을 실행하기 위해 인수를 설정합니다. "wq!" "쓰기, 종료, 강제 실행"입니다. 파일을 열고 저장 한 다음 바로 닫습니다.


무의미하게 복잡하고 부피가 크며 휴대 할 수 없습니다. -1
MD XF

2

기본적으로 다른 파일의 파일 날짜를 복제 / 복제하고 배치 파일에서 사용할 수있는 '터치'기능을 원했습니다.

따라서 비디오 파일을 배치 파일로 '끌어다 놓기'하면 FFMPEG가 실행 된 다음 입력 파일의 'Date Created'및 'Date Modified'가 출력 파일에 복사됩니다.

배치 파일이 유니 코드 파일 이름을 처리하고 인라인 PowerShell이 ​​파일 이름 기호로 엉망이되어 두 번 이스케이프 처리하는 것이 악몽이라는 것을 알 때까지 처음에는 간단 해 보였습니다.

내 솔루션은 'touch'부분을 'CLONE-FILE-DATE.ps1'이라는 별도의 PowerShell 스크립트로 만들고 다음을 포함합니다.

param
(
  [Parameter(Mandatory=$true)][string]$SourcePath,
  [Parameter(Mandatory=$true)][string]$TargetPath
)

(GI -LiteralPath $TargetPath).CreationTime  = (GI -LiteralPath $SourcePath).CreationTime
(GI -LiteralPath $TargetPath).LastWriteTime = (GI -LiteralPath $SourcePath).LastWriteTime

다음은 내 'CONVERT.BAT'배치 파일 내의 사용법 예입니다.

%~dp0\ffmpeg -i "%~1" ACTION "%~1-output.mp4"

CHCP 65001 > nul && PowerShell -ExecutionPolicy ByPass -File "%~dp0\CLONE-FILE-DATE.PS1" "%~1" "%~1-output.mp4"

PowerShell을 읽을 수 있다고 생각하므로 배치에 대해 설명합니다.

% ~ dp0 은 배치 파일의 현재 디렉토리입니다.

% ~ 1 은 파일 경로가 따옴표없이 배치로 삭제 된 경로입니다.

CHCP 65001> nul 은 문자를 UTF-8로 설정하고 출력을 삼 킵니다 .

-ExecutionPolicy ByPass를 사용하면 글로벌 정책을 수정하지 않고도 PowerShell을 실행할 수 있으므로 사람들이 실수로 스크립트를 실행하는 것을 방지 할 수 있습니다.


1

시험

fsutil 파일 createnew new.txt 0


2
The FSUTIL utility requires that you have administrative privileges.- touch기존 파일 처럼 작동하지 않습니다 .
키이스 톰슨

1

위에서 언급 한 다섯 가지 대안과 여기에 언급되지 않은 세 가지 대안은 수퍼 유저에서 찾을 수 있습니다. "Windows Recursive Touch Command"


2
이 링크가 질문에 대한 답변을 제공 할 수 있지만 여기에 답변의 필수 부분을 포함시키고 참조 용 링크를 제공하는 것이 좋습니다. 링크 된 페이지가 변경되면 링크 전용 답변이 유효하지 않을 수 있습니다.
Yan Sklyarenko 2016 년


1

당신은 음, 만약 정말 갖고 싶어 touch명령을 사용할 수, 당신은라는 배치 파일이 넣을 수 있습니다 touch.bat과에 스틱 C:\Windows:

TYPE NUL >>%1

충분히 간단합니다.


이 방법은 다음 플랫폼에서 수정 된 시간을 업데이트하지 않습니다. Windows Server 2012 R2, Windows Server 2016, Windows 10
Nate

0

유닉스 사람들은 touch 명령으로 파일의 파일 날짜를 업데이트하는 일반적인 문제를 해결했습니다 . 그러나 Windows의 경우 특수한 경우 더 간단한 방법이 가능한 경우가 있습니다.

응용 프로그램 타일의 배경색을 변경하려면 Windows 8.1에서 응용 프로그램 바로 가기의 타임 스탬프를 업데이트해야합니다 . 이 SO 질문을 참조하십시오 . 위의 영리한 도구 중 하나를 구현하는 대신 바로 가기의 설명 필드를 쉽게 편집 할 수 있습니다. 대부분의 사람들은 이것을 비워 두지 만 물론 유용한 의견은 빠르게 구상됩니다. 그리고 의견이 존재하는 경우, 마지막 기간을 추가하거나 제거해도 아무런 해가 없습니다.


0

나는 이것이 오래된 질문이며, Windows 10 시스템에서 터치를 발견했습니다. 여기 에서 Git을 다운로드하여 설치 했습니다 (제 생각에는). 터치처럼 보이고 다른 많은 유틸리티가 bin 폴더에 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.