上下文
我正在尝试制作一个可以扔到预先存在的文件夹中并对其进行升级的批处理脚本。想象一个看起来像这样的文件夹:
merge_new_stuff.bat的唯一目的是将 一切 放入new_files文件夹中,并将其放入domfolder中,替换所有早已存在的文件,例如word.txt,别忘了其他任何东西,并摆脱了upgrade_assets文件夹。因此,如果一切正常,运行后文件夹结构应如下所示:
我尝试过的事情
本能是仅使用简单的move
命令:move /y upgrade_assets\new_files\*
那会升级words.txt,但它会完全忽略文件夹。我只想要的一部分。
我尝试了for
循环,看是否会有所不同,结果相同:
for %%A in (upgrade_assets\new_files\*) do move /y %%A
接下来,我尝试遍历dir
结果和基本步骤:
for /f "tokens=*" %%A in ('dir /b /s /a:d "upgrade_assets\new_files"') do move /y "%%A\*.*" "%~dp0%%~nxA"
该 几乎 有效,可以正确移动odie.png和subfolder \ subsubfolder \ numbers.txt。但是,一旦尝试移动MONKEY.txt,它便决定制作一个名为“ awesomest”的文件,其中包含MONKEY.txt的内容?显然,它不能处理掉现有的文件夹,这绝对没有帮助。
环顾四周,I only found one thread that seems close to what I want.大部分答复都提到了xcopy / robocopy,但是考虑到潜在的更新大小,我想尽可能避免使用copy / delete方法。而且,当我更改接受的答案以适合我的工作时,它仍然存在多个文件夹之外的问题。
for /d /r upgrade_assets\new_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
所显示的所有内容。 / p>
最好,该解决方案应完全独立于文件夹中的实际文件,因此可以与任何更新一起使用。如果需要外部工具,请尽可能使用自由/免费软件。我正在运行Windows 10,但我知道该脚本将由使用Windows 7的人员运行。
答案 0 :(得分:0)
坦白地说,这完全可以满足您的要求。
robocopy .\upgrade_assets\new_files\ . /E /MOVE
它将创建目录和文件,并在完成后从源中删除。