2010-07-29 141 views
0

C你可以使用%username%作为variable当前用户的名称,目录列表和这样的:c:\documents and settings\%username%\变量在批处理FTP脚本

有这样的一个批处理脚本? 只使用%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 

有一定有办法

回答

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并没有把他们的我的文档,那么这其实并不重要。

+0

是我们所有的XP用户,就目前而言,试图将它们转换为* nix中。 任何方式%userprofile%的作品,但它只能工作一次。 当我再次运行我的脚本它不起作用cmd屏幕只是闪烁。和 什么也没有发生.. :( – acidblue 2010-07-29 06:25:47

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,但那给了我“无法找到文件”的错误。

+0

该解决方案的问题是,它留下了一堆散落在驱动器根目录中的文件。你应该尝试在已经打开的控制台中运行我的脚本,这样你就可以看到错误是。 – 2010-07-29 16:20:30

1

如果您更改批处理文件,以便每次运行批处理文件时创建脚本文件,都可以完成此操作。您可以通过使用echo命令将脚本行写入脚本文件来完成此操作,然后您可以将其传递给ftp命令。这部作品的原因是echo将扩大%的用户名%变量将其写入脚本文件之前:

@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