Пакетное переименование нескольких файлов с именами через дефис - PullRequest
0 голосов
/ 04 августа 2020

У меня есть серия файлов, которые я регулярно загружаю / обрабатываю, и для переименования мне нужно использовать командный файл. Каждое имя файла представляет собой нечто вроде word-word-word-datetime.csv. Всегда стоит «-» между словами и всегда -datetime перед расширением файла «.csv». Мне нужно удалить -datetime, чтобы файлы назывались word-word-word.csv. В некоторых случаях перед -datetime может быть только одно слово, но может быть и строка из многих слов. Я загружаю эти файлы и перемещаю их в определенную папку c для обработки, и в папке уже есть командный файл, который мне нужно изменить, чтобы также переименовать файлы.

Например, мне нужен имена файлов ниже:

this-is-a-file-20200804134809.csv
another-file-20200804134750.csv
some-other-file-20200804134699.csv
file-20200804134389.csv

Для переименования в:

this-is-a-file.csv
another-file.csv
some-other-file.csv
file.csv

Этот ответ почти в точности то, что мне нужно, но я недостаточно знаком с синтаксис, чтобы изменить его для переименования файлов с несколькими словами через дефис (код из связанного ответа скопирован ниже).

@echo off

for /F "tokens=1,* delims=-" %%a in ('dir /A-D /B "*.mp4"') do (
    echo move "%%a-%%b" "%%a%%~xb"
)

Ответы [ 2 ]

0 голосов
/ 05 августа 2020

Вот более надежный пример, используя совет, который я дал в комментариях:

@Echo Off
SetLocal EnableExtensions DisableDelayedExpansion
For /F "EOL=| Delims=" %%G In ('Dir /B /A-D *-??????????????.csv ^
 ^|"%__AppDir__%findstr.exe" /IR ^
 "\-19[0123456789]*\.csv$ \-20[0123456789]*\.csv$"') Do (
    Set "BaseName=%%~nG"
    SetLocal EnableDelayedExpansion
    Ren "%%G" "!BaseName:~,-15!%%~xG"
    EndLocal
)
0 голосов
/ 05 августа 2020

Мне удалось переименовать все файлы .csv в моей папке, усекая имя, чтобы удалить последние 15 символов, как было предложено @ Compo.

@echo off
setlocal enabledelayedexpansion
for %%f in (*.csv) do if %%f neq %~nx0 (
    set "filename=%%~nf"
    ren "%%f" "!filename:~0,-15!%%~xf"
)
...