Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Цикл FOR где ошибка?что не так? (http://forum.oszone.net/showthread.php?t=263532)

nfs911 01-07-2013 18:44 2177516

Цикл FOR где ошибка?что не так?
 
Всем привет!
Почему пропадает значение переменной %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 2177529

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

nfs911 01-07-2013 20:17 2177573

Пути заработали но как от %$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 2177682

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 2177709

Цитата:

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

Строго говоря — нет, не нужны. Точно так же можно использовать и относительные пути.

nfs911 01-07-2013 23:33 2177725

Foreigner, работает ваш код.Написано что файл скопирован но папка пуста

Foreigner 01-07-2013 23:49 2177735

nfs911, Ну так убери ключик /l

nfs911 02-07-2013 01:24 2177793

Foreigner, благодарю
я думал что выводит для наглядности а оказывается в холостую))


Время: 09:49.

Время: 09:49.
© OSzone.net 2001-