1

Тема: CMD/BAT: Как заменить / на \ ?

Имеется файл в котором прописано в столбик некое:
Файл с путями
catalog/hi-fi
picture/Holidays
September_1
Cities
Girls/3D_Girls

Строк может быть не известно, но если нужно, я могу и посчитать строки.
Это список каталогов скаченных с сайта, и папки уже созданы согласно этому расположению
catalog\hi-fi
picture\Holidays и тд...

Мне надо скопировать файл по этому пути согласно от нахождения, папки созданы уже
Папки
catalog\hi-fi
Cities
И тд тут всё нормально.

Но, возникла необходимость считать файл с путями и перенести в каждую папку файл, тут и возникает НО!
В пути без / он копирует норм, ну тут понятно, а вот если взять с этим /, то он уже выдаст ошибку.

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

Как мне избавиться от этой проблемы, мои мысли поменять в файле все / на \ имеется программа
CHGSTR, но и там, я не понял в чем проблема, но тупо слэши не меняет, прошу помощи(

CHGSTR "/" "\" test.txt , скорее всего нужно экранировать , но все перепробовал, что то не получается...

Если можно с комментариями... Сам я дизайнер, с кодом работаю не часто.

2

Re: CMD/BAT: Как заменить / на \ ?

cmd /v:on /q /c "set xxx=fdfsffsf/sjhkjhkfsjh/sfsff&&echo !xxx:/=\!"

Я конечно далек от мысли... (с)

3 (изменено: yuriy2000, 2012-12-11 21:17:50)

Re: CMD/BAT: Как заменить / на \ ?

что-то не очень понятен вопрос или точнее проблема?
"Файл с путями" это  что, текстовый файл полученный из какой-то другой программы?
Почему Вы не можете в нем поменять символы через любой текстовый редактор?

Вот CMD для выполнения задачи в таком виде в каком я ее понял.

первый параметр - имя файла (можно использовать ? или *), который необходимо скопировать,
второй - имя Вашего файла с путями

 
@echo off
for /f %%A in (%2) do call :mycopy %1 %%A
goto :EOF

:mycopy
set STR=%2
xcopy /I /F %1 .\%STR:/=\%\
goto :EOF

4

Re: CMD/BAT: Как заменить / на \ ?

yuriy2000 пишет:

что-то не очень понятен вопрос или точнее проблема?

Значит я пишу парсер для изображений, качаю в целях не использовать их в работе, а что бы смотреть что да как, так как я сам пользователь графики мне это важно.  зачем качать? Что бы смотреть оффлайн, проблема с нэтом. Просто скачать их в кучу не проблема, но я решился сделать парсер что бы и имена тоже были нормально из описания к картинки, все реализовал к сайту
Файл с путями, это файлик который я пишу сам в строки все каталоги сайта с картинками.
...://site.com/moda/jinshini/
...://site.com/moda/mujiki/
...://site.com/noviy_god/elki/
...://site.com/photoshop/
и тд, то есть галереи из 2 изредка из 1 каталога.
Значит я пишу в файлик:
moda/jenshini
moda/mujiki
photoshop

Теперь wget качаю все страницы что там есть и тд и тп, долгий срипт обработки, и тут декодер самодельный.
Я пишу цикл декодером из папки moda/jinshini/тут файлы , перебираем файлы и сохраняем результат в файлик
Файлик создается в самой директории до -  тут/moda/jenshini/

Естественно теперь надо взять файлик и выкинуть обратно moda/jenshini/сюда
Для этого считываю файлик с путями что бы узнать какой путь до файлов, которые нужно проверить moda/jenshini/  и сюда перебросить файл.
Что бы следующий цикл moda/mujiki <- из этого каталога не сохранился поверх предыдущего файла, но тут и возникает проблема так как ссылки (Пути) с / слешем, он не перебросит туда файл, а тупо выдаст ошибку.
Теперь маленькая карта для подробностей:

file.txt <--в нем --> moda/jenshini - список в столбик.
wget http://site/строка из файла/файлы
Он скачает в папку moda\jenshini\файла
Проверяем декодером /строку из файла/файлы (Декодеру разницы нет на слеш)
и он сохранит тут же output.txt с результатами

Теперь надо скопировать output.txt и закинуть /строка из файла/сюда
Но так как в файле moda/jenshin слэши, а надо moda\jenshine , он выдаст ошибку...

Не знаю понятно ли меня..

5

Re: CMD/BAT: Как заменить / на \ ?

smaharbA пишет:

cmd /v:on /q /c "set xxx=fdfsffsf/sjhkjhkfsjh/sfsff&&echo !xxx:/=\!"

Можно пожалуйста подробней, ведь пользователи командной строки не все гуру...

Я не совсем понял что это, кроме set xxx=fdfsffsf/sjhkjhkfsjh/sfsf , это моя строка.

6

Re: CMD/BAT: Как заменить / на \ ?

Все я решил проблему таким образом
@Echo Off
SetLocal EnableDelayedExpansion
Set file=paths.txt
Set newfile=paths1.txt

For /F "tokens=* usebackq delims=" %%i In ("%file%") Do (
Set ti=%%i
Echo !ti:/=\!
)>>"%newfile%"

Спасибо всем большое за то, что прореагировали на мою просьбу!

7

Re: CMD/BAT: Как заменить / на \ ?

Ничего не понял.  

Почему если файл с путями вы создаете вручную, то почему вы не можете создать копию этого файла заменив в нем все обратные слеши на прямые? и потом уже использовать эту копию. Или проблема в самом копировании файлов?
--------
Вы объясните техническую суть задачи/проблемы (что у вас не получается) - меня не интересует что вы делаете с фотографиями и откуда вы их скачиваете.  Приведите пример своего batfile,  который вы используете для того чтобы "закинуть" файлы туда-сюда.

8

Re: CMD/BAT: Как заменить / на \ ?

yuriy2000 пишет:

Ничего не понял.  

Почему если файл с путями вы создаете вручную, то почему вы не можете создать копию этого файла заменив в нем все обратные слеши на прямые? и потом уже использовать эту копию. Или проблема в самом копировании файлов?
--------
Вы объясните техническую суть задачи/проблемы (что у вас не получается) - меня не интересует что вы делаете с фотографиями и откуда вы их скачиваете.  Приведите пример своего batfile,  который вы используете для того чтобы "закинуть" файлы туда-сюда.

А если главный цикл состоит из этих строк, и везде они используются, но тут понадобилось

строку с // заменить на \\ не выходя из цикла ...

9

Re: CMD/BAT: Как заменить / на \ ?

unbywyd пишет:

А если главный цикл состоит из этих строк, и везде они используются, но тут понадобилось

строку с // заменить на \\ не выходя из цикла ...

В чем главный цикл? если это скрипт, то покажите его - хотя бы часть.

вот кусок из встроенной справки SET /?

Подстановка переменной среды может быть расширена следующим образом:

    %PATH:str1=str2%

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

10

Re: CMD/BAT: Как заменить / на \ ?

yuriy2000 пишет:

В чем главный цикл? если это скрипт, то покажите его - хотя бы часть.

вот кусок из встроенной справки SET /?

Подстановка переменной среды может быть расширена следующим образо...

%%i - строки
Файл содержит:
Holidays/September_1
New_Year_wallpapers
Girls/3D_Girls
Auto/Alfa_Romeo

for /f %%i in (settings/style.txt) do (
wget http://www.zastavki.com/rus/%%i/ -P content2\%%i\файлы - создает content2\Holidays/September_1\файлы
html_decoder.exe data/count_settings3.ini content2\%%i\Файлы  - проверяет content2\Holidays/September_1\файлы

Получаем output.txt перед content2
rem output.txt content2\%%i\  - тут проблема в %%i нужно перенести в content2\Holidays/September_1 проблема в /
)

11

Re: CMD/BAT: Как заменить / на \ ?

smaharbA пишет:

cmd /v:on /q /c "set xxx=fdfsffsf/sjhkjhkfsjh/sfsff&&echo !xxx:/=\!"

Как мне эту конструкцию использовать как путь?

mkdir и эту конструкцию.
или ren \конструкция\файл.txt файл2.txt ??

12

Re: CMD/BAT: Как заменить / на \ ?

зачем вам использовать mkdir - используйте  xcopy, он сам создаст нужные каталоги см. мой пример выше.

13

Re: CMD/BAT: Как заменить / на \ ?

yuriy2000 пишет:

зачем вам использовать mkdir - используйте  xcopy, он сам создаст нужные каталоги см. мой пример выше.

Мне подсказали можно взять dir "C:/" в скобки и все будет работать..
Другая проблема возникла
Есть два файла в одном появляются имена:

Русские-матрешки
Белые-шнурки
Буднее-утро
Кнопки
Встреча-в-деревне
Фото-объектив
Флаг-России
Тюбики-с-разноцветной-краской
Дорожный-знак
Когда-музыка-молчит
Послание
Тревожные-кнопки

В другом ссылки:

http://www.zastavki.com/pictures/1920x1200/2012/Widescreen_Russian_dolls_035029_.jpg
http://www.zastavki.com/pictures/2560x1600/2012/Widescreen_White_laces_035020_.jpg
http://www.zastavki.com/pictures/1920x1200/2010/Widescreen_Weekday_morning_025316_.jpg
http://www.zastavki.com/pictures/1920x1200/2010/Widescreen_Button_022757_.jpg
http://www.zastavki.com/pictures/1920x1200/2010/Widescreen_Meeting_in_village_021472_.jpg
http://www.zastavki.com/pictures/1920x1200/2010/Widescreen_Photo_a_lens_021452_.jpg
http://www.zastavki.com/pictures/2560x1600/2010/Widescreen_Flag_of_Russia_021276_.jpg
http://www.zastavki.com/pictures/2560x1600/2010/Widescreen_Tubes_with_a_multi-coloured_paint_021242_.jpg
http://www.zastavki.com/pictures/2560x1600/2010/Widescreen_Traffic_sign_021100_.jpg
http://www.zastavki.com/pictures/1920x1200/2010/Widescreen_When_music_is_silent_021057_.jpg
http://www.zastavki.com/pictures/1680x1050/2010/Widescreen_Message_021056_.jpg
http://www.zastavki.com/pictures/1920x1200/2010/Widescreen_Disturbing_buttons_021045_.jpg

мне надо wget -O имена.jpg ссылки

Как это реализовать не поможете ?

14 (изменено: yuriy2000, 2012-12-12 21:12:41)

Re: CMD/BAT: Как заменить / на \ ?

берем Excel - в первый столбец загружаем список имен, во второй url. потом сохраняем лист в формате .CSV  (urls.csv). после чего скачиваем все эти url командой

for /f "tokens=1,2 delims=;" %A in (urls.csv) do @Wget -O %A.jpg  %B

разделитель для CSV  по умолчанию точка с запятой, но могут использоваться и другие,
тогда замените delims=; на другой символ

delims=xxx      - определение набора разделителей для замены заданных
                     по умолчанию пробела и знака табуляции.

15

Re: CMD/BAT: Как заменить / на \ ?

yuriy2000 пишет:

берем Excel - в первый столбец загружаем список имен, во второй url. потом сохраняем лист в формате .CSV  (urls.csv). после чего скачиваем все эти url командой

for /f "tokens=1,2 delims=;" %A in (urls.csv) do @Wget -O %A.jpg  %B

разделитель для CSV  по умолчанию точка с запятой, но могут использоваться и другие,
тогда замените delims=; на другой символ

delims=xxx      - определение набора разделителей для замены заданных
                     по умолчанию пробела и знака табуляции.

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

16

Re: CMD/BAT: Как заменить / на \ ?

yuriy2000 пишет:

...

Юрий я решил проблему эту, у меня осталась ещё одна не мало важная, у меня создаются файлики в файле n число строк, всегда по разному, мне нужно открыть файлик и вырезать только 1 строку для дальнейшего использования, или удалить все остальные из этого файла...

17

Re: CMD/BAT: Как заменить / на \ ?

Есть два файла в одном появляются имена:
В другом ссылки:

Вы два списка вручную формируете? Можно же постараться в одно действие получить и имя файла и ссылку. наверняка имена и ссылки скопированы/выбраны со страницы.

Если надо работать именно с двумя списками, то вот Вам алгоритм:
1. перенумеровать содержимое файлов
2. отсортировать результат
3. удалить номера строк
4. объединить попарно две соседние строки

( 2 * b ) || ! ( 2 * b )

18

Re: CMD/BAT: Как заменить / на \ ?

Rumata пишет:

Есть два файла в одном появляются имена:
В другом ссылки:

Вы два списка вручную формируете? Можно же постараться в одно действие получить и имя файла и ссылку. наверняка имена и ссылки скопированы/выбраны со страницы.

Если надо работать именно с двумя списками, то вот Вам алгоритм:
1. перенумеровать содержимое файлов
2. отсортировать результат
3. удалить номера строк
4. объединить попарно две соседние строки

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

for /f %%a in (out2.txt) do ( 
REM Прогоняем каждый загруженный файл
html_decoder.exe data/count_settings3.ini content2/%%l/%%a
for /f "tokens=*" %%S in ('type output.txt ^| find /n /v ""') do (
for %%T in ([1]) do (
for /f "tokens=1,* delims=]" %%I in ('echo %%S ^| find "%%T"') do (
echo %%J >> result.txt
del output.txt
)))
)

out2.txt содержит имена файлов, %%l это путь в каталог - цикл выше, output.txt результат переработки html_decodera.

Должен прогнать каждый файл выбрать декодером нужные части, так получилось что их не одно количество:


<td>
<a class="BIGG" href="/rus/Animals/Cats/wallpaper-5489-2.htm">
<u>1600x1200 (382Кб)</u>
</a>
</td>

<td>
<a class="BIGG" href="/rus/Animals/Cats/wallpaper-5489-24.htm">
<u>1366x768 (563Кб)</u>
</a>
</td>

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

То  я прогоняю файл вырезаю все ссылки, беру 1 строку и сохраняю в файл результ и тд, а файлов бывает 2000 и выше. Тогда этот процесс ууу сколько времени занимает.

19

Re: CMD/BAT: Как заменить / на \ ?

yuriy2000 пишет:

берем Excel - в первый столбец загружаем список имен, во второй url. потом сохраняем лист в формате .CSV  (urls.csv). после чего скачиваем все эти url командой

for /f "tokens=1,2 delims=;" %A in (urls.csv) do @Wget -O %A.jpg  %B

разделитель для CSV  по умолчанию точка с запятой, но могут использоваться и другие,
тогда замените delims=; на другой символ

delims=xxx      - определение набора разделителей для замены заданных
                     по умолчанию пробела и знака табуляции.

Я сегодня ломал голову насчет этого, открыл Exlec, нашел как сохранить CSV, но как реализовать 2 столбика я так и не понял, я вижу туча клеток, и каким образом реализовать 2 столба так и не допер, или в каждую клеточку писать ссылку ? Ссылок очень как и имен. Да и файлов очень много.....

И неужели не как нельзя по другому?
Есть файл 1 : Имена
Есть файл 2 : Ссылки
Нужен 3: Wget -O Имена.jpg Ссылки

20 (изменено: yuriy2000, 2012-12-15 05:35:45)

Re: CMD/BAT: Как заменить / на \ ?

как реализовать 2 столбика

1. открываем 1-й файл в блокноте и копируем его содержимое в буфер
2. открываем лист Excel, вставляем содержимое буфера в первый столбец (A)
3. открываем 2-й файл в блокноте и копируем его содержимое в буфер
4. открываем лист Excel, вставляем содержимое буфера во 2-й столбец (B)

если имеет под руками FAR, то можно обойтись без Excel -  "вставить 2-й файл" в 1-й  через копирование вертикальных блоков (Alt+стрелки)

Можно ли сделать при помощи Bat/cmd считывание из двух файлов?
- да можно, но я на вскидку не подскажу как.
если Вас устроит код на VBScript - то это без проблем только это скорее всего в другой ветке.

21

Re: CMD/BAT: Как заменить / на \ ?

для склейки строк из нескольких файлов можно использовать утилиту paste  из комплекта программ GNU Core Utilities

Вызов такой

paste.exe -d; имена.txt ссылки.txt >1.txt 
for /f "tokens=1,2 delims=;" %A in (1.txt) do @Wget -O %A.jpg  %B

22 (изменено: unbywyd, 2012-12-15 15:42:16)

Re: CMD/BAT: Как заменить / на \ ?

yuriy2000 пишет:

для склейки строк из нескольких файлов можно использовать утилиту paste  из комплекта программ GNU Core Utilities

Вызов такой

paste.exe -d; имена.txt ссылки.txt >1.txt 
for /f "tokens=1,2 delims=;" %A in (1.txt) do @Wget -O %A.jpg  %B

Поискал в нэте, что то не очень много об этом нашел, нашел что то под линукс... а прогу так и не нашел.

23

Re: CMD/BAT: Как заменить / на \ ?

GnuWin32 Packages

24

Re: CMD/BAT: Как заменить / на \ ?

alexii пишет:

GnuWin32 Packages

Не пойму, я слепой или ctrl+f плохо работает, ну нету там paste

25

Re: CMD/BAT: Как заменить / на \ ?

комплект утилит  можно скачать здесь

26

Re: CMD/BAT: Как заменить / на \ ?

yuriy2000 пишет:

комплект утилит  можно скачать здесь

Спасибо.

27

Re: CMD/BAT: Как заменить / на \ ?

yuriy2000 пишет:

комплект утилит  можно скачать здесь

Я всё сделал! Большое вам спасибо, вы действительно очень мне помогли! Дай Бог вам здоровья!

28

Re: CMD/BAT: Как заменить / на \ ?

unbywyd пишет:

Не пойму, я слепой или ctrl+f плохо работает, ну нету там paste

Читайте выше:

yuriy2000 пишет:

для склейки строк из нескольких файлов можно использовать утилиту paste  из комплекта программ GNU Core Utilities

Так что искать нужно было не «paste», а, как и написал выше коллега yuriy2000, именно «Core Utilities», в состав которых она входит.

29

Re: CMD/BAT: Как заменить / на \ ?

alexii пишет:
unbywyd пишет:

Не пойму, я слепой или ctrl+f плохо работает, ну нету там paste

Читайте выше:

yuriy2000 пишет:

для склейки строк из нескольких файлов можно использовать утилиту paste  из комплекта программ GNU Core Utilities

Так что искать нужно было не «paste», а, как и написал выше коллега yuriy2000, именно «Core Utilities», в состав которых она входит.

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

30

Re: CMD/BAT: Как заменить / на \ ?

yuriy2000 пишет:

Ещё раз приветствую, не знаю у меня возник вопрос, создать тему или можно тут его задать, вопрос такой

Я пишу новый парсер, возник вопрос, я качаю страницу wget, и там вся страница в 1 строчку
Что нужно? Разбить её по строкам.
Можно ли заменять символы на "Перенос строки", или же после каждого символа сделать перенос строки на следующую...

Может есть прога уже готовая которую можно юзать через cmd?

Я хочу разбить строку на много других, что бы перебрать их и сохранить то, что мне надо. Может есть какие то опять такие проги ? Подскажите пожалуйста, по маске там и тд.

31

Re: CMD/BAT: Как заменить / на \ ?

unbywyd пишет:

создать тему или можно тут его задать,

Прочитать Правила форума. Задать новый вопрос в новой теме.