Windows에서 재귀 적으로 파일 이름을 바꾸거나 파일을 이동하는 데 사용할 수있는 명령은 무엇입니까?


답변:


56

XP의 for명령을 사용하십시오 . 예를 들어 명령 줄에서 (일괄 처리 파일을 사용 %%x하여) 재귀 이동을 수행하십시오.

for /r %x in (foo) do move "%x" "drive:\path\bar"

재귀 이름 바꾸기를 수행하려면 다음을 수행하십시오.

for /r %x in (*.c) do ren "%x" *.cpp

배치 예 :

for /r "< DIR >" %%x in (*.c) do ren "%%x" *.cpp

이것은 가장 간단한 해결책입니다. 감사합니다!
javamonkey79

배치 프로그램에서 FOR 명령을 사용하려면 % 변수 대신 %% 변수를 지정하십시오.
Tom Robinson

cwd'ing없이 다른 소스 디렉토리에 어떻게 이것을합니까?
Evan Carroll

이것을 사용하여 모든 파일의 모든 '% 20'파일을 일반 ''로 바꾸려고합니다. 어떻게해야합니까?
Mike Warren

@RobKam, 실제로 for 루프가 작동하지만 1 파일 이름 만 바꿉니다. 여러 파일 확장자를 인식하도록 와일드 카드를 어떻게 설정 *.*합니까?
DJ KRAZE

3

robocopy "C:\Source Folder" "C:\Destination Folder" /E /COPYALL /XJ


Description of parameters:
/E - copy subdirectories, including Empty ones (/S to exclude empty ones)
/COPYALL - COPY ALL file info (equivalent to /COPY:DATSOU)
/XJ - eXclude Junction points and symbolic links. (normally included by default).

2

이동 명령으로 Windows XP SP2 상자에서 작은 예제를 실행하면 효과가 있습니다. 모든 파일과 디렉토리가 소스에서 대상으로 이동되었습니다. source 및 dest는 디렉토리 이름입니다.

소스 이동
ver

Microsoft Windows XP [버전 5.1.2600]
이동 /?

파일을 이동하고 파일과 디렉토리의 이름을 바꿉니다.

하나 이상의 파일을 이동하려면
이동 [/ Y | / -Y] [드라이브 :] [경로] 파일 이름 1 [, ...] 대상

디렉토리 이름을 바꾸려면 :
이동 [/ Y | / -Y] [드라이브 :] [경로] dirname1 dirname2

  [드라이브 :] [경로] 파일 이름 1 파일의 위치와 이름을 지정합니다
                          또는 이동하려는 파일.
  destination             Specifies the new location of the file. Destination
                          can consist of a drive letter and colon, a
                          directory name, or a combination. If you are moving
                          only one file, you can also include a filename if
                          you want to rename the file when you move it.
  [drive:][path]dirname1  Specifies the directory you want to rename.
  dirname2                Specifies the new name of the directory.

  /Y                      Suppresses prompting to confirm you want to
                          overwrite an existing destination file.
  /-Y                     Causes prompting to confirm you want to overwrite
                          an existing destination file.

The switch /Y may be present in the COPYCMD environment variable.
이것은 명령 행에서 / -Y로 대체 될 수 있습니다. 기본은
에서 MOVE 명령을 실행하지 않는 한 덮어 쓰기를 요구하는 프롬프트
배치 스크립트 내에서.

나는 재귀 적 인 이름 바꾸기를 찾고 있습니다. 문제의 일부로 이동을 포함 시켰습니다.
javamonkey79

1

내장 XCOPY 명령이 닫혔습니다. 재귀 복사본을 수행하지만 이름 바꾸기를 지원하지 않는다고 생각합니다.


1
xcopy는 기본적으로 숨겨진 파일을 무시한다는 것을 잊지 마십시오.
Richard Harrison

1
for /r %%x in (%1) do ren "%%x" %2

이것은 재귀 적으로 파일 이름을 바꿉니다 :-)

파일에 저장하면 확장자에서 확장자까지 2 개의 인수가 제공됩니다.

예 : 파일 이름은 test.bat 명령입니다 : test * .avi * .bmp

확장명이 avi 인 모든 파일의 이름을 bmp (모든 하위 폴더에서)로 바꿉니다.

참고 : 이것은 Rob Kam이 10 월 26 일 13:20에 답변 한 게시물을 수정 한 것입니다. 그는 주었다

/r %x in (*.c) do ren "%x" *.cpp

어디는이 shud로 %% 대신 %


%%는 배치 파일에만 필요합니다.
paradroid



1

