Как заменить отдельный символ в именах файлов Windows с помощью пакетного файла?

У меня есть сервер Windows Server 2003, который имеет целый набор имен файлов то переименование потребности. В основном мне просто нужны все - (дефисы), замененные _ (символы нижнего подчеркивания), неважно, где они находятся в имени файла. Предположите, что нет никаких дубликатов.

Я могу сделать это на своем Mac с небольшим сценарием, но файлы являются слишком большими и сумасшедшими передать моему Mac, переименуйте, затем вернитесь к серверу. Действительно ли возможно сделать это в командной строке Windows, не имея необходимость загружать renamer или какое-либо дополнительное программное обеспечение?

7
задан 30.07.2014, 11:29

3 ответа

От командной строки - предполагающий, что все Ваши файлы находятся в том же каталоге:

ОСТРОТА

for /f "tokens=* delims= " %i in ('dir /b "*.txt"') do Set LIST=%i& set LIST | ren "%~fi" "%LIST:-=_%"

Следует иметь в виду, что это - выстрел того на окно командной строки. Это означает, отменяете ли Вы это по какой-либо причине, затем необходимо будет открыть другую командную строку и работать снова.

11
ответ дан 07.12.2019, 14:34

Найденный им на stackoverflow:

https://stackoverflow.com/questions/261515/batch-file-script-to-remove-special-characters-from-filenames-windows

Set fso = CreateObject("Scripting.FileSystemObject")
Set re  = New RegExp

re.Pattern = "[-]" ' put all characters that you want to strip inside the brackets'
re.IgnoreCase = True
re.Global = True

If WScript.Arguments.Unnamed.Count = 1 Then
  If fso.FolderExists(WScript.Arguments.Unnamed(0)) Then
    Recurse fso.GetFolder(WScript.Arguments.Unnamed(0))
  Else
    WScript.Echo "Folder not found."
  End If
Else
  WScript.Echo "Please give folder name as argument 1."
End If


Sub Recurse(f)
  For Each sf In f.SubFolders
    Recurse sf
     WScript.Echo sf.Name, " -> ", re.Replace(sf.Name, "_")
    sf.Name = re.Replace(sf.Name, "_")
  Next
  For Each sf In f.Files
     WScript.Echo sf.Name, " -> ", re.Replace(sf.Name, "_")

     If sf.Name <> re.Replace(sf.Name, "_" ) Then
       sf.Name = re.Replace(sf.Name, "_")
     End If
  Next
End Sub
2
ответ дан 07.12.2019, 14:34

12 полудня имеет утилиту FREE, чтобы сделать массовое переименование файла с полной поддержкой регулярного выражения, которая довольно прохладна. "Назовите Обманщика" информационной страницей со ссылками для загрузки

Я не использовал этого в гневе, но использовал другие их приложения (особенно преобразователь дисплея) и был действительно счастлив.

0
ответ дан 07.12.2019, 14:34

Теги

Похожие вопросы