如何让此备份批处理将文件复制回不同的文件夹?



帖子底部的当前状态。

我不是程序员。 我意识到这可能非常简单,但我达到了我的极限。

我正在寻找一种干净的方法(如果可能的话,除了列出要单独复制的每个文件之外(从子文件夹主题\暮光之城中获取文件.xml并将其备份到其余列出的文件将要到的同一"备份"文件夹,然后将其返回到其源文件夹。

我尝试的所有内容都导致主题文件夹中的所有内容最终都出现在根/脚本目录中,造成混乱。

@echo off
title Backup Notepad++ Settings
echo.
echo Backup Notepad++ Settings
echo.
cd /d %~dp0
MD "backup"
echo.
for %%f in (config.xml, contextMenu.xml, langs.xml, shortcuts.xml, userDefineLang.xml) do copy "%~dp0%%f" "backup"
echo.
echo Please do NOT close this window until you update Notepad++
echo.
echo Press any key AFTER updating to restore the backup files
echo.
pause
echo.
cd backup
copy *.xml "%~dp0"
cd /d %~dp0
echo.
del /s userDefinedLang-markdown.default.modern.xml
echo.
pause

澄清一下 - 脚本是从根记事本++目录中运行的。 它创建一个名为"备份"的文件夹,并将基本文件从那里复制到"备份",这些文件通常在提取可移植的N ++更新时被覆盖。 更新记事本++后,推进脚本会将文件从"备份"复制回其原始位置,覆盖"新/默认"文件。

我正在努力将暮光之城.xml从"主题"移动到"备份",然后再次回到"主题"以及当前正在备份并正确还原到记事本++目录中的适当位置的所有其他主题。

Notepad++ |- backup ------
|
|- themes ------ Twilight.xml
|
|- config.xml
|
|- session.xml
|
|- notepad++.exe
|
|- notepad++_backup_restore.bat


目前被困在这里,试图找到一种方法让Twilight.xml和userDefinedLang-markdown.default.modern.xml回到他们的源文件夹(分别为themesuserDefineLangs(,而不是发送到其余xmls的根目录。

@echo off
title Backup Notepad++ Settings
echo.
echo Backup Notepad++ Settings
echo.
cd %~dp0
if not exist "backup" (MD "backup")
set files="config.xml";"contextMenu.xml";"langs.xml";"session.xml";"shortcuts.xml";"userDefineLang.xml";"themesTwilight.xml";"userDefineLangsuserDefinedLang-markdown.default.modern.xml"
for %%f in (%files%) do copy "%~dp0%%~f" "%~dp0backup"
echo.
echo Please do NOT close this window until you update Notepad++
echo.
echo Press any key AFTER updating to restore the backup files
echo.
pause
echo.
cd backup
copy *.* "%~dp0"
cd %~dp0
echo.
pause

使用 Neko 的建议for %%f in (%files%) do copy "%~dp0" "%~dp0backup%%~f"(可能不正确(来解决此问题导致我的备份文件夹中的文件大小呈指数级增长,因此每次在测试期间运行时在根目录中。 它不是覆盖,而是以某种方式添加到每个文件中。

我试图用它来代替原始for以及补充。 此外,为了代替底部的copy,修改为大概(可能不是由于我缺乏理解(通过使用for %%f in (%files%) do copy "%~dp0backup%%~f" "%~dp0%%~f"和变体从备份复制回源位置。

@echo off
title Backup Notepad++ Settings
echo.
echo Backup Notepad++ Settings
echo.
cd %~dp0
if not exist "backup" (MD "backup")
echo.
set files="config.xml";"contextMenu.xml";"langs.xml";"shortcuts.xml";"userDefineLang.xml"
for %%f in (%files%) do copy "%~dp0%%~f" "%~dp0backup"
echo.
echo Please do NOT close this window until you update Notepad++
echo.
echo Press any key AFTER updating to restore the backup files
echo.
pause
echo.
cd backup
copy *.* "%~dp0"
cd %~dp0
echo.
del /s userDefinedLang-markdown.default.modern.xml
echo.
pause

根据您的代码,这就是我所能做的。我不确定您在代码的某些部分(如del /s userDefinedLang-markdown.default.modern.xml(中要完成什么,但我会把如何处理留给您。如果您也没有注意到,我更改了文件的最后部分之一copy *.* "%~dp0"将备份复制回普通notepad++文件夹中,因为我认为会有更多的东西要备份,而不仅仅是xml文件。另外,如果您还想备份themesTwilight.xml文件,您可以通过更改将其添加到%files%变量

set files="config.xml";"contextMenu.xml";"langs.xml";"shortcuts.xml";"userDefineLang.xml"

set files="config.xml";"contextMenu.xml";"langs.xml";"shortcuts.xml";"userDefineLang.xml";"themesTwilight.xml"

代码中的错误

总的来说,你的代码很好,但我发现了一些小错误。

  1. 例如,在for循环中,在%~dp0后有一个反斜杠((是多余的,因为默认情况下%~dp0父文件路径后已经有一个反斜杠。
  2. cd之后使用/d交换机也是多余的,因为您不会更换驱动器。
  3. 最后,当您声明backups目录已存在时,您在脚本中创建了另一个名为 的目录。

如果您对此答案有任何疑问,请随时在此答案的评论中提问。

相关内容

最新更新