Batch file 批处理文件::如果LSS未按预期工作

Batch file 批处理文件::如果LSS未按预期工作,batch-file,cmd,Batch File,Cmd,我拼凑了以下脚本来帮助Autodesk Vault Professional进行备份: @echo off setlocal enableDelayedExpansion echo setting up variables... SET VAULTBACKUPPATH=C:\Users\alex.fielder\Dropbox\Graitec\Vault Backup SET LOGFILEPATH=C:\Users\alex.fielder\Dropbox\Graitec\GRA038

我拼凑了以下脚本来帮助Autodesk Vault Professional进行备份:

    @echo off
setlocal enableDelayedExpansion
echo setting up variables...
SET VAULTBACKUPPATH=C:\Users\alex.fielder\Dropbox\Graitec\Vault Backup
SET LOGFILEPATH=C:\Users\alex.fielder\Dropbox\Graitec\GRA0387AF_Vault_Backup.txt
SET SEVENZIPLOGFILEPATH=C:\Users\alex.fielder\Dropbox\Graitec\GRA0387AF_Zip_Log.txt
SET SEVENZIPPATH=C:\ProgramData\chocolatey\bin\7za.exe
SET ADMSCONSOLEPATH=C:\Program Files\Autodesk\ADMS Professional 2017\ADMS Console\Connectivity.ADMSConsole.exe
SET NUMDAYSBACKUPTOKEEP=-15
SET MINMEMVALUE=2000000
SET MINDRIVESPACE=10000000
echo testing available system resources
for /f "skip=1" %%p in ('wmic os get freephysicalmemory') do (SET AVAILABLESYSTEMMEMORY=%%p)
rem echo "%AVAILABLESYSTEMMEMORY%"
if !AVAILABLESYSTEMMEMORY! LSS %MINMEMVALUE% (
    echo "%DATE% %TIME%: low available system memory, exiting" >> %LOGFILEPATH%
    exit /b 1
) ELSE (
    echo "%DATE% %TIME%: sufficient system memory, continuing" >> %LOGFILEPATH%
)
echo checking free disk space on C:\
FOR /F "usebackq tokens=3" %%s IN (`DIR C:\ /-C /-O /W`) DO (
    SET FREE_SPACE=%%s
)
if !FREE_SPACE! LSS !MINDRIVESPACE! (
    echo "%DATE% %TIME%: low space on C:, exiting" >> %LOGFILEPATH%
    exit /b 1
) ELSE (
    echo "%DATE% %TIME%: sufficient space on C:\, continuing" >> %LOGFILEPATH%
)
REM echo stopping and disabling Sophos
REM wmic service where "caption like 'Sophos%%'" call Stopservice
REM wmic service where "caption like 'Sophos%%' and  Startmode<>'Disabled'" call ChangeStartmode Disabled
echo pausing Dropbox, Searchindexer, Everything using the sysinternals tool PSSuspend!
pssuspend dropbox
pssuspend searchindexer
pssuspend everything


echo changing to working folder
cd "C:\Users\alex.fielder\Dropbox\Graitec\Vault Backup"
echo removing existing backup directories if there are any present
for /f %%i in ('dir /a:d /b Vault*') do rd /s /q %%i
echo performing vault backup from Vault Professional 2017
REM -WA is short for Windows Authentication - does not work with Vault basic!
call "%ADMSCONSOLEPATH%" -Obackup -B"%VAULTBACKUPPATH%" -WA -VAL -DBSC -S -L"%LOGFILEPATH%"

echo Beginning zip and verification using 7zip %date% - %time% >> "%SEVENZIPLOGFILEPATH%"
for /f "Tokens=*" %%i in ('dir /a:d /b Vault*') do (
echo creating a .7z archive of latest backup using the 7zip command line.
call "%SEVENZIPPATH%" a -t7z "%%i.7z" "%%i" -mmt -mx1
echo testing the archive - results can be found in the Vault backup log file!
call "%SEVENZIPPATH%" t "%%i.7z" -mmt -r >> "%SEVENZIPLOGFILEPATH%"
)
echo completed zip and verification using 7zip %date% - %time% >> "%SEVENZIPLOGFILEPATH%"

REM for /f "Tokens=*" %%i in ('dir /b Vault*.7z') do call "%SEVENZIPPATH%" t "%%i" -mmt -r >> "%SEVENZIPLOGFILEPATH%"

