>上下文
我正在尝试制作一个可以扔到预先存在的文件夹中并对其进行升级的批处理脚本。想象一个看起来像这样的文件夹:
- 多姆文件夹
- 许可证
- merge_new_stuff.bat
- 字.txt(有6个字(
- 真棒文件夹
- 加菲猫.png
- upgrade_assets
- 升级信息.txt
- new_files
- 单词.txt(共7个单词(
- 真棒文件夹
- 欧迪.png
- 最棒的
- 猴子 .txt
- 子文件夹
- 子子文件夹
- 数字.txt
- 子子文件夹
merge_new_stuff.bat的唯一目的是获取new_files文件夹中的所有内容,并将其放入domfolder,替换任何预先存在的文件,如words.txt,保留其他任何内容,并删除upgrade_assets文件夹。因此,如果一切正常,则运行后的文件夹结构应如下所示:
- 多姆文件夹
- 许可证
- merge_new_stuff.bat
- 单词.txt(共7个单词(
- 真棒文件夹
- 加菲猫.png
- 欧迪.png
- 最棒的
- 猴子 .txt
- 子文件夹
- 子子文件夹
- 数字.txt
- 子子文件夹
我尝试过什么
第一直觉是只使用一个简单的move
命令:move /y upgrade_assetsnew_files*
那升级了单词.txt,但它完全忽略了文件夹。
我尝试了一个for
循环,看看它是否会以某种方式有所不同,相同的结果:for %%A in (upgrade_assetsnew_files*) do move /y %%A
接下来,我尝试在基本移动dir
:for /f "tokens=*" %%A in ('dir /b /s /a:d "upgrade_assetsnew_files"') do move /y "%%A*.*" "%~dp0%%~nxA"
这几乎有效,正确移动 odie.png 和子文件夹\子子文件夹\数字.txt。但是一旦它试图移动MONKEY.txt,它...决定制作一个名为"awesomest"的文件,其中包含 MONKEY.txt 的内容?很明显,它无法处理访问预先存在的文件夹,这绝对没有帮助。
环顾四周,我只发现了一条似乎接近我想要的线程。大多数回复都提到了 xcopy/robocopy,但考虑到更新的潜在大小,我想尽可能避免复制/删除方法。当我更改接受的答案以适应我正在做的事情时,它仍然存在多个文件夹深度的问题。
for /d /r upgrade_assetsnew_files %%A in (*) do (
if exist "%~dp0%%~nA" (
dir "%%A" | find "0 File(s)" > NUL
if errorlevel 1 move /y "%%A*.*" "%~dp0%%~nA"
) else (
move /y "%%A" %~dp0
)
)
我很确定问题集中在%~dp0%%~nA
,我需要一种方法来让它读取的不仅仅是要复制的文件所在的文件夹,这是%%~nA
显示的全部内容。
最好,该解决方案应完全独立于文件夹中的实际文件,以便它可以与任何更新一起使用。如果我需要外部工具,我希望它们尽可能是自由/自由软件。我运行的是Windows 10,但我知道这个脚本将由使用Windows 7的人运行。
坦率地说,这将完全按照您的要求。
robocopy .upgrade_assetsnew_files . /E /MOVE
它将创建目录和文件,并在完成后从源中删除。