你可以检查并告诉我为什么我收到这个错误以及如何解决它?
此代码生成下一个批处理脚本,并以Oracle格式(PL / SQL)编写:
lv_content0 := 'NET USE Z: '||lv_folder;
lv_content1:= 'md '||lv_path; --- what is the content of .bat
lv_content2:= 'start "" "'||lv_path||'"';
--lv_content3:= 'FOR /D %%I in ('|| :CMMT_FIX_MASTER.V_FIX_LOC ||'\*.*) DO move %%I '||lv_path;
lv_content3:= 'XCOPY /H /D /Y /S /E /V /F '|| :CMMT_FIX_MASTER.V_FIX_LOC ||'\*.* '||lv_path;
--13062012 add exception to move folder to patches folder --------
lv_content4a:= '@For /F "tokens=*" %%a IN (' || '''"dir /s /-c "' || :CMMT_FIX_MASTER.V_FIX_LOC || '" | find "bytes" | find /v "free""''' || ') do @Set summaryout1=%%a';
lv_content4b:= '@For /f "tokens=1,2 delims=)" %%a in ("%summaryout1%") do @set filesout1=%%a&set sizeout1=%%b';
lv_content4c:= '@Set sizeout1=%sizeout1:bytes=%' ;
lv_content4d:= '@Set sizeout1=%sizeout1: =%';
lv_content5a:= '@For /F "tokens=*" %%a IN ('|| '''"dir /s /-c "' || lv_path || '" | find "bytes" | find /v "free""''' || ') do @Set summaryout2=%%a';
lv_content5b:= '@For /f "tokens=1,2 delims=)" %%a in ("%summaryout2%") do @set filesout2=%%a&set sizeout2=%%b';
lv_content5c:= '@Set sizeout2=%sizeout2:bytes=%';
lv_content5d:= '@Set sizeout2=%sizeout2: =%';
lv_content6:= '@if %sizeout1% == %sizeout2%' || ' ' || 'RD /S ' || :CMMT_FIX_MASTER.V_FIX_LOC ;
lv_content7:= '@if not %sizeout1% == %sizeout2%' || ' ' || 'echo Folders are not completely sync..Please check !! ' ;
lv_content8:= '@if not %sizeout1% == %sizeout2%' || ' ' || 'pause' ;
结果是:
NET USE Z: \\ABC\
md \\XXXX\2018\2018-01\10012018\
start "" "\\XXXX\2018\2018-01\10012018\"
XCOPY /H /D /Y /S /E /V /F P:\AAAA\19070\*.* \\XXXX\2018\2018-01\10012018\
@For /F "tokens=*" %%a IN ('"dir /s /-c "P:\AAAA\19070" | find "bytes" | find /v "free""') do @Set summaryout1=%%a
@For /f "tokens=1,2 delims=)" %%a in ("nullummaryout1%") do @set filesout1=%%a&set sizeout1=%%b
@Set sizeout1=nullizeout1:bytes=%
@Set sizeout1=nullizeout1: =%
@For /F "tokens=*" %%a IN ('"dir /s /-c "\\XXXX\2018\2018-01\10012018\" | find "bytes" | find /v "free""') do @Set summaryout2=%%a
@For /f "tokens=1,2 delims=)" %%a in ("nullummaryout2%") do @set filesout2=%%a&set sizeout2=%%b
@Set sizeout2=nullizeout2:bytes=%
@Set sizeout2=nullizeout2: =%
@if nullizeout1% == nullizeout2% RD /S P:\AAAA\19070
@if not nullizeout1% == nullizeout2% echo Folders are not completely sync..Please check !!
@if not nullizeout1% == nullizeout2% pause
EXIT;
错误:
2 File(s) copied
The system cannot find the file nullummaryout1b @Set sizeout1 nullizeout1:bytes @Set sizeout1 nullizeout1: @For /F "tokens=*" %a IN ('"dir /s /-c "\\XXXX\2018\2018-01\10012018\" | find "bytes" | find /v "free""'.
答案 0 :(得分:1)
代码非常笨拙,但这只是一个问题。
此代码:
@Set sizeout1=nullizeout1:bytes=%
@Set sizeout1=nullizeout1: =%
没有逻辑意义。
而且:
@if not nullizeout1% == nullizeout2% echo Folders are not completely sync..Please check !!
@if not nullizeout1% == nullizeout2% pause
同样会产生语法错误。
请将原始代码与此“迁移”版本进行比较。
现在 - 假设原始版本中的%s
已被迁移版本中的null
替换。原来那将是一个更明智的
@Set sizeout1=%sizeout1:bytes=%
@Set sizeout1=%sizeout1: =%
@if not %sizeout1% == %sizeout2% echo Folders are not completely sync..Please check !!
@if not %sizeout1% == %sizeout2% pause
仍然很笨拙,但现在有效且实际上正在做点什么。
因此,我的结论是,您的问题是您的迁移机制由于某种原因已将%s
转换为null
。
从那里,修复就是你的法庭。
我不熟悉Oracle表单,但如果您要动态生成批处理,那么您需要找到一种方法来逃避导致%s
替换为当前值s
的处理。 1}}(并且s
未定义,因此它被null
替换。我不知道转义字符是什么,或者作为一个快速而肮脏的解决方案,您可以将s
的值设置为文字%s
。
如果这只是一个要运行的批处理文件并且没有更改,那么使用文本编辑器将每个字符串null
替换为%s
并保存结果,然后按名称运行批处理而不是从Oracle重新生成它。
答案 1 :(得分:0)
问题是由于使用PUTF而不是PUT。请参阅此问题以获取更多信息: enter link description here