PDA

Показать полную графическую версию : Переименование файлов


gremlintv2
27-06-2016, 22:02
Для меня задача показалась нетривиальной, поэтому я создал новую тему, если есть ответ попрошу ткнуть носом и удалить тему.
В чем заключаеться задача:
Есть такой скрипт:
for /f "delims=" %%i in ('dir /b /a:-d C:\папка') do ("c:\Program Files\PDFCreator\PDFCreator.exe" /PrintFile="C:\папка\%%i" && echo %%i)
Он прекрасно работает и конвертирует файлы в pdf, но есть проблема:
Если в имени файла встречаються незнакомые для cmd символы он их подменяет на "?". Например "Імя" -> "?мя"
Сответсвенно внутренняя команда такого имени файла не находит.
Собственно вопрос как в названии файлов заменить эти "?" на "_" ?
На форуме множество примеров как заменить определенный символ на другой, но как заменить "непонятный для cmd символ" я к сожалению не нашел =(.
Вот скрипт подставляющий в название xml файлов "12345" как я понял
@echo off
set nabor=12345
set folder=C:\1

for /f "delims=" %%A in ('dir /b /a-d "%folder%\*%nabor%*.xml"') do (
ren "%folder%\%%A" "%nabor%.xml"
)
pause

Iska
27-06-2016, 23:13
Если в имени файла встречаються незнакомые для cmd символы он их подменяет на "?". Например "Імя" -> "?мя" »
Символы знакомые, просто они отсутствуют в кодовой странице OEM/866, как я полагаю.

Собственно вопрос как в названии файлов заменить эти "?" на "_" ? »
Вам не надо ничего заменять.

Можно вообще не использовать «dir», а просто перебирать файлы. Можно попробовать делать смену кодовой страницы (например, на 1251 или 65001) до, и вобрат — после основного тела пакетного файла. Можно перейти к использованию WSH/PowerShell, что будет и более правильным.

gremlintv2
27-06-2016, 23:38
Спасибо нашел решение в соседней теме, и угадайте кто там помог с решением вопроса? =)
Вопрос закрыт нужно вначале файла изменить кодировку на:
chcp 1251
Большое спасибо Iska всегда выручаете своими ответами! =)

megaloman
27-06-2016, 23:42
VBS-cкриптPapka = "C:\папка"

Prog = """c:\Program Files\PDFCreator\PDFCreator.exe"" /PrintFile="
' Prog = """C:\Windows\System32\notepad.exe"" "

Set FSO = CreateObject("Scripting.FileSystemObject")
Set FSH = CreateObject("WScript.Shell")

If FSO.FolderExists(Papka) Then
Set Fol = FSO.GetFolder(Papka)
Set Files = Fol.Files
For Each File In Files
Filename = """" + Papka + "\" + File.Name + """"
ErrRun = FSH.Run(Prog + Filename, 10, True)
Next
End If




© OSzone.net 2001-2012