Компьютерный форум 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=225384)

XXXp 16-01-2012 16:16 1837139

Перенос произвольного файла из папки
 
Уважаемые гуру, помогите пожалуйста в создании скрипта.
Есть папка c:/profiles
В ней много файлов *.ini с различными названиями
Необходимо брать рандомный (произвольный) из них и копировать(с заменой) его на c:/ , при этом переименовывая в 1.ini

Предельно буду благодарен за любую помощь! Спасибо!

Foreigner 16-01-2012 18:01 1837214

XXXp, Обязательно VBS/WSH/JS ?

На всякий случай батник:
Код:

@echo off
setlocal

for /f "tokens=*" %%i in (' dir /b "c:\profiles\*.ini" ') do call:1 "%%i"
for /f "tokens=2 delims==" %%i in (' set ini_ ') do set "file=%%i"
copy /y "c:\profiles\%file%" c:\1.ini
goto:eof

:1
set "ini_%random%=%~1"


XXXp 16-01-2012 18:14 1837221

Нет, не обязательно vbs/wsh/js
бат вполне подойдет, спасибо!
Только произвольность файла плохо работает, возможно её немного улучшить? У меня 14 файлов .ini, я запустил батник 4 раза, из них 3 раза он попал на один и тот же файл .ini

А потом ещё 3 раза с интервалом секунда в 7 для проверки и все три раза попал в один файл

El Sanchez 16-01-2012 18:24 1837230

XXXp, а так?
Код:

@Echo Off
SetLocal
For %%A In ("C:\profiles\*.ini") Do Set /A Cnt+=1
Set /A Cnt=%RANDOM%*%cnt%/32768+1
For /F "Tokens=1* Delims=:" %%A In ('Dir /B /A-D "C:\profiles\*.ini"^|FindStr /n .') Do If %%A EQU %Cnt% Copy /Y "C:\profiles\%%B" "C:\1.ini"


XXXp 16-01-2012 18:31 1837235

Почему-то не работает...(

А нет, извиняюсь, работает, но рандомность вообще никакая, из 10 раз 9 попадает по одному файлу (при общем кол-ве 14)

Foreigner 16-01-2012 18:46 1837259

Цитата:

Цитата XXXp
я запустил батник 4 раза, из них 3 раза он попал на один и тот же файл .ini »

Я попробовал, и у меня все отлично:

XXXp 16-01-2012 18:53 1837270

Наверное, вы правы, перепроверил, стало намного лучше, видимо случайно в первый раз так совпало)

XXXp 16-01-2012 21:29 1837387

Извините, хотел ещё вопрос узнать, как доработать данный бат файл
Появилась необходимость, одновременно с данным файлом ini из папки profiles, копировать из папки c:\profiles в папку C:\Users\user\ ОДНОИМЕННЫЙ файл .conf, т.е. имя полностью идентичное файлу *.ini, только расширение файла .conf, при этом этот файл также нужно переменовать(с заменой) в user.conf
Подскажите пожалуйста, как это сделать, буду очень благодарен

XXXp 16-01-2012 22:02 1837411

Чтобы было понятнее, есть много файлов .ini и точно такое же кол-во файлов с аналогичными названиями .conf
необходимо, чтоб допустим файл 43252.ini был рандомно выбран из всех файлов из папки c:\profiles и скопирован с заменой на c:\, затем переименован в 1.ini
А одноименный файл 43252.conf был скопирован из этой же папки (c:\profiles), скопирован в папку c:\Users\user и переименован в user.conf
Спасибо заранее большое!

Foreigner 16-01-2012 23:38 1837489

Код:

@echo off
setlocal

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

copy /y "c:\profiles\%file%.ini" "c:\1.ini"
copy /y "c:\profiles\%file%.conf" "c:\users\user\user.conf"

goto:eof

:1
set "ini_%random%=%~n1"


XXXp 16-01-2012 23:58 1837500

Спасибо большое! работает как нужно!

XXXp 28-01-2012 01:26 1846021

Ещё вопрос появился! Все здорово работает, только теперь нужен новый скриптик, который бы удалял
все файлы .ini из папки c:\profiles, размер которых меньше 1 кб, и вместе с ними удалял идентичные по названию файлы .conf
Т.е. файлы имеют одно название, разное расширение, необходимо удалять *.ini меньше 1 кб размером и заодно .conf с таким же названием. Спасибо!

Foreigner 28-01-2012 07:53 1846052

XXXp,
Код:

@echo off

pushd "c:\profiles"

for %%i in (*.ini) do if %%~zi lss 1024 (del "%%i" "%%~ni.conf")

popd


XXXp 28-01-2012 12:12 1846127

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


Время: 10:16.

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