BATCH:在变量中设置不完整的路径

问题描述 投票:0回答:2

我正在尝试从文件夹中备份一些信息。我尽力做到这一点,以便我的同事也可以使用它。其中的文件夹是要备份的文件,每台机器上名称不一样。

我在不同的文件夹中工作。

我能在CMD中做的是:

cd %APPDATA%\Mozilla\Firefox\Profiles\*.default-esr

我可以导航到 C:\Users***\AppData\Roaming\Mozilla\Firefox\Profiles\k6lfpnug.default-esr

我尝试在我的批处理文件中实现它:

@echo off

set CURRENT_DIR=%~dp0
set FIREFOX_DIR=%APPDATA%\Mozilla\Firefox\Profiles\*.default-esr

set BAK_FIREFOX_DIR=%CURRENT_DIR%\Firefox-%TIMESTAMP%

mkdir %BAK_Firefox_DIR%

robocopy %FIREFOX_DIR% %BAK_Firefox_DIR% places.sqlite

我得到了什么:

ERREUR : paramètre non valide #1 : "C:\Users\***\AppData\Roaming\Mozilla\Firefox\Profiles\*.default-esr"

我所期望的是:

set FIREFOX_DIR=%APPDATA%\Mozilla\Firefox\Profiles\*.default-esr
echo %FIREFOX_DIR%

给我

C:\Users\***\AppData\Roaming\Mozilla\Firefox\Profiles\k6lfpnug.default-esr

batch-file directory path subdirectory
2个回答
1
投票

可以使用以下注释的批处理文件来完成备份任务:

@echo off
setlocal EnableExtensions DisableDelayedExpansion
rem Search for the default Firefox profiles directory. If one of the two
rem possible wildcard patterns return a positive match, make a backup of
rem the file with annotations, bookmarks, favorite icons, input history,
rem keywords, and browsing history (a record of visited pages) in that
rem directory using current date and time in the format yyyy-MM-dd_hh_mm
rem (international date format + hour and minute) in the destination
rem directory name.
for /D %%# in ("%APPDATA%\Mozilla\Firefox\Profiles\*.default-esr" "%APPDATA%\Mozilla\Firefox\Profiles\*.default-release") do (
    for /F "tokens=1-5 delims=/: " %%G in ('%SystemRoot%\System32\robocopy.exe "%SystemDrive%\|" . /NJH') do (
        %SystemRoot%\System32\robocopy.exe "%%#" "%~dp0Firefox-%%G-%%H-%%I_%%J_%%K" places.sqlite /NDL /NFL /NJH /NJS /R:1 /W:5 >nul
        goto EndBatch
    )
)
echo ERROR: Could not find the default Firefox profile folder.
echo(
pause
:EndBatch
endlocal

ROBOCOPY 在目标目录本身不存在的情况下创建整个目录树。

%~dp0
始终扩展为以反斜杠结尾的目录路径。将
\
与文件/文件夹名称或通配符模式连接时,不应再添加一个
%~dp0

要了解所使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完整、仔细地阅读每个命令显示的帮助页面。

  • echo /?
  • endlocal /?
  • for /?
  • goto /?
  • pause /?
  • rem /?
  • robocopy /?
  • setlocal /?

另请参阅:


0
投票

谢谢你!我还使用 WMIC 的时间戳。

代码现在看起来像这样:

@ECHO OFF

set CURRENT_DIR=%~dp0
set TASKBAR_DIR=%APPDATA%\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar
set QUICK_ACCES_DIR=%APPDATA%\Microsoft\Windows\Recent\AutomaticDestinations
for /D %%# in ("%APPDATA%\Mozilla\Firefox\Profiles\*.default-esr" "%APPDATA%\Mozilla\Firefox\Profiles\*.default-release") do (
    set FIREFOX_DIR=%%#
)
for /F "tokens=2 delims==." %%I in ('%SystemRoot%\System32\wbem\wmic.exe OS GET LocalDateTime /VALUE') do (set "DateTime=%%I")
set "TIMESTAMP=%DateTime:~0,8%_%DateTime:~8,2%-%DateTime:~10,2%"

set BAK_FIREFOX_DIR=%CURRENT_DIR%\Firefox-%TIMESTAMP%
mkdir %BAK_Firefox_DIR%
robocopy %FIREFOX_DIR% %BAK_Firefox_DIR% key4.db                /NDL /NFL /NJH /NJS /R:1 /W:5
robocopy %FIREFOX_DIR% %BAK_Firefox_DIR% logins.json            /NDL /NFL /NJH /NJS /R:1 /W:5
robocopy %FIREFOX_DIR% %BAK_Firefox_DIR% logins-backup.json     /NDL /NFL /NJH /NJS /R:1 /W:5
robocopy %FIREFOX_DIR% %BAK_Firefox_DIR% places.sqlite          /NDL /NFL /NJH /NJS /R:1 /W:5
robocopy %FIREFOX_DIR% %BAK_Firefox_DIR% favicons.sqlite        /NDL /NFL /NJH /NJS /R:1 /W:5
robocopy %FIREFOX_DIR% %BAK_Firefox_DIR% formhistory.sqlite     /NDL /NFL /NJH /NJS /R:1 /W:5
robocopy %FIREFOX_DIR% %BAK_Firefox_DIR% cookies.sqlite         /NDL /NFL /NJH /NJS /R:1 /W:5
robocopy %FIREFOX_DIR% %BAK_Firefox_DIR% cert9.db               /NDL /NFL /NJH /NJS /R:1 /W:5
robocopy %FIREFOX_DIR% %BAK_Firefox_DIR% handlers.json          /NDL /NFL /NJH /NJS /R:1 /W:5

pause
© www.soinside.com 2019 - 2024. All rights reserved.