Войти

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


XXXp
22-04-2015, 14:25
Здравствуйте! Подскажите пожалуйста код скрипта, чтобы он

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
в абсолютно произвольном порядке… »
В этом случае забудьте про пакетные файлы. Либо WSH, либо PoSH.

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

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

XXXp
22-04-2015, 15:21
Раньше был такой код:
@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
А если не bat, а wsh это можно реализовать?

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

XXXp
24-04-2015, 00:12
Вот алгоритм:
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
Что-то не хватает? Вроде все описал...

XXXp
28-04-2015, 00:53
Все еще очень требуется помощь....

Elven
28-04-2015, 13:46
@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
Elven
Спасибо большое, но прошу проверить код, видимо где-то ошибка, потому что не работает. Пути проверил четырежды, с ними проблем нет, но скрипт сразу закрывается, без какого-либо выполнения

leo.pine.58@fb
02-05-2015, 17:34
У него скобки не бьют, писал совсем наспех.

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

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

Elven
04-05-2015, 10:06
Сорри за критику »
Конструктивная критика зачастую полезна.
Рандом обрезал потому что не помнил сколько цифр он выдает, а со скобками действительно косяк нарисовался, в самом конце одну не выделил когда копировал.
@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
Спасибо, но все равно не работает(

Elven
11-05-2015, 13:23
не работает( »
Это архиполное описание того что не работает.
попробуй теперь скопировать.

XXXp
13-05-2015, 14:36
Ну я батник запускаю, он сразу закрывается, ничего не происходит. Все пути копировал из рабочего батника, с ними ошибки быть не может, проверял много раз

Iska
13-05-2015, 19:29
Ну я батник запускаю, он сразу закрывается, ничего не происходит. »
Откройте окно командной строки, сделайте текущим потребный каталог (если нужно), затем запустите оттуда пакетный файл на исполнение.




© OSzone.net 2001-2012