批处理 xcopy命令拷贝文件夹到指定目录下首先判断该目录磁盘空间是否够大,决定是否拷贝

哪位大侠可以帮忙写个批处理,就是在用xcopy拷贝文件夹到指定目录之前,第一步先获取到要拷贝文件夹字节大小,第二步再取到指定目录所在磁盘剩余空间大小,第三步,两者相比较,... 哪位大侠可以帮忙写个批处理,就是在用xcopy拷贝文件夹到指定目录之前,第一步先获取到要拷贝文件夹字节大小,第二步再取到指定目录所在磁盘剩余空间大小,第三步,两者相比较,当文件夹大小小于指定目录磁盘剩余空间,提示可以拷贝,否则提示指定目录磁盘剩余空间不再,请清理后再尝试拷贝。举例,比如要拷贝的D盘下某个文件夹有15G,但是拷贝到C盘时,C盘剩余空间只有10G,用户在已经拷贝一段时间后,发现拷贝数据不完全导致拷贝失败,希望能在用户操作前给予提示。
小弟分不多了,在此贡献出来,在此感谢各位大侠帮忙!
展开
 我来答
qop_dob
推荐于2016-10-20 · TA获得超过1.5万个赞
知道大有可为答主
回答量:1.3万
采纳率:79%
帮助的人:4040万
展开全部
@echo off
::获取需复制的文件夹
set "dir1=%~1"
::设置目标文件夹
set "dir2=D:\test\"
if not exist "%dir2%" md "%dir2%"
if not exist "%dir1%\" (
mode con cols=40 lines=3
color c
echo 错误:不支持拖曳文件到该批处理图标上!
ping 0 -n 3 >nul 2>nul
exit
)
color a
for /f "tokens=3" %%i in ('dir /s /a /-c "%dir1%" ^|findstr "个文件"') do (set "filessize=%%i")
for /f "tokens=3" %%z in ('dir /-c "%dir1:~0,3%"') do set "freesize=%%z"
>temp.vbs echo Dim a,b,c
>>temp.vbs echo a=%filessize%
>>temp.vbs echo b=%freesize%
>>temp.vbs echo c=a-b
>>temp.vbs echo If c^>0 Then
>>temp.vbs echo wscript.echo "True"
>>temp.vbs echo Else
>>temp.vbs echo wscript.echo "False"
>>temp.vbs echo End If
for /f %%a in ('cscript /nologo temp.vbs') do (set "t=%%a")
del temp.vbs /f /q >nul 2>nul
echo 需复制的文件夹为:%~n1
echo 所在位置为:%~dp1
echo 大小为:%filessize%字节
echo.
echo 目标文件夹为:%dir2%
echo 所在分区剩余大小为:%freesize%字节
echo.
if "%t%" equ "True" (
color c
echo 错误:目标磁盘剩余空间不足,请清理后再尝试拷贝!
ping 0 -n 4 >nul 2>nul
exit
) else (
echo 正在进行拷贝,请稍候……
xcopy "%dir1%" "%dir2%" /s /f /h
)
pause

把要复制的文件夹拖曳到批处理图标上即可

互助互利,请及时点击【采纳回答】

更多追问追答
追问
谢谢qop_dob大侠,问题得到解决了。还想问下子,第15,16行里面,都是用for取出第3列的容量值,可是15,16里面in 的不同内容,含义是什么?'dir /s /a /-c "%dir1%" ^|findstr "个文件"'这是难道是统计需复制文件夹下有多少个文件总共大小是多少,'dir /-c "%dir1:~0,3%"'这个是去目标文件夹0到3的内容?
追答
%dir1%是需复制的文件夹,15行整句确实是统计复制的文件夹里所有文件的总大小,16行有个错误,应该是%dir2:~0,3%,是获取目标磁盘,整句就是获取目标磁盘的剩余空间,而又因为批处理处理的数值范围有限,所以调用了vbs来作比较
互助互利,请及时点击【采纳回答】
请及时采纳回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式