Перемещение файлов на основе их присутствия в папках - PullRequest
0 голосов
/ 17 апреля 2019

Я пытаюсь переместить несколько файлов из нескольких папок.Когда файл присутствует, его следует сначала переименовать, а затем переместить.Если нет, то ничего не должно произойти (чтобы скрипт bat не выдавал ошибку).

Я уже написал скрипт, он работает при их использовании независимо, но не когда я все складываю вместе.Кто-нибудь может направить меня в правильном направлении?

    @echo on
    if exist C:\DATA\FTP\311\*.xlsx 
    (
    ren C:\DATA\FTP\311\To_Process\*.xlsx ??????????????????????????????????????????????????????????_311.xlsx 
    MOVE /Y C:\DATA\FTP\311\To_Process\*.xlsx C:\DATA\FTP\To_Process
    )
    if exist C:\DATA\FTP\312\*.xlsx 
    (
    ren C:\DATA\FTP\312\To_Process\*.xlsx ??????????????????????????????????????????????????????????_312.xlsx
    MOVE /Y C:\DATA\FTP\312\To_Process\*.xlsx C:\DATA\FTP\To_Process
    )
    if exist C:\DATA\FTP\313\*.xlsx
    (
    ren C:\DATA\FTP\313\To_Process\*.xlsx ??????????????????????????????????????????????????????????_313.xlsx
    MOVE /Y C:\DATA\FTP\313\To_Process\*.xlsx C:\DATA\FTP\To_Process
    )
    if exist C:\DATA\FTP\314\*.xlsx
    (
    ren C:\DATA\FTP\311\To_Process\*.xlsx ??????????????????????????????????????????????????????????_314.xlsx
    MOVE /Y C:\DATA\FTP\315\To_Process\*.xlsx C:\DATA\FTP\To_Process
    )
    if exist C:\DATA\FTP\315\*.xlsx
    (
    ren C:\DATA\FTP\315\To_Process\*.xlsx ??????????????????????????????????????????????????????????_315.xlsx
    MOVE /Y C:\DATA\FTP\314\To_Process\*.xlsx C:\DATA\FTP\To_Process
    )
    if exist C:\DATA\FTP\320\*.xlsx
    (
    ren C:\DATA\FTP\320\To_Process\*.xlsx ??????????????????????????????????????????????????????????_320.xlsx
    MOVE /Y C:\DATA\FTP\320\To_Process\*.xlsx C:\DATA\FTP\To_Process
)

Спасибо!

1 Ответ

0 голосов
/ 17 апреля 2019

Существуют две проблемы с вашим сценарием, из-за которых он теперь работает, и одна проблема, кажется, очень ручной метод.

Задача 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...