Windows终端bat脚本实现Linux HPC断点续传下载并优化检查效率
修复后的Windows批量下载脚本(download.bat)
@echo off setlocal enabledelayedexpansion :: 配置参数 set "HPC_USER=me" set "HPC_HOST=172.16.78.132" set "HPC_ROOT=/storage/myLab/sharedata/LDSC_resource" set "LOCAL_ROOT=F:\GeneResource" :: 获取远程HPC目录下所有文件的绝对路径(递归) for /f "delims=" %%f in ('ssh !HPC_USER!@!HPC_HOST! "find !HPC_ROOT! -type f"') do ( :: 替换远程路径前缀为本地路径,并转换路径分隔符 set "remote_path=%%f" set "local_path=!remote_path:/storage/myLab/sharedata/=!LOCAL_ROOT!\!" set "local_path=!local_path:/=\!" :: 检查文件是否已存在本地 if exist "!local_path!" ( echo File "%%~nxf" already exists in F:/GeneResource ) else ( :: 创建本地父目录(如果不存在) md "%%~dplocal_path" 2>nul :: 执行SCP下载 echo Downloading "%%~nxf"... scp !HPC_USER!@!HPC_HOST!:"!remote_path!" "!local_path!" if !errorlevel! equ 0 ( echo Successfully downloaded "%%~nxf" to !local_path! ) else ( echo Failed to download "%%~nxf" ) ) ) echo All download tasks processed. pause endlocal
关键改进说明
- 修复远程文件遍历逻辑:原脚本错误地将Linux HPC目录当作Windows本地共享目录遍历,实际通过
ssh + find命令获取远程集群的文件列表,这是跨平台批量处理的核心修正。 - 精准路径映射:严格按照需求将远程路径前缀
/storage/myLab/sharedata/替换为本地F:\GeneResource\,同时自动转换Linux与Windows的路径分隔符,确保本地路径匹配正确。 - 可靠性增强:
- 自动创建本地子目录,避免因目录不存在导致下载失败;
- 检查
scp命令的退出码,准确反馈下载成功/失败状态,彻底解决原脚本“未下载却提示完成”的问题; - 开启延迟扩展,确保循环内变量替换正常工作。
- 符合需求的提示格式:文件已存在时输出指定格式的提示信息。
内容的提问来源于stack exchange,提问作者Patrick
相关产品推荐
相关产品推荐

