[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] 批处理判断硬盘剩余空间再复制文件

需求如下
当D盘剩余空间大于100G则复制A文件到D 否则复制到E

假如复制文件当前目录下的,POWERSHELL
  1. $disk = (Gwmi -class win32_logicaldisk|?{$_.DeviceID -match 'D'}).Freespace / 1GB;
  2. IF ($disk -gt 100) {Copy ref.txt -dest d:\ -force}else{Copy ref.txt -dest e:\ -Force}
复制代码

TOP

假如复制文件当前目录下的,POWERSHELL
xczxczxcz 发表于 2019-2-16 14:40

需要BAT脚本的 POWERSHELL兼容不高


判断各磁盘剩余空间的大小
@echo off&setlocal enabledelayedexpansion
for %%i in (d,e) do (
if exist %%i: for /f "tokens=3" %%j in ('dir %%i: ^|find "可用字节"') do echo %%i盘剩余 %%j 字节
)
比较字节 这样写

TOP

回复 3# smss

PowerShell 兼容性不高?除XP要手动安装 2。0外后绪系统都是自带的。判断所有磁盘剩余空间那不更简单。偶只是见招拆招。

TOP

回复  smss

PowerShell 兼容性不高?除XP要手动安装 2。0外后绪系统都是自带的。判断所有磁盘剩余空间那 ...
xczxczxcz 发表于 2019-2-16 15:18

我在意思是除了这段还有其它脚本已用BAT编写
还有这脚本也是需要在XP下正常运行的

TOP

还不如到微软官网下载XP版PS ,才6M多点。且汉化程度比任何其它系统都好。用BAT搞这些纯是撑的。PS用一句简短的话就全部搞定了。

TOP

还不如到微软官网下载XP版PS ,才6M多点。且汉化程度比任何其它系统都好。用BAT搞这些纯是撑的。PS用一句简短 ...
xczxczxcz 发表于 2019-2-16 15:54
  1. @echo off
  2. Setlocal enabledelayedexpansion
  3. for /f "skip=1 tokens=1-6" %%a in ('wmic logicaldisk get caption^,drivetype^,freespace') do (if "%%b"=="3" (set "size=%%c"
  4. )
  5. )
  6. if %size% gtr 107374182400 (copy a.txt d:\) else (copy a.txt e:\)
  7. pause
复制代码
凑了一段 可以用 还能再精减吗
对截取不理解

TOP

本帖最后由 flashercs 于 2019-2-16 19:05 编辑

回复 7# smss

bat比powershell优秀的一点是 可以比较非常长的数值大小 比如下面这个,在powershell中被认为非法
  1. if 5252222222222222222222222222222222222222222222229999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111177777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777772 lss 639 (echo yes) else echo no
复制代码
powershell
  1. 5252222222222222222222222222222222222222222222229999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111177777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777772 -lt 693
复制代码

TOP

本帖最后由 523066680 于 2019-2-16 22:17 编辑

回复 8# flashercs

>if 222222222222222222222222225 GTR 99999999999999999 (echo yes )  else (echo no )
no


批处理,弊端是比较多,不过定位摆在那里,不强求。
Powershell,微软的亲儿子,但是微软却在 WIN10 引入了 WSL,拥抱LINUX。

TOP

本帖最后由 523066680 于 2019-2-17 09:18 编辑

回复 7# smss
  1. @echo off &Setlocal enabledelayedexpansion
  2. for /l %%a in (1,1,30) do set mask=0!mask!
  3. for /f "skip=1 tokens=1-6" %%a in ('wmic logicaldisk get caption^,drivetype^,freespace') do (
  4.     if "%%a"=="D:" (
  5.         set "DSize=%%c"
  6.     )
  7. )
  8. echo free size %DSize%
  9. set G100=%mask%107374182400
  10. set DSize=%mask%%DSize%
  11. if "%Dsize:~-30%" gtr "%G100:~-30%" (echo gtr 100G ) else (echo lss 100G)
复制代码

TOP

  1. wmic logicaldisk where "freeSpace>107374182400" get name|find /i "D:"&&copy a.txt d:\||copy a.txt e:\
复制代码
1

评分人数

    • smss: 这才是精减版技术 + 1

TOP

返回列表