我正在尝试移动多个“标记”文件夹在一个目录内的副本文件夹(可能已存在,也可能不存在)。Robocopy未在目标文件夹中移动目标文件夹
这就是我尝试的
SetLocal EnableDelayedExpansion
for /F "delims=" %%a in ('dir /b *P') do (
set "Name=%%a"
set "Folder=!Name:~0,6!"
robocopy /MOVE /E "%%a" !Folder!\
)
cmd /k
此代码在Windows 10中运行良好,但在Windows 11中,它删除了“标记(*P)”文件夹,而没有将其移动到目标文件夹(共享相同的前6位数字)中,无论该文件夹是否已经存在
我尝试搜索robocopy的win10和win 11版本之间的变更日志,以查看MOVE命令或任何其他参数是否有更改
我也试过改变代码的不同部分(甚至在某个时候创建了名为文件夹的空白空间),看看代码的任何其他部分是否在win10和win 11之间发生了变化,但仍然怀疑它的robocopy,因为在一个测试目录中,只有“33333 P”存在,里面有一个空文本文件,我运行.bat,一个新的“333333”文件夹出现了(里面有文件,基本上只是文件夹的重命名,这只是撤消了我的“标记”它),当在win10中它将“33333 P”移动到“333333”中时(按预期工作)
15/5/2023更多信息:我使用的是一个文件夹和文件的“数据库”,这些文件夹的编号从“10000”开始到大约“186000”(现在)。我想把所有的文件夹都移到同一个编号的文件夹里,但用一个P(过去)标记,以便区分我正在处理的东西和以前处理过的东西。我首先开始手动操作,但很快意识到它实际上是多么庞大,所以我重新利用了一个简单的重命名脚本,并开始研究如何将所需的项目大规模地移动到多个文件夹中。我第一次尝试使用“xcopy”,但它并没有像预期的那样工作,然后在互联网上搜索,我找到了robocopy,并编写了最初的一批。
该批处理在我家里的计算机上运行良好,在一个测试目录中有大约10个文件夹(Windows 10),将所有标记的文件夹及其内容(包括用于存档目的的空目录)移动到一个新创建的文件夹中。例:出所有的文件夹,我重命名为“3”,“5”,“11”到“3 P”,“5 P”,“11 P”,并希望批移动那些在一个新的文件夹创建相同的ID(所以一个新的“3”,“5”,“11”文件夹创建,和里面是“3 P”,“5 P”,“11 P”分别与所有的文件和目录它)
当我在工作时在我的计算机中重写批处理时,在我制作的另一个测试目录中,批处理不再像在家里那样工作。首先,我怀疑文件夹所有权和管理员权限,但我有他们在我的工作电脑太。那时我开始怀疑robocopy从win10到win 11的变化,但没有发现任何文档或更改日志,所以我甚至不确定是否是这样
1条答案
按热度按时间6jjcrrmo1#
该任务可以通过以下命令行使用批处理文件完成:
示例:
目录
C:\Temp
包含以下目录和文件:*3个P
*子文件夹1
*3个P
*子文件夹1
*子文件夹2
*5 P
*子文件夹为空
*子文件夹3
*子文件夹4
*11个P
MoveFolders.cmd
执行
MoveFolders.cmd
,当前目录为C:\Temp
。C:\Temp
的结果是:*3个P
*子文件夹1
*子文件夹2
*3个P
*子文件夹1
*5 P
*子文件夹为空
*子文件夹3
*11个P
*子文件夹4
MoveFolders.cmd
ROBOCOPY没有移动
C:\Temp\3 P\Subfolder 1\File 1.txt
和C:\Temp\3 P\File 2.txt
,因为目标目录已经包含这两个文件。目录C:\Temp\3 P
和C:\Temp\3 P\Subfolder 1
不会因此而删除。此增强代码删除目标目录中已存在的文件和目录。
C:\Temp
中的结果现在是:*3个P
*子文件夹1
*子文件夹2
*5 P
*子文件夹为空
*子文件夹3
*11个P
*子文件夹4
MoveFolders.cmd
建议在运行批处理文件时,要移动的目录都不是任何正在运行的进程的当前目录,并且要移动的文件都不是由正在运行的应用程序打开的,因为在这种情况下,ROBOCOPY将无法移动这些文件和文件夹。
要了解所使用的命令及其工作方式,请打开command prompt窗口,在那里执行以下命令,并仔细阅读显示的每个命令的帮助页面。
echo /?
endlocal /?
for /?
if /?
rd /?
robocopy /?
setlocal /?
另外还应阅读ROBOCOPY.exe和ROBOCOPY Exit Codes的SS64文档。