디렉토리 이름을 검색하고 바꿀 VB 스크립트를 만들었습니다. 파일 버전도 있습니다. 그러나 이것이 자신의 스크립트를 시작하기에 충분하다고 생각합니다. 이 스크립트를 사용하는 방법은 fileandreplacedirs.vbs입니다. 이름을 바꾸려는 폴더와 같은 폴더에 넣습니다. 또한 반드시 폴더로 돌아갈 필요는 없지만 약간만 수정하면됩니다.

search1  = InputBox("Search for...", "", "")
replace1 = InputBox("replace with...", "", "")

Dim MyFile
MyFiles = GetFileArray(".")

For Each MyFile In MyFiles
    NewFilename = Replace(MyFile.Name, search1, replace1)
    If InStr( MyFile.Name, search1 ) Then MyFile.Name = NewFilename
Next

MsgBox "Done..."

function GetFileArray(ByVal vPath)
    'Get our objects...
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set Folder = FSO.Getfolder(vPath)
    Set Files = Folder.SubFolders

    'Resize the local array
    'Arrays are 0 based but Files collection is 1 based.
    if Files.count = 0 then
        GetFileArray = array()
        Exit Function
    Else
        Index = 0
        Redim FileList(Files.Count-1)
        For Each File In Files
            set FileList(Index) = File
            Index = Index + 1
        Next
        GetFileArray = FileList
    End If

    'Always good practice to explicitly release objects...
    Set FSO = Nothing
    Set Folder = Nothing
    Set Files = Nothing

End function

0

간단한 DOS 명령을 사용하십시오.

  1. 파일 확장자를 재귀 적으로 바꾸려는 소스 디렉토리로 cd하십시오.

  2. 이 명령을 입력하십시오 :

    ren *.[CurrentFileExtension] *.[DesiredFileExtension]
    

1
그것은 cwd에는 잘 작동하지만 하위 디렉토리에는 적합하지 않으므로 재귀 적이 지 않습니다. 감사합니다 :)
javamonkey79

0

if exist파일이 모든 폴더에 존재하지 않을 때 오류 반환을 피하기 위해 추가 했습니다 (Jenkins에서는 중요하므로 빌드를 중단하지 않습니다).

for /r %x in (foo) do if exist "%x" move "%x" "drive:\path\bar"

재귀 이름 바꾸기를 수행하려면 다음을 수행하십시오.

for /r %x in (*.c) do if exist "%x" ren "%x" *.cpp

배치 예 :

for /r "< DIR >" %%x in (*.c) do if exist "%%x" ren "%%x" *.cpp

1
새 답변을 만드는 대신 추가 한 답변을 간단히 편집해야합니다.
LostBalloon

0

Powershell은 당신의 친구입니다. 배치 파일이나 스크립트가 필요하지 않습니다. 예를 들어, 원격 디렉토리에서 모든 .tiff 파일의 이름을 반복해서 .tif로 바꾸려면 Powershell에서 다음 명령을 실행할 수 있습니다.

get-childitem "\\\servername\d$\path" -recurse -Include *.tiff | Rename-Item -NewName { $_.Name.replace(".tiff",".tif") }


0

이 파이썬 스크립트도 잘 작동합니다.

for root, dirs, files in os.walk(cur_dir):  
    for filename in files:  
        file_ext = os.path.splitext(filename)[1]  
        if old_ext == file_ext:  
            oldname = os.path.join(root, filename)  
            newname = oldname.replace(old_ext, new_ext)  
            os.rename(oldname, newname)

http://gomputor.wordpress.com/2008/09/29/change-the-extension-of-multiple-files-in-a-chosen-directory-with-python/ 에서 찾을 수 있습니다.

필자는 경로에 Python을 추가하고 위의 Python 스크립트를 'utils'폴더에 넣었습니다. 그런 다음이 간단한 배치 스크립트를 작성하여 실행했습니다 .rn.bat :

python \utils\rn.py %1 %2 %3

또한 위의 파이썬 스크립트를 업데이트하여 명령 줄에서 인수를 가져 왔습니다. rn.py :

import sys
import os

cur_dir = sys.argv[1]
old_ext = sys.argv[2]
new_ext = sys.argv[3]

#print cur_dir, old_ext, new_ext
for root, dirs, files in os.walk(cur_dir):  
    for filename in files:  
        file_ext = os.path.splitext(filename)[1]

        if old_ext == file_ext:  
            oldname = os.path.join(root, filename)  
            newname = oldname.replace(old_ext, new_ext)  
            os.rename(oldname, newname)

마지막으로 지금해야 할 일은 다음과 같습니다.

>rn . .foo .bar

또는

>rn \ .exe .txt

두 번째와 재미있게 보내십시오 :)

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