Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 重复上一个工作程序的批处理文件_Batch File - Fatal编程技术网

Batch file 重复上一个工作程序的批处理文件

Batch file 重复上一个工作程序的批处理文件,batch-file,Batch File,我需要关于批处理脚本的帮助。它运行得非常完美,但后来当我想运行它时,它会不断重复我之前显示的结果。上周我执行了一个名为运行echo的程序“上周第一次运行的程序”,到今天我试图通过echo运行它时,“这就是今天”。它运行并显示以前的结果“ PS代码现在工作得很好。。。。 @回音 SETLOCAL ENABLEDELAYEDEXPANSION set file="C:\compress.gdb" if not exist %file% goto :EOF FOR %%A IN (%file%)

我需要关于批处理脚本的帮助。它运行得非常完美,但后来当我想运行它时,它会不断重复我之前显示的结果。上周我执行了一个名为运行echo的程序“上周第一次运行的程序”,到今天我试图通过echo运行它时,“这就是今天”。它运行并显示以前的结果“

PS代码现在工作得很好。。。。 @回音

SETLOCAL ENABLEDELAYEDEXPANSION
set file="C:\compress.gdb"


if not exist %file% goto :EOF
FOR %%A IN (%file%) DO set size=%%~zA

>"%temp%\math.vbs" echo Set objArgs = WScript.Arguments: num = objArgs(0) : result = 0
>>"%temp%\math.vbs" echo if num ^> 1073741824 then result=1
>>"%temp%\math.vbs" echo if num ^> 6442450944 then result=2
>>"%temp%\math.vbs" echo Wscript.echo result

for /f %%a in ('cscript /nologo "%temp%\math.vbs" %size% ') do set z=%%a

del "%temp%\math.vbs"

:: z will be 2 if %size% greater than 6442450944
:: z will be 1 if %size% greater than 1073741824
:: z will be 0 if %size% less    than 1073741825

echo %z%

if %z% EQU 2 (goto EXECUTE)
if %z% EQU 0 (goto LOGOUT)
if %z% EQU 1 (goto LOGOUT)

goto :EOF

:EXECUTE

call "C:\Batch_Scripts_Sensitive\message.rtf" /max
"C:\Program Files\Embarcadero\InterBase\bin\isql" -i "C:\Batch_Scripts_Sensitive\Empty_Tables_2.sql" localhost:"C:\Program Files (x86)\GE Aviation\AB139 HGS\DB\compress.GDB" -user xxxxxxx -pass xxxxxxx

:: Create Date for Back up and Restore

set hour=%time:~0,2%
if "%hour:~0,1%" == " " set hour=0%hour:~1,1%
echo hour=%hour%
set min=%time:~3,2%
if "%min:~0,1%" == " " set min=0%min:~1,1%
echo min=%min%
set secs=%time:~6,2%
if "%secs:~0,1%" == " " set secs=0%secs:~1,1%
echo secs=%secs%

set year=%date:~-4%
echo year=%year%
set month=%date:~3,2%
if "%month:~0,1%" == " " set month=0%month:~1,1%
echo month=%month%
set day=%date:~0,2%
if "%day:~0,1%" == " " set day=0%day:~1,1%
echo day=%day%

rem use this if you want to add seconds rem set datetimef=mydate_%year%_%month%_%day%_%hour%:%min%:%secs%
set datetimef=%year%_%month%_%day%_%hour%%min%
echo datetimef=%datetimef%
mkdir "C:\Monthly-gdb-restore\%datetimef%"


copy "C:\compress.gdb" "C:\Monthly-gdb-restore\%datetimef%" /Y


:: Delete empty folder in this location %Datetime%

for /f "delims=" %%d in ('dir "C:\Monthly-gdb-restore" /s /b /ad ^| sort /r') do rd "%%d"


forfiles /P "C:\Monthly-gdb-restore"  /S /M *.gdb /D -7 /C "cmd /c del @PATH /q"

"C:\Program Files\Embarcadero\InterBase\bin\gbak"   -b "C:\compress.gdb" "C:\compress.ibk"  -user xxxxxxx -password xxxxxxx

set hour=%time:~0,2%
if "%hour:~0,1%" == " " set hour=0%hour:~1,1%
echo hour=%hour%
set min=%time:~3,2%
if "%min:~0,1%" == " " set min=0%min:~1,1%
echo min=%min%
set secs=%time:~6,2%
if "%secs:~0,1%" == " " set secs=0%secs:~1,1%
echo secs=%secs%

