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

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

XXXp 22-04-2015 14:25 2499225

Рандом название файла
 
Здравствуйте! Подскажите пожалуйста код скрипта, чтобы он

1. брал в абсолютно произвольном порядке файл txt из z:\Work\cookies\*.txt и использовал имя файла во втором пункте

2. Копировал два файла (.ini и .conf) с именем файла из первого пункта из папок
z:\Work\testini\имяфайла.ini
z:\Work\testini\имяфайла.conf

Единственный момент, файлов больше 10 000 и скорость работы очень маленькая, возможно ли и эту проблему как-то решить?

Спасибо за любую помощь!

Iska 22-04-2015 14:59 2499250

Цитата:

Цитата XXXp
в абсолютно произвольном порядке… »

В этом случае забудьте про пакетные файлы. Либо WSH, либо PoSH.

Цитата:

Цитата XXXp
2. Копировал два файла (.ini и .conf) с именем файла из первого пункта из папок
z:\Work\testini\имяфайла.ini
z:\Work\testini\имяфайла.conf
Единственный момент, файлов больше 10 000 »

Копировал куда? Причём здесь общее количество файлов?

Вы что-то не договариваете. Поясните.

XXXp 22-04-2015 15:21 2499261

Раньше был такой код:
Цитата:

@echo off
setlocal

for /f "tokens=*" %%i in (' dir /b "z:\Work\ready-profiles\*.ini" ') do call:1 "%%i"
for /f "tokens=2 delims==" %%i in (' set ini_ ') do set "file=%%i"

copy /y "z:\Work\ready-profiles\%file%.ini" "Z:\Work\old\%file%.ini"
copy /y "z:\Work\ready-profiles\%file%.conf" "Z:\Work\old\%file%.conf"


goto:eof

:1
set "ini_%random%=%~n1"
Но тут берется файл с рандомным именем .ini , затем из этой же папки берется 2 файла с таким именем .ini и .conf и копируется в соответствующую папку
В данном случае скрипт работает довольно медленно и тормозит комп, потому что общее количество файлов 25 000 (по 12 500 .ini и 12 500 .conf)

Мне теперь нужно чтобы имя файла скрипт рандомно брал отсюда: z:\Work\cookies\*.txt
И уже из папки z:\Work\testini\ копировались одноименные файлы .ini и .conf

Беда в том что в папке cookies 12 500 файлов. Возможно опять будут проблемы со скоростью работы скрипта и подвисанием компьютера

XXXp 23-04-2015 02:17 2499476

А если не bat, а wsh это можно реализовать?

Iska 23-04-2015 23:18 2499962

XXXp, можно. Напишите словами алгоритм работы, поскольку описание, приведённое в первом сообщении, не вполне соответствует коду из третьего сообщения.

XXXp 24-04-2015 00:12 2499978

Вот алгоритм:
1. Берем произвольный txt файл из папки c:\cookies, используем его имя (без .txt)
2. Копируем из папки z:\Work\ready-profiles\ файл с таким же именем, но с расширением .ini в папку c:\, однако теперь его полное имя и путь: c:\1.ini
3. Копируем из папки z:\Work\ready-profiles\ файл с таким же именем, но с расширением .conf в папку c:\profile, однако теперь его полное имя и путь: C:\profile\modify.conf

Вроде все.

Спасибо!

XXXp 25-04-2015 16:13 2500587

Что-то не хватает? Вроде все описал...

XXXp 28-04-2015 00:53 2501598

Все еще очень требуется помощь....

Elven 28-04-2015 13:46 2501774

Код:

@echo off
:r
set rnd=%random:~0,5%
if %rnd% GTR 12500 (
GOTO :r
) ELSE (
set i=0
pushd c:\cookies
for /F %%F in ('dir /B /OD') do (
set /a i=i+1
if %%i == %rnd% (
copy /y Z:\Work\ready-profiles\%%~nF.ini C:\1.ini
copy /y Z:\Work\ready-profiles\%%~nF.conf C:\profile\modify.conf
GOTO :x
) ELSE (
exit /B 1)
:x
popd
exit /B 0

Крайне странная задача, но если надо... Даже не тестировал, но как-то так оно должно работать.

XXXp 01-05-2015 00:46 2502726

Elven
Спасибо большое, но прошу проверить код, видимо где-то ошибка, потому что не работает. Пути проверил четырежды, с ними проблем нет, но скрипт сразу закрывается, без какого-либо выполнения

leo.pine.58@fb 02-05-2015 17:34 2503096

У него скобки не бьют, писал совсем наспех.

Непонятно также зачем нужно обрезать %random% таким образом.

Сорри за критику

Elven 04-05-2015 10:06 2503530

Цитата:

Цитата leo.pine.58@fb
Сорри за критику »

Конструктивная критика зачастую полезна.
Рандом обрезал потому что не помнил сколько цифр он выдает, а со скобками действительно косяк нарисовался, в самом конце одну не выделил когда копировал.
Код:

@echo off
:r
set rnd=%random%
if %rnd% GTR 12500 (
GOTO :r
) ELSE (
set i=0
pushd c:\cookies
for /F %%F in ('dir /B /OD') do (
set /a i=i+1
if %%i == %rnd% (
copy Z:\Work\ready-profiles\%%~nF.ini C:\1.ini
copy Z:\Work\ready-profiles\%%~nF.conf C:\profile\modify.conf
GOTO :x
) ELSE (
exit /b 1)
:x
popd
exit /B 0))


XXXp 11-05-2015 00:03 2505918

Спасибо, но все равно не работает(

Elven 11-05-2015 13:23 2506015

Цитата:

Цитата XXXp
не работает( »

Это архиполное описание того что не работает.
попробуй теперь скопировать.

XXXp 13-05-2015 14:36 2506894

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

Iska 13-05-2015 19:29 2507022

Цитата:

Цитата XXXp
Ну я батник запускаю, он сразу закрывается, ничего не происходит. »

Откройте окно командной строки, сделайте текущим потребный каталог (если нужно), затем запустите оттуда пакетный файл на исполнение.


Время: 23:56.

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