批处理FTP脚本中的变量

时间:2010-07-29 05:49:04

标签: batch-file ftp ftp-client

C中,您可以将%username%用作variable作为目录列表的当前用户名,例如:c:\documents and settings\%username%\

批处理脚本有这样的东西吗? 仅使用%username%似乎没有帮助。

我编写了一个访问我的FTP服务器的脚本,因此我可以将文件加载到服务器。 我希望我的朋友能够使用这个脚本,但我不想写几个不同的脚本。 以下是我到目前为止的情况:

@echo off
@ftp -s:"%~f0" &GOTO: EOF
open FTP.server.com
user
pass
cd /home/ftp
bin
lcd "c:\documents and settings\%username%\my documents\FTP"
mput *txt
pause
bye

必须有办法

3 个答案:

答案 0 :(得分:1)

如果您更改批处理文件,以便每次运行批处理文件时创建脚本文件,都可以执行此操作。您可以使用echo命令将脚本行写入脚本文件,然后将其传递给ftp命令。这样做的原因是echo会在将%username%变量写入脚本文件之前对其进行扩展:

@echo off
del script.txt
echo open FTP.server.com>>script.txt
.
[echo rest of script lines to file]
.
echo lcd "c:\documents and settings\%username%\my documents\FTP">>script.txt
echo echo mput *txt>>script.txt

@ftp -s:script.txt

答案 1 :(得分:0)

更好的想法可能是更改外部批处理文件中的工作目录,而不是使用lcd

@echo off

@pushd "c:\documents and settings\%username%\my documents\FTP"

@ftp -s:"%~f0" &GOTO: EOF

open FTP.server.com
user
pass
cd /home/ftp
bin
mput *txt

@pause

此解决方案的唯一问题是脚本本身不再位于工作目录中,因此您需要为其添加路径。 (或者,将其放在FTP文件夹中;)

此外,还有轻微的迂腐,但这实际上并不是找到我的文件的正确方法。特别是,在Vista或Windows 7上,用户配置文件存储在C:\Users中。并且,用户可以移动我的文档(在我的计算机上,我的文档位于D:\Mike's Documents

但是,似乎没有直接指向“我的文档”的环境变量,因此您必须使用此功能:

"%userprofile%\my documents\FTP"

如果运行此脚本的人正在运行XP并且没有移动他们的“我的文档”,那么这并不重要。

答案 2 :(得分:0)

我相信我找到了更好的方法,虽然它的代码更多。

set "rootdir=%userprofile%\my documents"

set "destdir=c:\
for /f "delims=" %%a in ('dir /b /s "%rootdir%*.txt"') do copy "%%~a" "%destdir%"

然后是通常的FTP内容,包括lcd c:\

我测试了这个并且它有效,尽管我想找到一种更简单的方法。 我尝试使用xcopy但由于某种原因它在我的系统上不起作用,cmd屏幕只是挂起。 也尝试使用copy,但这给了我“无法找到文件”的错误。