|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] for do copy создаёт лишний файл |
|
CMD/BAT - [решено] for do copy создаёт лишний файл
|
Старожил Сообщения: 267 |
Профиль | Отправить PM | Цитировать
есть два файла:
file.txt file_2.txt при запуске такого батника: @echo off chcp 1251 ::for %%i in ("%CD%\*.txt") do (copy "%%i" "%%~dpni_new%%~xi") for /R "%CD%" %%i in (*.txt) do (copy "%%i" "%%~dpni_new%%~xi") (если переименовать file_2.txt в zzz.txt, то ошибка пропадает и создаётся как и положено 2 файла) (если в батнике поменять _new на -new, то ошибка пропадает и создаётся как и положено 2 файла) в чём причина такой ошибки? |
|
Отправлено: 09:34, 28-09-2022 |
Ветеран Сообщения: 4241
|
Профиль | Отправить PM | Цитировать А какая задача то у Вас?
Или Вы думаете, что кто-нибудь поймёт её из Вашего кода сценария? |
Отправлено: 11:00, 28-09-2022 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 267
|
Профиль | Отправить PM | Цитировать Цитата NickM:
если эта причина не будет найдена, то я поменяю "_new" на "-new" в коде и буду с этим жить |
|
Отправлено: 08:15, 29-09-2022 | #3 |
Crazy Сообщения: 1171
|
Профиль | Отправить PM | Цитировать Цитата shadowbat:
Вот, код, который наглядно отображает эту "лишнюю" итерацию: @echo off set /a f=5 &:число создаваемых файлов в каталоге set /a k=0 &:динамический счетчик для наименований файлов set /a n=0 &:динамический счетчик для подсчета итераций rem Если отсутствует, создаем каталог TEXT, рядом со сценарием: set "d1=%cd%\text" if not exist "%d1%" md "%d1%" cd "%d1%" setlocal enabledelayedexpansion rem Создаем тестовые файлы: if not exist "*.txt" ( for /l %%i in (1,1,!f!) do rem: фигня>"!k!.txt"&set /a k+=1 ) rem Проверка лишней итерации в цикле: echo.Файлов в каталоге: dir /b/a-d echo.-------------------------- echo. echo.Переименование файлов циклом и собственно, "лишняя итерация": for %%A in (*.txt) do ( echo %%A rem Так проходов n+1 от количества файлов: rename "%%A" "!random!.txt" set /a n+=1 ) echo. echo Проходов: !n! echo.-------------------------- echo. echo.Итоговое число файлов в каталоге: dir /b/a-d echo. pause Мораль: не выполняйте переименование файлов посредством цикла for, в одном и том же каталоге, где находятся исходные файлы. |
|
------- Последний раз редактировалось YuS_2, 29-09-2022 в 08:54. Отправлено: 08:42, 29-09-2022 | #4 |
Ветеран Сообщения: 2708
|
Профиль | Отправить PM | Цитировать shadowbat, Если интересно не только "почему", но и "как", то
@Echo Off cls >nul chcp 1251 For /R "%CD%" %%i in (*.txt) Do >nul (Echo %%i|FindStr /E /I "_new%%~xi" ||copy "%%i" "%%~dpni_new%%~xi") pause Exit /B @Echo Off cls >nul chcp 1251 FOR /F "usebackq delims=" %%i IN (`2^>nul Dir "*.txt" /S /A:-D /B ^|FindStr /E /I /V "_new.txt"`) DO >nul copy "%%i" "%%~dpni_new%%~xi" pause Exit /B Поэтому лучше использовать xcopy /D @Echo Off cls >nul chcp 1251 FOR /F "usebackq delims=" %%i IN (`2^>nul Dir "*.txt" /S /A:-D /B ^|FindStr /E /I /V "_new.txt"`) DO Echo F|>nul xcopy /D "%%i" "%%~dpni_new%%~xi" pause Exit /B |
|
------- Последний раз редактировалось megaloman, 29-09-2022 в 10:27. Отправлено: 10:10, 29-09-2022 | #5 |
Crazy Сообщения: 1171
|
Профиль | Отправить PM | Цитировать Цитата shadowbat:
Ваша задача, на powershell: |
|
------- Отправлено: 11:00, 29-09-2022 | #6 |
Старожил Сообщения: 267
|
Профиль | Отправить PM | Цитировать megaloman
YuS_2 благодарю за помощь |
Отправлено: 16:38, 30-09-2022 | #7 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
[решено] Лишний раздел HDD | lunar | Хочу все знать | 2 | 06-12-2013 20:22 | |
CMD/BAT - лишний проход цикла | kolya17 | Скриптовые языки администрирования Windows | 1 | 05-10-2011 21:07 | |
Вирус создаёт на флешке файл "- xXx.exe"... | Geliosvamp | Лечение систем от вредоносных программ | 1 | 04-12-2009 19:27 | |
Разное - [решено] Лишний диск в системе | lunas | Microsoft Windows 2000/XP | 5 | 25-12-2007 13:14 | |
[решено] Кто создаёт этот подозрительный файл...? | Marsianin | Microsoft Windows 2000/XP | 8 | 27-05-2006 12:53 |
|