Batch file 批处理脚本,用于登录FTP服务器并以特定格式重命名文件

Batch file 批处理脚本,用于登录FTP服务器并以特定格式重命名文件,batch-file,ftp,rename,Batch File,Ftp,Rename,以下是我的设想: 我在FTP服务器上有文件,需要自动重命名。我创建了一个脚本来重命名文件名,如下所示,该脚本在我的计算机上运行良好: @echo off setlocal for /f "tokens=2-7 delims=_.-" %%A in ('dir /B TACOS_*') do ( setlocal enabledelayedexpansion call :getmonth %%B ren TACOS*_*%%A-%%B-%%C*_*%%D-%%E-%%F_UTC.cs

以下是我的设想:

我在FTP服务器上有文件,需要自动重命名。我创建了一个脚本来重命名文件名,如下所示,该脚本在我的计算机上运行良好:

 @echo off
setlocal
for /f "tokens=2-7 delims=_.-" %%A in ('dir /B TACOS_*') do (
  setlocal enabledelayedexpansion
  call :getmonth %%B
  ren TACOS*_*%%A-%%B-%%C*_*%%D-%%E-%%F_UTC.csv TACOS_%%A!mon!%%C_%%D%%E%%F.csv
  endlocal
)


:getmonth
if "%1" equ "Jan" set mon=01
if "%1" equ "Feb" set mon=02
if "%1" equ "Mar" set mon=03
if "%1" equ "Apr" set mon=04
if "%1" equ "May" set mon=05
if "%1" equ "Jun" set mon=06
if "%1" equ "Jul" set mon=07
if "%1" equ "Aug" set mon=08
if "%1" equ "Sep" set mon=09
if "%1" equ "Oct" set mon=10
if "%1" equ "Nov" set mon=11
if "%1" equ "Dec" set mon=12
goto :eof
endlocal
现在我想通过登录服务器在ftp上运行此功能。为此,我使用以下脚本:

FTP -s:ftpscript.txt
文本文件是

open 192.168.1.5
ftp-user
ftpuser
cd reports/Don
这些文件基本上位于Don目录下,需要使用上面的脚本重命名该目录

问题:

  • 我们需要两个脚本来处理这个问题吗

  • 如何通过登录ftp服务器完成重命名


  • 非常感谢您的帮助

    只需一个文件即可实现:

    !cls&echo off&setlocal ENABLEDELAYEDEXPANSION
    !cls&goto :ftp_border
    open 192.168.1.5
    ftp-user
    ftpuser
    cd reports/Don
    lcd c:\direcotry_where_the_script_is
    mget *.csv
    bye
    
    :ftp_border
    @echo off
    endlocal
    
    ftp -s:%0
    
    
    setlocal
    for /f "tokens=2-7 delims=_.-" %%A in ('dir /B TACOS_*') do (
      setlocal enabledelayedexpansion
      call :getmonth %%B
      ren TACOS*_*%%A-%%B-%%C*_*%%D-%%E-%%F_UTC.csv TACOS_%%A!mon!%%C_%%D%%E%%F.csv
      endlocal
    )
    
    
    :getmonth
    if "%1" equ "Jan" set mon=01
    if "%1" equ "Feb" set mon=02
    if "%1" equ "Mar" set mon=03
    if "%1" equ "Apr" set mon=04
    if "%1" equ "May" set mon=05
    if "%1" equ "Jun" set mon=06
    if "%1" equ "Jul" set mon=07
    if "%1" equ "Aug" set mon=08
    if "%1" equ "Sep" set mon=09
    if "%1" equ "Oct" set mon=10
    if "%1" equ "Nov" set mon=11
    if "%1" equ "Dec" set mon=12
    goto :eof
    endlocal
    

    你能试试这个吗?

    对不起。这不是对FTP问题的回答,而是对批处理文件的讨论;我看到了一些细节:

    根据FOR命令(“delims=。-”)和REN命令中的名称,我假设您的文件格式如下:

    TACOS_YYYY-Mon-DD_HH-MM-SS_UTC.csv
    
    其中“Mon”是一个三个字母的月份名称,您希望将其重命名为以下格式:

    TACOS_YYYYMMDD_HHMMSS.csv
    
    如果这是真的,那么您的REN命令可能会导致错误,因为星号表示多个名称!如果您想消除玉米卷后面、YYYY之前、DD之后和HH之前的字符,那么这不是实现的方法。也许计算机中的文件名不会引起问题。尝试在其他位置创建两个或多个日期和时间相同、字符不同的文件;在这种情况下,REN命令尝试用一个新名称重命名两个或多个文件(除非您知道不可能发生这种情况)

    您的SETLOCAL/ENDLOCAL对是无用的。如果要避免出现可能带有感叹号的名称问题,则必须在展开%%A..%F时禁用延迟展开。如果您的名字可能有感叹号,则必须修改您的程序

    我可以向您推荐另一种方法将三个字母的月份转换为两位数吗?此方法使用一个数组,数组元素中有三个字母作为下标,两个数字作为值,因此转换是即时的

    @echo off
    setlocal EnableDelayedExpansion
    rem Create the array for months conversion
    set m=100
    for %%A in (Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec) do (
      set /A m+=1
      set mon[%%A]=!m:~-2!
    )
    for /f "tokens=2-7 delims=_.-" %%A in ('dir /B TACOS_*') do (
      ren TACOS*_*%%A-%%B-%%C*_*%%D-%%E-%%F_UTC.csv TACOS_%%A!mon[%%B]!%%C_%%D%%E%%F.csv
    )
    
    如果要在REN命令中放置星号的位置删除几个字符,请告诉我们如何隔离这些字符。例如,如果一个名称以以下开头:

    TACOSxyz_abcYYYY-Mon-DD...
    
    然后您必须意识到FOR命令中的%%A是“abcyyy”,而不仅仅是“yyy”

    编辑:下面有一个可能的解决方案:

    @echo off
    setlocal EnableDelayedExpansion
    rem Create the array for months conversion
    set m=100
    for %%A in (Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec) do (
      set /A m+=1
      set mon[%%A]=!m:~-2!
    )
    for /f "tokens=2-7 delims=_.-" %%A in ('dir /B TACOS_*') do (
      set YYYY=%%A
      set DD=%%C
      set HH=%%D
      set SS=%%F
      ren TACOS*_*%%A-%%B-%%C*_*%%D-%%E-%%F_UTC.csv TACOS_!YYYY:~-4!!mon[%%B]!!DD:~0,2!_!HH:~-2!%%E!SS:~0,2!.csv
    )
    

    对于脚本的目录,您的意思是我将保存此脚本的位置??感谢您的帮助…您提供的代码不会从FTP服务器传输所有文件。。。Don目录中只有6个文件,它甚至不会更改文件名。。。此外,我希望重命名后的文件以相同的don目录放回FTP服务器。如果您希望,我可以向您发送命令提示的结果,如果您想查看,请在使用FTP连接到存储后尝试
    mget*.csv
    ?这将下载所有具有csv扩展名的文件。您可以使用内置ftp客户端连接到服务器。只需在命令提示符下写入
    ftp
    。使用
    open host
    ,您可以连接到ftp主机,并使用cd和lcd导航到本地和远程目录。因此,您可以列出文件并检查mget是否将下载我面临的问题不是重命名函数,而是在FTP中运行重命名函数