Цитата 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% стоят двойные знаки процента?
|