파일 이름을 기반으로 디렉토리를 만들고이 파일들을 CMD를 사용하여 이동하는 방법?


1

내가 말했듯이, 나는 하나의 폴더에 Some * .Xml 파일을 가지고 있는데, 나는 그것들을 그들의 이름을 기반으로 하위 디렉토리로 옮기고 싶다.

하지만 두 가지 더 필요합니다.

1- * .xml 디렉토리가 아닌 상위 디렉토리에서 명령을 적용 / 실행해야합니다.

2 - 필요한 하위 디렉토리를 만들고, XML 파일을 그들로 옮긴 후, 나는 그것들을 모두 "XML Backup"이라는 새로운 디렉토리로 옮기고 싶다.

예를 들면 다음과 같습니다.

X:\folder1\folder2\file1.xml
X:\folder1\folder2\file2.xml
X:\folder1\folder2\file3.xml

내가해야 할 일은 정확히 다음과 같다.

X:\folder1\folder2\xml_Backup\file1\file1.xml
X:\folder1\folder2\xml_Backup\file2\file2.xml
X:\folder1\folder2\xml_Backup\file1\file3.xml

명령을 실행해야한다는 것을 명심하십시오. X:\folder1

그건 그렇고, 내가 다른 방법으로 배치 파일 에서이 명령을 사용하려고했지만, 내가 할 일의 조건 때문에 그것을 할 수 없습니다 :

for /R %%F in (*.xml) do (
2>nul md "%%~nF"
>nul Move /y "%%~nF.*" "%%~nF"
)

* .xml 디렉토리에서이 일괄 처리 / 명령을 실행하려고하면 (XML 파일 이름을 기반으로 한) 하위 디렉토리가 올바르게 만들어지고 xml 파일로 이동되지만 문제는 만드는 것입니다. 새 dirs, 나는 "XML 백업"이라는 다른 디렉토리에 이러한 XML 디렉토리를 이동해야합니다.


1
이 버전의 Windows 버전은 무엇입니까? 아마 일괄 처리가 가능하지만, PowerShell이 ​​7 이상이면 더 쉬울 수도 있습니다. 또한,이 모든 것을 거꾸로 생각하고있는 것처럼 보입니다. XML_Backup 폴더와 그때 파일 별 폴더를 하위 디렉토리로 만들고 그때 파일을 이동하십시오.
Iszi

또한 파일을 hare로 지정하는 경우에만 X:\folder1\folder2. 더 깊은 하위 디렉토리가 있습니까? 다른 하위 폴더 또는 파일이 있습니까? X:\folder1 당신이 행동하기를 원하거나 원하지 않습니까?
Iszi

답변:


1

문제는 새 디렉토리를 만든 후입니다, 나는 "XML 백업"이라는 다른 디렉토리로 이러한 XML 디렉토리를 이동해야합니다.

배치가 "xml_Backup"폴더를 만들도록 수정하고 (존재하지 않는 경우) 해당 폴더를 대상 경로에 포함 시키십시오. MDMove 명령을 반복하십시오.

같은 것 :

rem Change to folder specified as argument.
pushd %1

rem Check if 'backup' folder exists; if not, create it.
if not exist "xml_Backup" md "xml_Backup"

rem Loop through files in the current folder.
for /R %%F in (*.xml) do (
  rem Create subfolder in 'backup' folder matching this file's name.
  md "xml_Backup\%%~nF"
  rem Move file to that folder.
  move /y "%%~nF.*" "xml_Backup\%%~nF"
)

rem Change back to the original directory we were in when pushd was executed.
popd

함께 뛰다 batchname.bat "c:\folderContainingXMLs".

IE : batchname.bat "X:\folder1\folder2" 또는 batchname.bat ".\folder2"


감사합니다. Ƭᴇcʜιᴇ007 귀하의 도움을 위해서, 그것은 솔루션의 첫 번째 단계입니다. 내가 설명하려고했던 것처럼 상위 디렉토리에서 일괄 처리를 실행해야하고 * .xml 파일이있는 동일한 디렉토리에서 일괄 처리를 적용하면 올바르게 수정됩니다. 그러나 부모 디렉토리에서 일괄 처리를 적용하려고하면 필요한 모든 디렉토리가 만들어 지지만 XML 파일은 해당 위치에서이 새 디렉토리로 이동하지 않습니다. 유일한 문제는 지금, 새 Dirs가 * dir 디렉토리가 아니라 상위 디렉토리에 생성 된 것입니다. 그래서, 더 이상의 제안? 감사합니다 - 카림
KorkOoO

@ ENG.KARIM 처리 할 폴더를 지정할 수 있도록 약간 수정했습니다. 여기에서 조정할 수 있다고 확신합니다. ;)
Ƭᴇcʜιᴇ007

0

PowerShell이 ​​옵션 인 경우이 방법을 사용해보십시오. 처음에는 일부 테스트 데이터에서 수행합니다. 아직 테스트하지 않았습니다.

New-Item X:\folder1\folder2\xml_backup -Type Directory
Get-ChildItem X:\folder1\folder2\*.xml |
ForEach-Object {
    $XMLName = $_.BaseName
    New-Item "X:\folder1\folder2\xml_backup\$XMLName" -Type Directory
    Move-Item $_ "X:\folder1\folder2\xml_backup\$XMLName"
}

당신의 가장 큰 문제는, 제가 생각하기에, 당신이이 문제에 역방향으로 접근하고 있다는 것입니다. 원하는 내용 :

  1. 파일 관련 폴더를 만듭니다.
  2. 파일을 특정 폴더로 이동하십시오.
  3. XML 백업 폴더를 만듭니다.
  4. 파일 별 폴더와 그 내용을 XML 백업으로 이동하십시오.

너 뭐야? 할까요 위의 스크립트에서 수행 한 것처럼 다음을 수행해야합니다.

  1. XML 백업 폴더를 만듭니다.
  2. XML 백업 폴더 내에 파일 별 폴더를 만듭니다.
  3. 파일을 적절한 하위 폴더로 이동하십시오.

위의 스크립트를 XML 파일 이상에서 실행하려면 추가 수정이 필요합니다. X:\folder1\folder2 (예 : 인접한 하위 폴더의 다른 XML 파일).


답장을 보내 주셔서 감사합니다 Iszi. 불행히도 PowerShell을 사용할 수 없습니다. 내가 묻는 것은 큰 배치 스크립트의 1 %에 불과하기 때문에 모든 명령이 훌륭하게 작동합니다. 묻고있어. 나는 그 문제를 해결하기 위해 그 배치에 몇 가지 수정을 시도했지만, 나는 무언가를 고칠 때마다 또 다른 것을 잃는다 !! 그래서 나는 가장 쉬운 부분을 골랐다. 어쨌든 도와 주심에 감사드립니다. 그런데, 저는 Win.7- x64를 사용하고 있습니다 - karim
KorkOoO
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.