Поведение "?" подозрительно при попытке переименовать все файлы текущей папки (через Batch Script), ожидая, что расширение не изменится - PullRequest
0 голосов
/ 28 марта 2019

Я уже давно выполняю сценарии в Windows (7 64-битных) Batch engine.

Что меня действительно огорчает, так это команда rename при попытке переименовать все файлы в папке и использовании "?"чтобы сохранить расширение файла без изменений.

Пожалуйста, посмотрите на приведенный ниже набор команд:

@echo off
set /p filename="Desired File Name: "
rename *.* "%filename%.???"

Предполагается, что расширение файла останется таким, как есть, но, наоборот, если яПередав filename как «ДЕНЬГИ 2016», он неожиданно переименовывает файлы в «ДЕНЬГИ 2016.201», почему это так?

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

Как сделать так, чтобы работа с ожидаемой длиной в одну строку была максимально короткой?

Ответы [ 2 ]

1 голос
/ 29 марта 2019

Вы меняете структуру оригинальных и новых имен.* определенно не соответствует ??? (это должно быть очевидно).Команда rename с правильной структурой работает хорошо:

C:\Users\Antonio\Tests> dir
 El volumen de la unidad C no tiene etiqueta.
 El número de serie del volumen es: 0895-160E

 Directorio de C:\Users\Antonio\Tests

28/03/2019  10:12 p. m.    <DIR>          .
28/03/2019  10:12 p. m.    <DIR>          ..
28/03/2019  10:11 p. m.                 7 four.srt
28/03/2019  10:11 p. m.                 7 one.mkv
28/03/2019  10:11 p. m.                 7 three.avi
28/03/2019  10:11 p. m.                 7 two.mp4
               4 archivos             28 bytes
               2 dirs  391,521,251,328 bytes libres

C:\Users\Antonio\Tests> rename *.* NewName.*

C:\Users\Antonio\Tests> dir
 El volumen de la unidad C no tiene etiqueta.
 El número de serie del volumen es: 0895-160E

 Directorio de C:\Users\Antonio\Tests

28/03/2019  10:12 p. m.    <DIR>          .
28/03/2019  10:12 p. m.    <DIR>          ..
28/03/2019  10:11 p. m.                 7 NewName.avi
28/03/2019  10:11 p. m.                 7 NewName.mkv
28/03/2019  10:11 p. m.                 7 NewName.mp4
28/03/2019  10:11 p. m.                 7 NewName.srt
               4 archivos             28 bytes
               2 dirs  391,521,251,328 bytes libres
1 голос
/ 28 марта 2019

Вот мой комментарий в качестве ответа.

Я бы предложил цикл For в качестве простого метода выполнения этой задачи:

@Set /P "filename=Desired File Name: "
@For %%A In (*.*)Do @If Not Exist "%filename%%%~xA" Ren "%%A" "%filename%%%~xA" 2>Nul

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

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