3

У меня есть папка с 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

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

Спасибо

2 ответа2

3

Как уже говорили другие, это означает , что 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% на его реальное значение.

0

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .