帖子底部的当前状态。
我不是程序员。 我意识到这可能非常简单,但我达到了我的极限。
我正在寻找一种干净的方法(如果可能的话,除了列出要单独复制的每个文件之外(从子文件夹主题\暮光之城中获取文件.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回到他们的源文件夹(分别为themes
和userDefineLangs
(,而不是发送到其余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"
代码中的错误
总的来说,你的代码很好,但我发现了一些小错误。
- 例如,在
for
循环中,在%~dp0
后有一个反斜杠((是多余的,因为默认情况下
%~dp0
父文件路径后已经有一个反斜杠。 - 在
cd
之后使用/d
交换机也是多余的,因为您不会更换驱动器。 - 最后,当您声明
backups
目录已存在时,您在脚本中创建了另一个名为 的目录。
如果您对此答案有任何疑问,请随时在此答案的评论中提问。