Войти

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


Страниц : [1] 2

Oleg2011
27-09-2011, 16:41
Здравствуйте! Начали работать в PowerShell, преподаватель задал выполнить следующее:

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

Само задание:
В зависимости от запроса
- скопировать заданный файл из одного каталога в другой с другим именем;

Помогите разобраться...пожалуйста
Заранее большое спасибо

Iska
27-09-2011, 17:57
Oleg2011, думаю, начать стоит с этого (http://forum.oszone.net/post-1608065.html#post1608065).

Oleg2011
29-09-2011, 14:06
var fso = new ActiveXObject("Scripting.FileSystemObject");

if (fso.FolderExists("C:\\TEST"))
WScript.Echo("Такая папка уже существует");
else

var Folder = fso.CreateFolder("C:\\TEST");
if (fso.FolderExists("C:\\TEST2"))
WScript.Echo("Такая папка уже существует");
else

var Folder = fso.CreateFolder("C:\\TEST2");

if (fso.FileExists("C:\\TEST\\test.txt"))
WScript.Echo("Такой файл уже существует");
else

var File = fso.CreateTextFile("C:\\TEST\\test.txt", true);

Создала две папки и файл. Вот не получается скопировать файл из первой папки во вторую ((

Iska
29-09-2011, 16:58
Так Вам нужен PowerShell или JScript/WSH?!

Oleg2011
04-10-2011, 13:34
PowerShell !!! Я вот только на JScript/WSH начал что-то понимать, а как сделать в PowerShell не знаю.

Kazun
04-10-2011, 14:00
Для копирования объектов используйте Copy-Item (подробнее в Get-help Copy-Item) ,существует ли объет - используйте Test-Path ( подробнее get-help test-path). Справку по if можно получить - get-help about_if.

Oleg2011
04-10-2011, 18:47
Спасибо.
А по поводу второго задания можете подсказать какие команды использовать:
из файла с указанным именем заданного каталога, содержащим записи вида: название книги, количество экземпляров, ФИО автора, год издания, выбрать записи с указанным названием и выдать их на экран с указанием порядковых номеров записей.

Kazun
04-10-2011, 19:18
Для этого потребуется Import-Csv (сохранить файл в кодировке Unicode).

Для примера:

books.csv

название книги, количество экземпляров, ФИО автора, год издания
Война и мир,50,Толстой Лев Николаевич,1869
капитанская дочка,10,Пушкин Александр Сергеевич,1937
Краденое солнце,5,Чуковский Корней Иванович,2011

Выберем книги,где есть слово солнце.

$i=1
$books = Import-Csv books.csv | select *,@{n="Index";e={($global:i++)}}
$books | where {$_."название книги" -match "солнце"}


Пример вывода:


PS > Import-Csv books.csv

название книги количество экземпляров ФИО автора год издания
-------------- ---------------------- ---------- -----------
Война и мир 50 Толстой Лев Николаевич 1869
капитанская дочка 10 Пушкин Александр Сергеевич 1937
Краденое солнце 5 Чуковский Корней Иванович 2011

#Добавим индекс
PS > $books


название книги : Война и мир
количество экземпляров : 50
ФИО автора : Толстой Лев Николаевич
год издания : 1869
Index : 1

название книги : капитанская дочка
количество экземпляров : 10
ФИО автора : Пушкин Александр Сергеевич
год издания : 1937
Index : 2

название книги : Краденое солнце
количество экземпляров : 5
ФИО автора : Чуковский Корней Иванович
год издания : 2011
Index : 3

PS > $books | where {$_."название книги" -match "солнце"}


название книги : Краденое солнце
количество экземпляров : 5
ФИО автора : Чуковский Корней Иванович
год издания : 2011
Index : 3

Oleg2011
05-10-2011, 10:13
Спасибо большое

Oleg2011
06-10-2011, 17:15
Здравствуйте, начал выполнять задание - скопировать заданный файл из одного каталога в другой
получается так

function fcopy($a) {
$cnt = 0;
foreach ($i in $a) {
$cnt++;
if ($i -eq "-f") {
break;
}
}
if (!$f) {
$f = Read-Host "Введите имя копируемого файла";
}
if (!$d) {
$d = Read-Host "Введите имя папки, где находится копируемый файл";

}
if (!$l) {
$l = Read-Host "Введите имя папки,в которую скопировать файл";
}

как мне использовать Copy-Item -path ? не могу разобраться...
path прописываю путь
$p = "" + $d + "/" + $f;
Помогите....

Kazun
06-10-2011, 17:32
Не понятно зачем такие сложности.
Copy-Item -Path C:\file.txt -Destination D:\Test\

Oleg2011
06-10-2011, 17:47
да, спасибо.
а как мне сделать, чтобы файл скопировался в каталог с другим именем...
нам просто нужно чтобы мы сами вводили имя файла, каталога,
вот мой код

function fdelete($a) {
$cnt = 0;
foreach ($i in $a) {
$cnt++;
if ($i -eq "-f") {
break;
}
}
if (!$f) {
$f = Read-Host "Введите имя копируемого файла";
}
if (!$d) {
$d = Read-Host "Введите имя папки, где находится копируемый файл";

}
if (!$l) {
$l = Read-Host "Введите имя папки,в которую скопировать файл";
}


$p = "" + $d + "/" + $f;


if (Test-Path $p) {
Copy-Item -path $p -destination $l -recurse
write "Файл скопирован $p"
} else {
write "Файл не найден $p"
}

return;
}

всё работает, только как переименовать файл? как вставить Rename-Item в мой код

Fantastish
06-10-2011, 17:55
чисто интеллектуально думаю стоит добавить типа строчки
"Введите имя нового файл";

Oleg2011
06-10-2011, 18:20
Все Разобрался!!!

Oleg2011
09-10-2011, 15:41
Здравствуйте, обращаюсь еще раз за помощью. По поводу второй задачи.
- из файла с указанным именем заданного каталога, содержащим записи вида: название книги, количество экземпляров, ФИО автора, год издания, выбрать записи с указанным названием и выдать их на экран с указанием порядковых номеров записей.

Была предложена идея Import-Csv (сохранить файл в кодировке Unicode). Преподаватель сказал все данные записать и сохранить в Блокноте. теперь возникла проблема написания скрипта, чтобы выбрать записи с указанным названием и выдать их на экран с указанием порядковых номеров записей. Помогите разобраться!
Спасибо.

Oleg2011
10-10-2011, 15:55
С помощью Get-Content я обращаюсь к содержимому файла. Как мне выбрать записи с указанным названием?

Kazun
10-10-2011, 16:03
Использовать Select-String,match и любой другой метод для поиска.

(Gc file.txt) -match "Текст"
Select-String file.txt -Pattern "Text"

Oleg2011
10-10-2011, 16:30
Спасибо! а теперь как мне выдать их на экран с указанием порядковых номеров записей???

Kazun
10-10-2011, 16:34
Как я показывал уже выше.

Oleg2011
10-10-2011, 16:53
Так что-то непонятно: select *,@{n="Index";e={($global:i++)}}




© OSzone.net 2001-2012