Войти

Показать полную графическую версию : [решено] Цикл FOR где ошибка?что не так?


nfs911
01-07-2013, 18:44
Всем привет!
Почему пропадает значение переменной %nm% при переходе в другой for
значение обнуляется...
Вот код

@Echo On
setlocal enableextensions enabledelayedexpansion

Set Folder=E:\Projects\upd\foldx
Set OutFolder=E:\Projects\upd\in
Set txt_list=E:\Projects\upd\copy.txt

For /F %%i In (%txt_list%) Do (
Set nm=%%i
for /f "tokens=*" %%a in ('Dir /b/s/a-d %Folder%\*%nm%*.*') Do (Set $Path=%%a & goto :copy)
)
:copy
xcopy /l /h /t "%$Path%" "%OutFolder%\*"

Pause
Exit

Помогите))Подправте код,а если можно то еще и объясните причину.

Foreigner
01-07-2013, 19:07
1. Зачем эта переменная вообще? Используйте переменную первого цикла %%i
2. Или соблюдайте синтаксис, переменная должна выглядеть так !nm!

nfs911
01-07-2013, 20:17
Пути заработали но как от %$Path% отсечь %Folder% и прибавить к %OutFolder%

Если математически то так
(%OutFolder%+(%$Path% - %Folder%))

Если наглядно то так
E:\Projects\upd\in + (E:\Projects\upd\foldx\new\1\AB12345.exe - E:\Projects\upd\foldx\new) = E:\Projects\upd\in + \new\1\AB12345.exe

Ведь для копирования нужны абсолютные пути...



@Echo On
setlocal enableextensions enabledelayedexpansion

Set Folder=E:\Projects\upd\foldx
Set OutFolder=E:\Projects\upd\in
Set txt_list=E:\Projects\upd\copy.txt

For /F %%i In (%txt_list%) Do (
Set nm=%%i
for /f "tokens=*" %%a in ('Dir /b/s/a-d %Folder%\*!nm!*.*') Do (Set $Path=%%a & goto :copy)
)
:copy
xcopy /l /h /t "%$Path%" "%OutFolder%\"

Pause
Exit

Foreigner
01-07-2013, 22:50
nfs911,
Мне не совсем понятно, что надо копировать, nm, как я понял какая-то часть названия файла?
Ну так зачем его тогда искать? Если xcopy это умеет.

@echo off
setlocal

pushd "E:\Projects\upd\foldx"

for /f %%i in (..\copy.txt) do xcopy /s /l /h *%%i*.* "E:\Projects\upd\in\"

popd
Как-то так, не проверял - xcopy скопирует файлы, подходящие под маску *%%i*.* с путями, начиная с текущей папки "E:\Projects\upd\foldx"

Iska
01-07-2013, 23:12
Ведь для копирования нужны абсолютные пути... »
Строго говоря — нет, не нужны. Точно так же можно использовать и относительные пути.

nfs911
01-07-2013, 23:33
Foreigner, работает ваш код.Написано что файл скопирован но папка пуста

Foreigner
01-07-2013, 23:49
nfs911, Ну так убери ключик /l

nfs911
02-07-2013, 01:24
Foreigner, благодарю
я думал что выводит для наглядности а оказывается в холостую))




© OSzone.net 2001-2012