Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Изменение файла и его использование в *bat (http://forum.oszone.net/showthread.php?t=257494)

Partiship 30-03-2013 19:33 2122415

Изменение файла и его использование в *bat
 
Наткнулся на такую проблему. Извиняюсь, я - новичок.
Вот в чем дело. Хотелось бы, чтобы данные записанные в файл, например Results.txt - можно было изменить.
И измененную строку из этого файла, как-нибудь экспортировать в *bat (или как это называется), чтобы по этому пути скопировать файл в папку, например %COMPUTERNAME%\Library.

copy C:\Users\Profile.ini %COMPUTERNAME%
@findstr "Path=Profiles" %COMPUTERNAME%\Profiles.ini>%COMPUTERNAME%\Results.txt
MD %COMPUTERNAME%\Library

copy C:\Results.txt %COMPUTERNAME%\Library

Вместо Results.txt - должен он видить путь. Чтобы вместо Results.txt стоял путь, тот что в самом Results.txt записан.

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

Буду признателен.

zion87 31-03-2013 09:28 2122652

Цитата:

Цитата Partiship
Хотелось бы, чтобы данные записанные в файл, например Results.txt - можно было изменить. »

, а что есть проблемы с блокнотом )))))

Цитата:

Цитата Partiship
Я не знаю, как это правильно выразить, как смог »

вы уж как то по другому объясните, ну ничего не понятно....

Partiship 31-03-2013 11:10 2122692

Хотелось бы чтобы батник все делал сам.

Суть вот в чем. Есть Папка, пусть будет Папка1. В Папке1 лежит другая Папка2.xxx. , где xxx неизвестно. Но в Папке1 лежит файл, в котором лежит название этого самого xxx .
Нужно скопировать все файлы из папки Папка2.xxx. . То есть я хочу, чтобы он из Папки1 брал файл, открывал его, я дописывал ему путь в этом файле к папке Папка2.xxx. и он бы копировал все из этой самой папки.

Partiship 31-03-2013 14:48 2122792

Спасибо, нашел решение.

Код:

set /p variable=<%COMPUTERNAME%\Changed.txt
Появилась другая проблема. Копируются не все файлы и папки.
Вот код. Почему копируются не все файлы и папки?
Код:

xcopy C:\Users\%USERNAME%\AppData\Roaming\Mozilla\Firefox\Profiles\%variable% %COMPUTERNAME%\Library /H /E /G /Q /R /Y

zion87 31-03-2013 14:54 2122796

Код:

@Echo off
Set KUDA=Papka3
For /f "Delims=" %%a In ('Dir /b Papka2*') Do Xcopy /e "%%a\*.*" "%KUDA%\"
Exit

есть Папка 1 в ней этот бат и Papka2.xxx, запускаем бат он копирует все файлы из Papka2.xxx в Papka3

Iska 31-03-2013 16:31 2122846

Цитата:

Цитата Partiship
C:\Users\%USERNAME%\AppData »

Код:

%AppData%

Partiship 31-03-2013 17:38 2122907

Я не очень понял.
Цитата:

Цитата Iska
%AppData% »


Iska 31-03-2013 20:11 2123039

Цитата:

Цитата Partiship
Я не очень понял. »

Исполните в командной строке:
Код:

set AppData

Partiship 31-03-2013 23:42 2123170

Я не совсем понял.
Я имел ввиду, почему копирует не все файлы и папки содержащиеся в папке %variable%
Код:

set /p variable=<%COMPUTERNAME%\Changed.txt xcopy C:\Users\%USERNAME%\AppData\Roaming\Mozilla\Firefox\Profiles\%variable% %COMPUTERNAME%\Password
Копирует не все файлы и папки

Iska 01-04-2013 00:00 2123179

Например?

Partiship 01-04-2013 13:02 2123403

Например в папке variable есть 4 папки и 15 файлов, так вот, папки не копируются вообще, а из 15 файлов копируются только 9. В папке разные файлы *db, *sqlite, *xml и тд. Не копируются файлы *db - никакие и еще пара файлов.
Если копировать их отдельно, то все замечательно.
Но мне нужно скопировать в подпапки и все файлы из папки variable.

Dragokas 01-04-2013 13:03 2123406

Потому что:
Код:

set /p variable=<%COMPUTERNAME%\Changed.txt
считывает в переменную только 1-ю строку. А больше и нельзя.

Используйте цикл:

Код:

@echo off
for /f "UseBackQ delims=" %%A in ("%COMPUTERNAME%\Changed.txt") do (
  xcopy "C:\Users\%USERNAME%\AppData\Roaming\Mozilla\Firefox\Profiles\%%A" "%COMPUTERNAME%\Password" /C /E /H /R /Y
)

Ключи для Xcopy /? сами подставите нужные.

Partiship 01-04-2013 15:09 2123521

О, благодарю все отлично заработало!
А можете объяснить пожалуйста, что именно делает этот цикл ?
Вот здесь именно.
Код:

for /f "UseBackQ delims=" %%A in

Dragokas 01-04-2013 15:52 2123570

UseBackQ в данном контексте - это страховка от возможных символов пробела в пути и/или имени файла. Поэтому вариант без UseBackQ менее предпочтителен.
Модификатор UseBackQ изменяет правила выбора действия в зависимости от вида кавычек под скобками.
Для двойных кавычек ("") - означает, что нужно построчно прочитать указанный в них файл.

"delims=" задает пустой разделитель вместо принятых по-умолчанию пробела и знака табуляции.
Это тоже страховка от пробелов, но уже при чтении содержимого самого файла. Иначе информация после пробела будет попадать во 2-й и далее токен (лексические части, разбитые разделителем).
%%A - объявление имени переменной цикла, куда будет попадать 1-й токен. После ключевого слова Do указывается точно в таком же виде, где и раскрывается в значение. Регистр имеет значение. (одна итерация цикла = 1 строке файла). Есть исключения. Подробности: For /?

for /f - ключ для использования специальных правил лексического разбора.
Может использоваться только при включенном режиме расширенной обработки команд.
В некоторых ОС такой режим отключен. Не будет лишним форсировать его включение. Добавьте после @echo off
Код:

SetLocal EnableExtensions

Partiship 01-04-2013 18:59 2123775

Спасибо, большое! :)


Время: 14:14.

Время: 14:14.
© OSzone.net 2001-