Существуют две проблемы с вашим сценарием, из-за которых он теперь работает, и одна проблема, кажется, очень ручной метод.
Задача 1:
Открывающая скобка должна находиться в той же строке, что и ваше заявление if
, т.е.:
if exist C:\DATA\FTP\311\*.xlsx (
Задача 2:
Вы ищете файлы внутри корня C:\DATA\FTP
, но затем пытаетесь переименовать файлы в C:\DATA\FTP\To_Process
, когда они должны быть переименованы из корня FTP
В любом случае, здесь есть слегка измененная версия, немного более автоматизированная.
@echo off
setlocal enabledelayedexpansion
for /F %%i in ('dir /b /s *.xlsx' ^| findstr /vi "FTP\To_process") do (
set "fol=%%~pi"
set "fol=!fol:~0,-1!"
for %%a in (!fol!) do set res=%%~na
echo ren "%%~fi" "%%~dpni_!res!%%~xi"
echo move /y "%%~ni_!res!%%~xi" "C:\DATA\FTP\To_Process"
)
Некоторые вещи на примечание :
Поместите этот пакетный файл в корень C:\DATA\FTP
Две последние две строки начинаются с echo
для целей тестирования, удаляйте их только тогда, когда рад, что код будет делать то, что вы ожидаете.
В цикле for есть команда findstr /vi
, чтобы исключить переименование файлов, которые уже существуют в C:\DATA\FTP\To_process
Наконец, мне немного неясно, локализованы ли ваши файлы в C:\DATA\FTP\NNN\
или в C:\DATA\FTP\NNN\To_process
Так что пояснение по этому вопросу упростит для меня, чтобы дать 100% завершенный сценарий, как сейчас, этот сценарий предполагает файлы находятся в C:\DATA\FTP\NNN