如何编写批处理/脚本以通过选择列表重命名ftp文件

时间:2013-09-30 09:43:16

标签: batch-file ftp rename choice

我对这类事情全新,并且不知道从哪里开始。

我正在尝试为我的老板写一个win 7脚本,其中发生以下情况;

  1. 根据ftp目录中的目录显示选项列表
  2. 当他选择一个时,它将cd到该目录
  3. 然后根据以.htm
  4. 结尾的文件显示另一个选项列表
  5. 当他选择一个时,它会用今天的日期重命名前8个字符yyyymmdd
  6. 所有.htm文件在文件名开头都有yyyymmdd格式

    我应该用什么语言?任何想法从哪里开始这样的事情?

    编辑:这是我到目前为止所拥有的

        echo off
        cls
        echo user me@company.com> ftpcmd.dat
        echo password>> ftpcmd.dat
        echo mls . 1.tmp>> ftpcmd.dat
        echo y >> ftpcmd.dat
        echo quit>> ftpcmd.dat
        ftp -n -s:ftpcmd.dat ftp.company.com
        del ftpcmd.dat
    
        type mls.tmp | more +2 > trim.tmp
        findstr /N "^" trim.tmp > dirs.tmp
    
        ::code need to make choices from dirs.tmp
        ::value of selected to be %dir%
    
        cls
        echo user me@company.com> ftpcmd.dat
        echo password>> ftpcmd.dat
        echo cd %dir%>> ftpcmd.dat
        echo mls . mls.tmp>> ftpcmd.dat
        echo y >> ftpcmd.dat
        echo quit>> ftpcmd.dat
        ftp -n -s:ftpcmd.dat ftp.company.com
        del ftpcmd.dat
    
        findstr ".htm" mls.tmp > trim.tmp
        findstr /N "^" trim.tmp > files.tmp
    
        ::code need to make choices from files.tmp
        ::value of selected to be %sel%
    
        set new=%date:~10,4%%date:~4,2%%date:~7,2%%sel:~9%
    
        cls
        echo user me@company.com> ftpcmd.dat
        echo password>> ftpcmd.dat
        echo cd %dir%>> ftpcmd.dat
        echo rename %sel% %new%>> ftpcmd.dat
        echo quit>> ftpcmd.dat
        ftp -n -s:ftpcmd.dat ftp.company.com
        del ftpcmd.dat
        del *.tmp
    

    一旦我可以填写缺失的部分,我就可以完成它,我可以循环它以减少代码。

1 个答案:

答案 0 :(得分:0)

好的,现在就测试一下,告诉我是否有任何问题。

代码:

echo off
setlocal enabledelayedexpansion
cls
echo user me@company.com> ftpcmd.dat
echo password>> ftpcmd.dat
echo mls . 1.tmp>> ftpcmd.dat
echo y >> ftpcmd.dat
echo quit>> ftpcmd.dat
ftp -n -s:ftpcmd.dat ftp.company.com
del ftpcmd.dat

type mls.tmp | more +2 > trim.tmp
findstr /N "^" trim.tmp > dirs.tmp

:invalid
set count=0
Echo Directories:
Echo.
for /f %%a in (dirs.tmp) do (
set /a count+=1
Echo     !count!. %%a
)
Echo.
set /p "choice=Enter directory number: "
if "%choice%" equ "" (Echo Invalid Choice... &pause&cls&goto :invalid)
if %choice% lss "%count%" (Echo Invalid Choice... &pause&cls&goto :invalid)
if %choice% lss 0 (Echo Invalid Choice... &pause&cls&goto :invalid)

set count=0
set dir=null_value
for /f %%a in (dirs.tmp) do (
set /a count+=1
if !count!==!choice! set dir=%%a
)
cls
if "%dir%"=="null_value" (
Echo Error: direcotry finding
pause&Exit)
cls
Echo Selected %dir%
pause
cls
echo user me@company.com> ftpcmd.dat
echo password>> ftpcmd.dat
echo cd %dir%>> ftpcmd.dat
echo mls . mls.tmp>> ftpcmd.dat
echo y >> ftpcmd.dat
echo quit>> ftpcmd.dat
ftp -n -s:ftpcmd.dat ftp.company.com
del ftpcmd.dat

findstr ".htm" mls.tmp > trim.tmp
findstr /N "^" trim.tmp > files.tmp

:invalid
set count=0
Echo files:
Echo.
for /f %%a in (files.tmp) do (
set /a count+=1
Echo     !count!. %%a
)
Echo.
set /p "choice=Enter file number: "
if "%choice%" equ "" (Echo Invalid Choice... &pause&cls&goto :invalid)
if %choice% lss "%count%" (Echo Invalid Choice... &pause&cls&goto :invalid)
if %choice% lss 0 (Echo Invalid Choice... &pause&cls&goto :invalid)

set count=0
set sel=null_value
for /f %%a in (files.tmp) do (
set /a count+=1
if !count!==!choice! set sel=%%a
)
cls
if "%sel%"=="null_value" (
Echo Error: File finding finding
pause&Exit)
cls
Echo Selected %sel%
pause
cls

set new=%date:~10,4%%date:~4,2%%date:~7,2%%sel:~9%

cls
echo user me@company.com> ftpcmd.dat
echo password>> ftpcmd.dat
echo cd %dir%>> ftpcmd.dat
echo rename %sel% %new%>> ftpcmd.dat
echo quit>> ftpcmd.dat
ftp -n -s:ftpcmd.dat ftp.company.com
del ftpcmd.dat
del *.tmp

可能会有很多错误,但它应该有效。如果它不起作用,请尝试在cmd中运行它:

  1. 启动CMD
  2. 键入Cmd.exe
  3. 将批处理文件拖放到cmd窗口以从该目录运行
  4. 这样您就会收到一条错误消息,告诉您哪里错了。如果你有一个,告诉我它是什么,我可以尝试为你修复它。

    莫纳