2015-03-03 2 views
0

У меня есть около 100 .xml файлов, но его имена не являются само собой разумеющимися. Поэтому я хотел бы найти конкретное слово и распространить уважающий файл на это слово. Благодаря некоторым другим полезным элементам я мог бы частично понять, как это сделать, но так или иначе файлы не переименовываются.Пакет: поиск файлов с определенным контентом и расширение существующего имени

Есть ли у кого-нибудь идея, что не так с моим кодом? Заранее спасибо.

chcp 1252 
SET sourcedir=P:\path 
FOR /f "tokens=1 delims=." %%a IN ('findstr /c:"3256" "%sourcedir%\*.xml"') DO ( 
ECHO (REN "%%a.xml" "%%a_3256.xml") 
) 
pause 
+0

Кажется, команда 'FINDSTR' добавляет': 'к результатам, и эта проблема вызывает проблемы. Я искал методы для замены или удаления строк из строки в DOS, но до сих пор не нашел ничего полезного. – user4317867

ответ

0
chcp 1252 
SET "sourcedir=P:\path" 
FOR /f "delims=" %%a IN ('findstr /m /c:"3256" "%sourcedir%\*.xml"') DO ( 
    ECHO REN "%%a" "%%~na_3256%%~xa" 
) 
pause 

В своем коде вы используете %%a для обоих аргументов ren команды, но второй аргумент должен содержать только имя и расширение, без пути. Вы можете решить его с помощью %%~na, то есть имя файла (без пути или расширения) файла, который ссылается %%a (%%~xa является расширение)

Кроме того, если строка найдена более чем один раз в любой файл, ваш код попытается дважды переименовать файл (или больше). Лучше использовать переключатель /m в findstr, чтобы получить только список файлов.

Операции переименования отображаются только на консоли. Если выход прав, удалите команду echo.

+0

Благодарим вас (также @ пользователь4317867). –

+0

Я понимаю, что вы имеете в виду, и попытался соответствующим образом изменить свой код. Однако я не могу найти переименованный файл в моей папке. Так как он переименовывает файл, не следует ли это делать в той же папке? Мой новый код выглядит точно так же, как код MC ND. CHCP SET тысячу двести пятьдесят две SourceDir = Р: \ путь ДЛЯ/ф %% а в ('Findstr/м/с: "3256" "% SourceDir% \ * XML"') DO ( ЭХО %% ECHO REN "%% a" "%% ~ na_3256 %% ~ xa" ) pause Я должен попробовать еще раз этим вечером. Надеюсь вскоре найти решение/объяснение. –

+0

@an_ja, я виноват, я забыл включить последнюю строку в ответ. Теперь обновлено. Удалите команду 'echo', которая добавляет команду' ren'. –

0

Dang это MC ND, сразу же после того, как я сделал некоторый Франкенштейн сценарии, придумывая:

После проб и ошибок, наряду с этим большим сайтом, мне удалось придумать (кредитование DOS Batch : remove characters from string in a FOR loop)

@ECHO OFF 
set pathd=C:\SomePathHere 
setlocal enabledelayedexpansion 
for /f %%a in ('findstr /ic:SearchString %pathd%\*.xml') do (
set str=%%a 
set str=!str:^:=! 
echo !str! 
) 
Смежные вопросы