echo removing backup directory to prevent Dropbox syncing it to the cloud.
for /f %%i in ('dir /a:d /b Vault*') do rd /s /q %%i
echo removing backups older than 30 days to prevent Dropbox space getting eaten up unecessarily.
forfiles /p "%VAULTBACKUPPATH%" /s /m *.* /d "%NUMDAYSBACKUPTOKEEP%" /c "cmd /c del @path"
echo resuming Dropbox, Searchindexer, Everything and Sophos
pssuspend -r dropbox
pssuspend -r searchindexer
pssuspend -r everything
REM wmic service where "caption like 'Sophos%%' and Startmode='Disabled'" call ChangeStartmode Automatic
REM wmic service where "caption like 'Sophos%%'" call Startservice
echo finished!
有谁能给我指点一下我该如何纠正这一点吗

我确实找到了这个帖子:

但正如你在上面看到的,我尝试了几种不同的变体,没有一种成功

谢谢


Alex。

您可以尝试另一种方法,让WMI确定是否低于您的最小值

@ECHO关闭
ECHO正在设置变量。。。
设置“LOGFILEPATH=C:\Users\alex.fielder\Dropbox\Graitec\GRA0387AF\u Vault\u Backup.txt”
设置“MINMEMVALUE=2000000”
设置“MINDRIVESPACE=10000000”
回波测试可用的系统资源
回音检查可用系统内存
设置“FPM=足够的系统内存,继续”
对于/F“USEBACKQ EOL=F”%%A IN(`WMIC OS WHERE^
“FreePhysicalMemory<'%MINMEMVALUE%'”获取FreePhysicalMemory 2^>NUL`
)(%%A)中%%B的DO设置为“FPM=%%B”
如果不是“%FPM%”,则为“足够的系统内存,继续”(
设置“FPM=低可用系统内存,正在退出”)
回显“%DATE%%TIME%:%FPM%”>>“%LOGFILEPATH%”
回音检查可用系统驱动器空间
设置“SFP=在%SystemDrive%上有足够的空间,继续”
对于/F“USEBACKQ EOL=F”%%A IN(`WMIC LOGICALDISK,其中^
“DeviceID='%SystemDrive%'和自由空间<'%MINDRIVESPACE%'”^
在(%%A)DO集合“SFP=%%B”中为%%B获取自由空间2^>NUL`)DO
如果不是“%SFP%”,则在%SystemDrive%上有足够的空间,继续(
设置“SFP=%SystemDrive%上的空间不足,正在退出”)
回显“%DATE%%TIME%:%SFP%”>>“%LOGFILEPATH%”
暂停

您要比较的数字是有符号的32位整数,还是太大了?如果是,请用20个前导零填充每个数字,然后比较两个结果字符串的最后20个字符,引用每个数字以确保进行字母比较。@aschipfl:我不确定您的意思是什么?这些数字存储在脚本顶部附近的变量中,即:SET MINMEMVALUE=2000000 SET MINDRIVESPACE=10000000@Magoo:我正在尝试查看可用系统内存是否大于设置值,而不是字符串比较。但是
可用空间如何?batch只能处理[-2^31,2^31-1]范围内的整数,因此[-21474836482147483647]…这是一个很棒的组件,非常感谢!
    echo testing available system resources
for /f "skip=1" %%p in ('wmic os get freephysicalmemory') do (SET AVAILABLESYSTEMMEMORY=%%p)
rem echo "%AVAILABLESYSTEMMEMORY%"
if !AVAILABLESYSTEMMEMORY! LSS %MINMEMVALUE% (
    echo "%DATE% %TIME%: low available system memory, exiting" >> %LOGFILEPATH%
    exit /b 1
) ELSE (
    echo "%DATE% %TIME%: sufficient system memory, continuing" >> %LOGFILEPATH%
)
echo checking free disk space on C:\
FOR /F "usebackq tokens=3" %%s IN (`DIR C:\ /-C /-O /W`) DO (
    SET FREE_SPACE=%%s
)
if !FREE_SPACE! LSS !MINDRIVESPACE! (
    echo "%DATE% %TIME%: low space on C:, exiting" >> %LOGFILEPATH%
    exit /b 1
) ELSE (
    echo "%DATE% %TIME%: sufficient space on C:\, continuing" >> %LOGFILEPATH%
)