正如我所说,我在一个文件夹中有一些 *.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”的目录中。
答案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"
。
即:batchname.bat "X:\folder1\folder2"
或batchname.bat ".\folder2"
等。
答案2
如果 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"
}
我认为,你最大的问题是你从反面来看待这个问题。你想要:
- 创建特定文件的文件夹。
- 将文件移动到其特定文件夹中。
- 创建一个 XML 备份文件夹。
- 将特定文件的文件夹及其内容移动到 XML 备份中。
你应该正如上面的脚本所示,要做的事情是:
- 创建 XML 备份文件夹。
- 在 XML 备份文件夹内创建特定文件的文件夹。
- 将文件移动到适当的子文件夹中。
如果您希望它不仅仅在 XML 文件X:\folder1\folder2
(例如,相邻子文件夹中的其他 XML 文件)上运行,则需要对上述脚本进行额外的修改。