这是我的批处理文件,我需要将文件复制到一个文件夹中,因为我需要检查目的地,它是否为空,如果它不是空的那么我需要检查目标是否是文件夹(如果destination = dsjffj,则必须退出批处理文件),目标需要有有效的文件夹路径。
if "Destination"=="" (
set errorlevel=1
exit /b
) else (
dir /ad /b "Destination" 1> NUL 2> NUL
if %ERRORLEVEL% EQU 0 (
copy "Source" "Destination" /Y
) else (
exit /b
)
)
我也引用了一些堆栈溢出链接,但是这个批处理文件正在验证空目的地,但它没有正确检查文件夹
答案 0 :(得分:0)
避免将值分配给volatile Windows environment variables,例如set errorlevel=1
。阅读Dave Benham对setting ERRORLEVEL to 0 question的回复:
如果要强制将errorlevel强制为0,则可以使用此方法 完全不直观但非常有效的语法:
(call )
。空间 在调用之后是至关重要的。如果要将errorlevel设置为1,则为 可以使用(call)
。至关重要的是,之后没有任何空间 呼叫
下一个评论的代码段可以提供帮助:
@ECHO OFF
set "sourcefolder=D:\test\fooSrcFldr"
set "targetfolder=D:\test\fooDstFldr"
set "sourcefiles="
rem check source folder existence
if exist "%sourcefolder%\" (
rem check source folder for its content
for /F "delims=" %%G in ('dir /B /A "%sourcefolder%\*" 2^>NUL') do (
set "sourcefiles=%%G"
)
rem check whether source folder is empty
if not defined sourcefiles (
echo source folder "%sourcefolder%\" is empty
exit /B 1
)
) else (
echo source folder "%sourcefolder%\" does not exist
exit /B 2
)
rem check target folder existence
if exist "%targetfolder%\" (
rem target folder "%targetfolder%\" exists
) else (
rem check whether it's possible to create target folder
if exist "%targetfolder%" (
echo cannot create target folder "%targetfolder%\"
echo as there exists another file "%targetfolder%" of the same name
exit /B 3
) else (
echo going to create target folder "%targetfolder%\"
md "%targetfolder%"
)
)
rem /L switch: do not copy but merely display items that would be copied
xcopy /E /C /H /R /L "%sourcefolder%\*" "%targetfolder%\"
rem remove /L switch from above line while debugged
exit /B 0
输出(请注意,初始copy
和md
命令仅用于说明常用的简化md "D:\test\fooDstFldr\" 2>NUL
是不够的)
==> copy nul "D:\test\fooDstFldr"
1 file(s) copied.
==> md "D:\test\fooDstFldr\"
A subdirectory or file D:\test\fooDstFldr\ already exists
==> D:\bat\SO\33603488.bat
source folder "D:\test\fooSrcFldr\" does not exist
==> md "D:\test\fooSrcFldr\"
==> D:\bat\SO\33603488.bat
source folder "D:\test\fooSrcFldr\" is empty
==> type nul>"D:\test\fooSrcFldr\foo.txt"
==> D:\bat\SO\33603488.bat
cannot create target folder "D:\test\fooDstFldr\"
as there exists another file "D:\test\fooDstFldr" of the same name
==> del "D:\test\fooDstFldr"
==> D:\bat\SO\33603488.bat
going to create target folder "D:\test\fooDstFldr\"
D:\test\fooSrcFldr\foo.txt
1 File(s)
==>