Нужна помощь с пакетным скриптом

С пятницей! Мне нужна помощь с пакетным сценарием .BAT. В частности, мне нужна помощь с некоторым "синтаксисом оператора IF"

У меня есть скрипт, который переименовывает файлы. Есть два файла, один из которых заканчивается четырьмя цифрами, а другой — пятью. Файлы будут переименованы с помощью переменных, которые я уже предварительно установил в своем скрипте.

Итак, вот сценарий: у нас есть два файла в каталоге, расположенном по адресу

c:\Users\имя пользователя\Desktop\test-dir

Внутри test-dir есть два файла:

файл1.12345

файл 2.1234

Четырехзначное окончание — это один тип переменной (VAR1), тогда как файл, оканчивающийся пятью цифрами, — это другой тип переменной (VAR2).

Мне нужен оператор if для:

а) прочитать все файлы в выбранном каталоге (по возможности не используя подстановочный знак). б) определить исходя из количества цифр после "." какую переменную использовать. c) сделав это определение, переименуйте файл с соответствующими переменными.

Окончательное соглашение о переименовании выглядит следующим образом: ггггммддтип.1234/12345.

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

Я знаю, что это кажется большим, но я больше люблю bash-скрипты. У меня есть все элементы на месте, мне просто нужен оператор if и что-то вроде цикла for, чтобы связать все это вместе.

Любая помощь будет здорово!

Благодарю вас!


person NerdyBird    schedule 10.01.2014    source источник


Ответы (3)


Извините, это не тот вариант, о котором вы просили. Вместо того, чтобы перебирать полный список, проверяя каждый файл на соответствие расширению, перебирайте список шаблонов, которые будут фильтровать список файлов, переименовывая соответствующие файлы с соответствующим «типом».

for %%v будет перебирать список переменных, for %%a разделит содержимое переменной по шаблону и типу, for %%f создаст список файлов, отфильтрует с помощью findstr, используя полученный шаблон, и переименует соответствующие файлы с соответствующим «типом».

Команде переименования предшествует echo для вывода команд на консоль. Если вывод правильный, удалите echo, чтобы переименовать файлы.

@echo off

    rem Variables defined elsewhere
    set "folder=c:\somewhere"
    set "timestamp=yyyymmdd"

    rem Rename pattern variables in the form pattern;type
    set "var1=\.....$;type1"
    set "var2=\......$;type2"

    set "var1=\.[^.][^.][^.][^.]$;type1"
    set "var2=\.[^.][^.][^.][^.][^.]$;type2"


    setlocal enableextensions disabledelayedexpansion

    for %%v in ("%var1%" "%var2%") do for /f "tokens=1,* delims=;" %%a in ("%%~v") do (
        for /f "tokens=*" %%f in ('dir /a-d /b "%folder%" ^| findstr /r /c:"%%~a"') do (
            echo ren "%folder%\%%~f" "%timestamp%%%~b%%~xf"
        )
    )

    endlocal
person MC ND    schedule 10.01.2014

@ECHO OFF &SETLOCAL
set "yyyymmdd=yyyymmdd"
set "VAR1=VAR1"
set "VAR2=VAR2"
for /f "delims=" %%a in ('dir /b /a-d^|findstr /re ".*\....."') do echo(ren "%%~a" "%yyyymmdd%%VAR1%%%~xa"
for /f "delims=" %%a in ('dir /b /a-d^|findstr /re ".*\......"') do echo(ren "%%~a" "%yyyymmdd%%VAR2%%%~xa"

удалите echo(, чтобы заставить его работать.

person Endoro    schedule 10.01.2014

Если я вас понимаю, то это переименует два файла, используя предустановленные переменные для каждого из них:

for %%a in ("%userprofile%\Desktop\test-dir\*") do (
   if "%%~xa"==".12345" ren "%%a" "%variableA%-%variableB%%%~xa"
   ) else (
   ren "%%a" "%variableC%-%variableD%%%~xa"
   )
)
person foxidrive    schedule 11.01.2014