set year=%date:~-4%
echo year=%year%
set month=%date:~3,2%
if "%month:~0,1%" == " " set month=0%month:~1,1%
echo month=%month%
set day=%date:~0,2%
if "%day:~0,1%" == " " set day=0%day:~1,1%
echo day=%day%

rem use this if you want to add seconds rem set datetimef=mydate_%year%_%month%_%day%_%hour%:%min%:%secs%
set datetimef=%year%_%month%_%day%_%hour%%min%
echo datetimef=%datetimef%
mkdir "C:\Monthly-ibk-backup\%datetimef%"

copy "C:\compress.ibk"   "C:\Monthly-ibk-backup\%datetimef%"  /Y

:: Delete empty folder in this location %Datetime%

for /f "delims=" %%d in ('dir "C:\Monthly-ibk-backup" /s /b /ad ^| sort /r') do rd "%%d"

forfiles /P "C:\Monthly-ibk-backup"  /S /M *.ibk /D -7 /C "cmd /c del @PATH /q"

"C:\Program Files\Embarcadero\InterBase\bin\gbak"  -R "C:\compress.ibk" "C:\compress.gdb" -user xxxxxxx -password xxxxxxx

 goto FINISH


:LOGOUT

Echo " The size of the database file is not up to 6GB

goto :EOF

:FINISH

ECHO " The database for xxxxxxx  was up to 6GB OR MORE, therefore proper backup and restoration has been performed.





goto :EOF

如果您两次都在同一个控制台窗口中运行它,那么问题很可能是未初始化的变量,并且您看到的是最后一个结果

要使用VBS检查数字,请尝试将其作为代码的第一部分。 保留最后一个
goto:eof
,以防止其通过比较落入以下代码

检查最终的if比较,确保他们正在做你想要的事情

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
set file="C:\Program Files (x86)\GE Aviation\AB139 HGS\DB\AW139 DB.gdb"


if not exist %file% goto :EOF
FOR %%A IN (%file%) DO set size=%%~zA

>"%temp%\math.vbs" echo Set objArgs = WScript.Arguments: num = objArgs(0) : result = 0
>>"%temp%\math.vbs" echo if num ^> 1073741824 then result=1
>>"%temp%\math.vbs" echo if num ^> 6442450944 then result=2
>>"%temp%\math.vbs" echo Wscript.echo result

for /f %%a in ('cscript /nologo "%temp%\math.vbs" %size% ') do set z=%%a

del "%temp%\math.vbs"

:: z will be 2 if %size% greater than 6442450944
:: z will be 1 if %size% greater than 1073741824
:: z will be 0 if %size% less    than 1073741825

if %z% EQU 2 (goto EXECUTE) 
if %z% EQU 1 (goto EXECUTE) 
if %z% EQU 0 (goto LOGOUT)

goto :EOF

如果您两次都在同一个控制台窗口中运行它,那么问题很可能是未初始化的变量,并且您看到的是最后一个结果

要使用VBS检查数字,请尝试将其作为代码的第一部分。 保留最后一个
goto:eof
,以防止其通过比较落入以下代码

检查最终的if比较,确保他们正在做你想要的事情

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
set file="C:\Program Files (x86)\GE Aviation\AB139 HGS\DB\AW139 DB.gdb"


if not exist %file% goto :EOF
FOR %%A IN (%file%) DO set size=%%~zA

>"%temp%\math.vbs" echo Set objArgs = WScript.Arguments: num = objArgs(0) : result = 0
>>"%temp%\math.vbs" echo if num ^> 1073741824 then result=1
>>"%temp%\math.vbs" echo if num ^> 6442450944 then result=2
>>"%temp%\math.vbs" echo Wscript.echo result

for /f %%a in ('cscript /nologo "%temp%\math.vbs" %size% ') do set z=%%a

del "%temp%\math.vbs"

:: z will be 2 if %size% greater than 6442450944
:: z will be 1 if %size% greater than 1073741824
:: z will be 0 if %size% less    than 1073741825

if %z% EQU 2 (goto EXECUTE) 
if %z% EQU 1 (goto EXECUTE) 
if %z% EQU 0 (goto LOGOUT)

goto :EOF

set minbytesize=6442450944
中的数字太大。
批处理只能处理32位数字

但当您引用数字时,将使用字符串比较函数,因此
“9”
的大小将大于
“6442450944”

