在Windows终端远程下载文件

问题描述 投票:0回答:1

我希望在Windows终端中运行

download.bat
来执行名为“download.bat”的文件,将大学计算集群(Linux)帐户中的文件夹中的文件下载到我的本地目录。

考虑到下载可能会不时因未知原因而中断,我希望“download.bat”检查HPC中要下载的每个文件是否已存在于我的本地目录中。如果存在,则打印“File ***已经存在于F:/GeneResource”,其中***为文件名。如果本地目录不存在该文件,则下载该文件。

注意事项: 有一个警告需要注意。随着文件下载过程中本地目录中文件数量的增加,检查本地目录中是否存在HPC中的文件所需的时间会越来越长。我有一个加快速度的建议。当文件下载到本地目录时,该文件与HPC中的父目录位于同一父目录中,因此只需在该文件所在的直接子文件夹中进行检查即可。例如,要检查文件 /storage/myLab/sharedata/LDSC_resource/LDSC_SEG_ldscores/Corces_ATAC.ldcts 是否存在于本地目录中,只需检查文件夹 F:/GeneResource/LDSC_resource/LDSC_SEG_ldscores 即可。无需检查其他子文件夹。因此用于检查的本地目录中的文件夹路径应该是HPC中文件的路径,将“/storage/myLab/sharedata/”替换为“F:/GeneResource/”。这减少了不必要的检查,因此会节省一些时间。如果您有其他聪明的想法来加快速度,谢谢!

以下脚本由 Gemini 生成,执行时返回“所有下载已完成”。即使之前的下载不完整。请帮助我更新此代码,或者如果此脚本完全无法使用,请编写一个新代码,以在解决警告的同时实现该功能。

@echo off

rem Define the HPC source directory (Everything in this folder needs to be downloaded)
set HPC_SOURCE=\\storage\myLab\sharedata\LDSC_resource

rem Define the local target directory (All files will be downloaded into this local directory)
set LOCAL_TARGET=F:\GeneResource

rem Loop through each file in the HPC source directory recursively
for /r "%HPC_SOURCE%" %%a in (*) do (
  rem Extract the relative path of the file within the source directory
  set FILE_PATH=%%~na
  
  rem Construct the corresponding local directory path
  set LOCAL_DIR=%LOCAL_TARGET%\!FILE_PATH:\storage\myLab\sharedata\%!
  
  rem Check if the file already exists in the local directory
  if exist "!LOCAL_DIR!" (
    echo File "!FILE_PATH!" already exists in %LOCAL_DIR%
  ) else (
    rem Download the file if it doesn't exist locally
    scp [email protected]:"!HPC_SOURCE%\!FILE_PATH!" "!LOCAL_DIR!"
    echo Downloaded "!FILE_PATH!" to %LOCAL_DIR%
  )
)

echo All downloads completed.

pause

请注意,上述脚本要写入“download.bat”文件中,以便在 Windows 终端运行,而不是 Linux。

windows batch-file terminal cluster-computing
1个回答
0
投票

脚本错误地处理文件路径提取和替换。变量 FILE_PATH 应反映 HPC 源目录中每个文件的相对路径,而不仅仅是文件名。在尝试下载文件之前,请确保本地目录存在;如果没有,请创建它。检查应该对单个文件执行,而不仅仅是目录。

@echo off
setlocal enabledelayedexpansion

set HPC_SOURCE=\\storage\myLab\sharedata\LDSC_resource

set LOCAL_TARGET=F:\GeneResource

for /r "%HPC_SOURCE%" %%a in (*) do (
  set FILE_PATH=%%a
  set RELATIVE_PATH=!FILE_PATH:%HPC_SOURCE%=!
  
  set LOCAL_DIR=%LOCAL_TARGET%!RELATIVE_PATH!
  set LOCAL_FILE_PATH=!LOCAL_DIR!\%%~nxa
  
  if not exist "!LOCAL_DIR!" (
    mkdir "!LOCAL_DIR!"
  )
  
  if exist "!LOCAL_FILE_PATH!" (
    echo File %%~nxa already exists in !LOCAL_DIR!
  ) else (
    scp [email protected]:"%%a" "!LOCAL_FILE_PATH!"
    echo Downloaded %%~nxa to !LOCAL_DIR!
  )
)

echo All downloads completed.
pause
© www.soinside.com 2019 - 2024. All rights reserved.