1

Как я уже сказал, у меня есть некоторые *.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, но проблема возникает после новые каталоги, мне нужно переместить эти каталоги XML в другой каталог с именем "Xml Backup".

2 ответа2

1

проблема в том, что после создания новых каталогов мне нужно переместить эти директории xml в другой каталог с именем "Xml Backup"

Измените пакет, чтобы создать папку "xml_Backup" (если она не существует), а затем включите ее в целевые пути для команд MD и Move в цикле.

Что-то вроде:

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" и т.д.

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 Backup.
  4. Переместите специфичные для файла папки и их содержимое в XML Backup.

То, что вы должны делать, как это сделано в приведенном выше сценарии, это:

  1. Создайте папку XML Backup.
  2. Создайте специфичные для файла папки в папке XML Backup.
  3. Переместите файлы в соответствующую подпапку.

Дополнительные сценарии потребуются для модификации вышеуказанного сценария, если вы хотите, чтобы он выполнялся не только для файлов XML в X:\folder1\folder2 (например, для других файлов XML в смежных подпапках).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .