Переменные в пакетном FTP-скрипте - PullRequest
0 голосов
/ 29 июля 2010

В 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 ]

1 голос
/ 02 августа 2010

Это можно сделать, если вы измените пакетный файл так, чтобы он создавал файл сценария при каждом запуске пакетного файла. Это можно сделать с помощью команды 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
0 голосов
/ 29 июля 2010

Мне кажется, я нашел лучший способ, хотя он немного больше кода.

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 голосов
/ 29 июля 2010

Вместо использования 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 и не перемещают свои «Мои документы», то это на самом деле не имеет значения.

...