为了得到正确的比较,你可以在数字前面加上零,在你的例子中,这很简单,因为你知道第二个数字有多长

...
set "size=000000000000%size%"
set "size=%size:~-10%"
if "%size%" GEQ "%minbytesize%" (goto EXECUTE) 
它仍然是一个字符串比较,但现在对于数字也是正确的

顺便说一句,这不是你的主要问题。
最好将
ECHO设置为ON
,查看问题发生的位置

您使用的是什么时间格式?

如果在
set/a hh=%hh%+100
中使用前缀零表示出现问题的小时数,则
set minbytesize=6442450944
中的数字太大了。
批处理只能处理32位数字

但当您引用数字时,将使用字符串比较函数,因此
“9”
的大小将大于
“6442450944”

为了得到正确的比较,你可以在数字前面加上零,在你的例子中,这很简单,因为你知道第二个数字有多长

...
set "size=000000000000%size%"
set "size=%size:~-10%"
if "%size%" GEQ "%minbytesize%" (goto EXECUTE) 
它仍然是一个字符串比较,但现在对于数字也是正确的

顺便说一句,这不是你的主要问题。
最好将
ECHO设置为ON
,查看问题发生的位置

您使用的是什么时间格式?


如果在
set/a hh=%hh%+100

set file=“C:\Program Files(x86)\GE Aviation\AB139 HGS\DB\AW139 DB.gdb”set minbytesize=6442450944 set gigbytesize=1073741824如果存在%file%(对于%%a IN(%file%)请设置大小=%~zA)如果“%size%”GEQ“%minbytesize%”(转到执行)如果不是“%size%”GEQ“%minbytesize%“(转到注销)@Michealossaye-你应该将其编辑到你的问题中-这会使阅读更容易,一方面。我已经将代码放在问题部分。@Michealossaye你不应该在公共论坛上发布机密材料。也不应该是部分机密代码。我已经删除了任何其他可能敏感的信息,大多数路径文件都是常见的示例es.set file=“C:\Program Files(x86)\GE Aviation\AB139 HGS\DB\AW139 DB.gdb”set minbytesize=6442450944 set gigbytesize=1073741824如果存在%file%(对于%%A IN(%file%)则设置大小=%%~zA)如果“%size%”GEQ“%minbytesize%”(转到执行)如果不是“%size%”GEQ“%minbytesize%”(转到注销)@Michealossaye-你应该将其编辑到你的问题中-这会使阅读更容易,一方面。我已经将代码放在问题部分。@Michealossaye你不应该在公共论坛上发布机密材料。也不应该是部分机密代码。我已经删除了任何其他可能敏感的信息,大多数路径文件都是常见的示例是的。谢谢jeb,但情况不能是大小,因为它以前工作正常,因此不确定大小是否精确。这是64位版本的windows 7。我已将完整代码放在程序下方。jeb,如果我想将其除以1024转换为兆字节呢?我应该如何使用Set/A进行此操作?如何使用can我使用适当的变量转换文件本身,以使脚本处理32位数字。干杯,谢谢。谢谢jeb,文件aw 139是800 MB,但在使用您建议的代码后仍然可以执行。请看我定义它的方式:1.如果存在%file%(对于%%A in(%file%)DO(set size=%%~zA))set“size=000000000000%size%“设置”size=%size:~-10%“如果“%size%”GEQ“%minbytesize%”(转到执行)如果不是“%size%”,GEQ“%minbytesize%”(转到执行)现在在我删除“来自包含大小和minbytesize的If。它去注销。同样,当文件现在超过6GB时,需要我将引号放回原处。我只是不明白。dbenham Thanke jeb有一篇很棒的文章,但是情况不能是尺寸,因为它以前工作正常,所以不确定是否是尺寸问题。它是64位版本的windows 7。我已经把完整的代码放在了程序的下面。Jeb,如果我想把它除以1024,转换成兆字节,怎么样?我应该如何使用Set/A来实现这一点?如何使用适当的变量转换文件本身,以使脚本处理32位数字。干杯,谢谢。谢谢jeb,AW139文件是800MB,但是在使用了你建议的代码之后,它仍然可以执行。看看我对它的定义:1。如果存在%file%(对于(%file%)中的%%A,则执行(设置大小=%%~zA))设置“大小=000000000000%size%”如果“%size%”GEQ“%minbytesize%”,则设置“大小=%size:~-10%”(转到执行)