Windows CMD: добавить суффикс для всех файлов в папке

4

У меня есть папка с 120 .csфайлами.

Что мне нужно сделать, это добавить «DO» к каждому имени файла перед расширением.

Вот что я придумал:

ren *.cs *. //this removes all file extensions
ren *.* *DO.cs // this should rename all the files and add the suffixes

Теперь это работает в основном. Но не для некоторых файлов.

Сначала я думал, что это просто файлы, начинающиеся с Do

Но ... хорошо, вот как это оказалось:

Папка-просмотр

(Остальное, что не на экране печати, в порядке)

Теперь это не серьезная проблема; Я просто хотел понять, почему он это сделал ...

Вот мой вывод cmd: вывод cmd

Посмотрев на этот вывод, я подумал, что он не может найти файлы, потому что вторая команда состоит из . для переименования; но поскольку ни один из файлов в папке не имеет расширения на момент переименования; это не может быть ..

Спасибо

Мастер Азазель
источник
1
просто предположение, но здесь могут помешать короткие имена (см. superuser.com/questions/475874/… ).
wmz
@ LưuVĩnhPhúc это точно такой же ответ, который уже выложен на сантиметр выше вашего комментария ... не так уж и полезно.
Мастер Азазель
@MasterAzazel это не ответ, и комментарий выше меня. Это не было ясно, поэтому я не смотрел на его ссылку и не знаю, что она была опубликована ранее. Это не полезно, потому что вы не читали это
phuclv
ответ / вопрос называйте как хотите; все та же ссылка. и действительно, я прочитал это. вот почему первая публикация получила от меня отклик.
Мастер Азазель

Ответы:

5

Как говорили другие, он заключается в способе renинтерпретации подстановочных знаков, поэтому он не может найти файлы, содержащие точки *.*во второй команде, потому что:

  • Вы не только удалили расширение файла с помощью первой команды, но также и точки перед расширениями:

Artikelnummer.cs > Artikelnummer

  • И ваша вторая команда ищет имена файлов, содержащие .(которых нет!):

ren *.*

  • Также рассмотрите renиспользование *для ссылки на имя файла, поэтому, когда вы ищете *.*(любое имя, любое расширение), вы используете, *чтобы ссылаться на имя файла и расширение одновременно, что вводит в заблуждение renкоманду!

Итак, вывод, единственная проблема была *.*, замените его на *:

ren *.cs *.DO.cs
ren * *DO.cs

Однако, если вы хотите переименовать, запустив одну строку кода:

Из командной строки запустите:

for /f "tokens=* delims=" %a in ('dir /b "%FilesLocation%"') do if %~xa EQU .cs ren "%a" "%~naDO.cs"

Или сохраните и запустите этот скрипт:

@echo off
for /f "tokens=* delims=" %%a in ('dir /b "%FilesLocation%"') do if %%~xa EQU .cs ren "%%a" "%%~naDO.cs"

И не забудьте поменять %FilesLocation%его с реальной ценностью.

NetwOrchestration
источник
Спасибо за разъяснение. не переименовать все, .DO.cs? что мне нужно,xyDO.cs
Мастер Азазель
Обновил мой ответ, посмотрите, работает ли он.
NetwOrchestration
Есть ли способ сделать это с помощью команды ren?
Мастер Азазель
Это renкоманда внутри forцикла. Но если вы имеете в виду просто renкоманду, я обновил весь мой ответ.
NetwOrchestration
0

Вам нужна команда for. С макушки головы это выглядит примерно так:

for /f "tokens=1,2* delims=." %a in ('dir *.cs /b') do (ren %a.%b %aDO.%b)

Это не работает для имен файлов, которые содержат более одной точки.

jon_two
источник
я знаю, что есть другие способы сделать это; но я удивляюсь, почему он действовал так, как я пытался это сделать
Мастер Азазель
Ах, я понимаю, что вы имеете в виду. Может быть, рен . действует на файлы в другом порядке.
jon_two
0

FORимеет режим для циклического просмотра файлов (также рекурсивный), нет dir /bнеобходимости ( https://ss64.com/nt/for2.html ). Вам нужно передать глобус файла или список(*.cs, \path\*.txt,...)

Командная строка

FOR %_ IN (*.cs) DO @REN "%_" "%~n_DO.*"

В командном файле (использовать%% )

FOR %%_ IN (*.cs) DO @REN "%%_" "%%~n_DO.*"

Примечания:

  • %_ является допустимой переменной

  • @ это не сбрасывать команды переименования для каждого имени файла

  • %~n_возвращает только часть имени из %_(удаляет последнее расширение)

  • Добавьте /R "c:\directory"для рекурсивного анализа каталога ( https://ss64.com/nt/for_r.html ). Используйте с осторожностью - нет отмены

  • Двойные кавычки "важны, потому что пути и имена файлов могут включать пробелы

  • Не будет работать должным образом с несколькими расширениями, потому что в Windows только последний токен считается расширением. Т.е. test.tar.gz станет test.tarDO.gz

Я предлагаю вам сначала попробовать с FOR %_ IN (*.cs) DO echo REN "%_" "%~n_DO.*"сухой пробой

venimus
источник