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

ajakzs 28-10-2014 22:06 2421788

Управление с папками
 
Добрый вечер уважаемые знатоки скриптовых языков.
Прошу вашей помощи в написании скрипта, который выполняет следующие функции:
-имеется папка с подпапками и файл source.txt
необходимо содержимое каждой подпапки переместить в подпапку подпапки SOURCE(которую необходимо создать)
и из файла source.txt по случайной строчке поместить в каждую подпапку(рядом с SOURCE) с именем source.txt

Georgio 28-10-2014 23:50 2421826

ajakzs, объясните всё, что Вы написали, оперируя полными именами упомянутых папок (и тогда слово "подпапка" употреблять не нужно), и приведите содержимое файла "source.txt" и его "местонахождение".

ajakzs 29-10-2014 03:33 2421877

И сходная папка: в ней папка1, папка 2, папка3, source.txt
в каждой папке: файл1,файл2,файл3,файл4,файл5
source.txt : строка описания1, строка описания 2, строка описания 3

на выходе: в каждой из папок появляется папа source и все содержимое перемещается в эту папку
папка1/source/файл1,файл2,файл3,файл4,файл5 , рядом с папкой source новый файл, содержимое которого 1 строка из source.txt
папка2/source/файл1,файл2,файл3,файл4,файл5 , рядом с папкой source новый файл, содержимое которого 2 строка из source.txt
папка3/source/файл1,файл2,файл3,файл4,файл5 , рядом с папкой source новый файл, содержимое которого 3 строка из source.txt

Georgio 29-10-2014 20:52 2422301

Код:

@echo off

chcp 1251>nul

set "dir=Исходная папка"
set "file=source.txt"

chcp 866>nul

pushd "%dir%"
for /f "delims=" %%i in ('"2>nul dir /ad/b"') do (
 set /a count+=1
 for /f "delims=" %%j in ('"2>nul dir /b "%%i""') do (
  md "%%i\source" 2>nul
  move "%%i\%%j" "%%i\source">nul 2>&1
  )
 for /f "tokens=1* delims=:" %%j in ('findstr /n "^" "%file%"') do (
  for /f %%l in ('set /a count') do (
  if %%j==%%l echo %%k>"%%i\%file%"
  )
  )
 )
popd

exit /b


ajakzs 29-10-2014 22:21 2422326

СУУПер !
Спасибо Большое, а можно сделать, что из файла source.txt брались случайные строки?

Georgio 30-10-2014 00:33 2422349

Цитата:

Цитата ajakzs
а можно сделать, что из файла source.txt брались случайные строки? »


Код:

@echo off

chcp 1251>nul

:: Значением переменной "dir" может быть также и полное имя папки,
:: и буква диска с двоеточием (со слешем или без него).
set "dir=Исходная папка"

:: Значениями переменных "file" и "folder" полные имена быть не могут!
set "file=source.txt"
set "folder=source"

chcp 866>nul

pushd "%dir%"
for /f "usebackq delims=" %%i in ("%file%") do call set $%%random%%=%%i
for /f "delims=" %%i in ('"2>nul dir /ad/b"') do (
 set /a count+=1
 for /f "delims=" %%j in ('"2>nul dir /b "%%i""') do (
  md "%%i\%folder%" 2>nul
  move "%%i\%%j" "%%i\%folder%">nul 2>&1
  )
 for /f "tokens=1,2* delims=:=" %%j in ('set $^| findstr /n "^"') do (
  for /f %%m in ('set /a count') do (
  if %%j==%%m echo %%l>"%%i\%file%"
  )
  )
 )
popd

exit /b


ajakzs 30-10-2014 10:32 2422451

Я конечно, совсем обнаглел, а можно добавить проверку на существование этой папки source и если она есть, то ничего не делать?

Georgio 31-10-2014 06:17 2422792

Цитата:

Цитата ajakzs
а можно добавить проверку на существование этой папки source и если она есть, то ничего не делать? »


Код:

@echo off

chcp 1251>nul

:: Значением переменной "dir" может быть также и полное имя папки,
:: и буква диска с двоеточием (со слешем или без него).
set "dir=Исходная папка"

:: Значениями переменных "file" и "folder" полные имена быть не могут!
set "file=source.txt"
set "folder=source"

chcp 866>nul

pushd "%dir%"
for /f "usebackq delims=" %%i in ("%file%") do call set $%%random%%=%%i
for /f "delims=" %%i in ('"2>nul dir /ad/b"') do (
 set /a count+=1
 rem Если папка "%folder%" существует, то ничего не происходит.
 md "%%i\%folder%" 2>nul&& (
 for /f "delims=" %%j in ('"2>nul dir /b "%%i""') do (
  move "%%i\%%j" "%%i\%folder%">nul 2>&1
  )
 for /f "tokens=1,2* delims=:=" %%j in ('set $^| findstr /n "^"') do (
  for /f %%m in ('set /a count') do (
  if %%j==%%m echo %%l>"%%i\%file%"
  )
  )
 )
 )
popd

exit /b



Время: 21:02.

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