Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Пользователь


Сообщения: 105
Благодарности: 1

Профиль | Отправить PM | Цитировать


Цитата alpap:
да я вообще не понимаю ТС, он уже создавал тему в которой присутствовал момент переименования и был показан в коде, только создать новую тему не лень. а зайти в свою предыдущую лень - абсурд. »
простите, alpap, я учусь...читая код на cmd потихоньку хоть что-то начинает становиться понятным, а копаться в powershell в его синтаксисе, думаю мне еще очень рано, нужно хотя бы "винтаж" более-менее понимать (да и вообще, хотя бы что-то) а потом уже на другое переходить. А в Вашем коде я элемент переименования не разглядел по незнанию. Благодарю за помощь, прошу прощения. В этой теме я не стал про переименование писать, т.к. это не совсем относится к той теме, ведь там про перемещение файлов, поэтому решил отдельно создать топик, чтобы не было нагромождения.
Цитата Iska:
epoddubniy, Вам обязательна на пакетных файлах реализация? Powershell не подойдёт? »
Спасибо.
Цитата alpap:
Директория такая-то - есть, создана
С сервера или откуда там приходят файлы в такую-то директорию с такой-то интенсивностью с такой-то маской
Запуск (соответственно проверка наличия файлов) кода будет производится (возможно из планировщика) вручную раз в месяц (неделю)
Надо отобрать по маске или по дате файлы все или по столько-то штук из общей папки и разложить в другие папки (если их нет, то создать, имена папок должны содержать часть имени файла и дату из имени файла или свойства файла) »
Спасибо, alpap, учту на будущее.
Цитата megaloman:
А вдруг у epoddubniy похвальное желание самому получить конечный результат, и он/она использует наше участие для обучения »
Так - точно, megaloman,

Код: Выделить весь код
Цитата megaloman:
@Echo Off cls Set "BoxIn=Z:\Box_In" Set "Find=_21.xls" Set "Repl=_2021.xls" For /f "usebackq delims=" %%f In (`2^>nul Dir /B /A:-D "%BoxIn%\*%Find%"`) Do ( Set "Name=%%~nxf" Call Ren "%BoxIn%\%%f" %%Name:%Find%=%Repl%%% ) pause Exit /B »
почему-то интерпретатор вылетает, если в коде этот кусок
Код: Выделить весь код
Do (
		Set "Name=%%~nxf"
		Call Ren "%BoxIn%\%%f" %%Name:%Find%=%Repl%%%
если его заменить на
Код: Выделить весь код
echo %%f
то интерпретатор не вылетает и выводятся имена файлов в каталоге с расширением

megaloman, скажите пожалуйста, правильно ли я понял кусок кода?
Код: Выделить весь код
For /f "usebackq delims=" %%f In (`2^>nul Dir /B /A:-D "%BoxIn%\*%Find%"`) Do (
 Set "Name=%%~nxf"
 Call Ren "%BoxIn%\%%f" %%Name:%Find%=%Repl%%%
 )
1) 2^>nul - поток ошибок не выводится в окно интерпретатора
2) Dir /B /A:-D "%BoxIn%\*%Find%" - получаем список имен файлов в целевой директории, у которых имя имеет маску "*_21"
3) Set "Name=%%~nxf" - у каждого файла оставляем только имя и расширение, путь отбрасывается
4) Call Ren - вызываем команду Rename
5) Call Ren "%BoxIn%\%%f" - осуществляем переименование в каталоге BoxIn файлов %%F, а так как в переменной цикла %%F сохранено значение имен файлов с маской "*_21", то они по очереди будут подставляться
6) %%Name:%Find%=%Repl%%% - вот это - не понял :-( Понимаю, что синтаксис команды rename подразумевает переименование того, что было "%BoxIn%\%%f" на то, что будет %%Name:%Find%=%Repl%%%, но то, как это получается - не понятно
почему у %%Name двойной знак процента, как у переменной цикла, почему потом стоит двоеточие (что это за синтаксис и для чего он используется) равенство в выражении означает, что присваивается значение %repl%, ну то есть, если я правильно понимаю, каждый %find% меняется на %repl% а для чего после %repl% стоят двойные знаки процента?

Заменил
Код: Выделить весь код
For /f "usebackq delims=" %%f In (`2^>nul Dir /B /A:-D "%BoxIn%\*%Find%"`)
на
Код: Выделить весь код
For /f "tokens=*" %%f In ('Dir /B /A:-H "%BoxIn%\*%Find%"')
скрипт отработал, файлы переименовались, но осталась неясность с
Цитата:
почему у %%Name двойной знак процента, как у переменной цикла, почему потом стоит двоеточие (что это за синтаксис и для чего он используется) равенство в выражении означает, что присваивается значение %repl%, ну то есть, если я правильно понимаю, каждый %find% меняется на %repl% а для чего после %repl% стоят двойные знаки процента?

Последний раз редактировалось epoddubniy, 16-05-2021 в 11:44. Причина: Редактирование


Отправлено: 10:26, 16-05-2021 | #6