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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Поиск файла, перемещение, удаление исходной папки cmd\bat (http://forum.oszone.net/showthread.php?t=258133)

KitsuNeko 08-04-2013 15:25 2128273

Поиск файла, перемещение, удаление исходной папки cmd\bat
 
Встала задача написать скрипт для сортировки некоторого количества файлов
Помогите разобраться в процессе
К примеру:


1. Найти файл search1.txt в D:\Temp\ включая подкоталоги
2. Если найден, то создать папку E:\find1 и переместить в неё сам файл
3. Найти файл search2.txt в D:\Temp\ включая подкоталоги
4. Если найден, то создать папку E:\find2 и переместить в неё сам файл удалив папку исходного файла со всем ее содержимым.

Foreigner 08-04-2013 16:57 2128325

Код:

@echo off

for /f "tokens=*" %%i in (' dir /b /s /a "D:\Temp\search*.txt" ') do (

    if "%%~nxi"=="search1.txt" (md "E:\find1" && move %%i "E:\find1")
    if "%%~nxi"=="search2.txt" (md "E:\find2" && move %%i "E:\find2" && rd /s /q "%%~dpi")

)


KitsuNeko 08-04-2013 17:26 2128347

Foreigner, Спасибо, работает, правда не во всех случаях

1. - не дружит с пробелами, ни в какую, если в имени файла или каталога есть пробел, то выдает
"ошибка синтаксиса"

Решилось скобками на переменных

@echo off

for /f "tokens=*" %%i in (' dir /b /s /a "D:\Temp\search*.txt" ') do (

if "%%~nxi"=="search1.txt" (md "E:\find1" && move "%%i" "E:\find1")
if "%%~nxi"=="search2.txt" (md "E:\find2" && move "%%i" "E:\find2" && rd /s /q "%%~dpi")

)

2. Если папка в которую нужно перемещать (прим E:\find1) существует, то на этом скрипт затыкается :-(

Foreigner 08-04-2013 17:34 2128353

Вроде поправил
Код:

@echo off

for /f "tokens=*" %%i in (' dir /b /s /a "D:\Temp\search*.txt" ') do (

    if "%%~nxi"=="search1.txt" (
       
        2>nul md "E:\find1"
        move "%%i" "E:\find1"
 
    )

    if "%%~nxi"=="search2.txt" (

        2>nul md "E:\find2"
        move "%%i" "E:\find2"
        rd /s /q "%%~dpi"
))


KitsuNeko 08-04-2013 17:59 2128369

Последние грабли

search2.txt и search3.txt лежат в одной папке,
вне зависимости от того найден ли search3.txt папка в которой лежат оба файл удаляется, как сделать что бы она оставалась живой если найден search2.txt, но не найден search3.txt?


Цитата:

@echo off

for /f "tokens=*" %%i in (' dir /b /s /a "D:\Temp\search*.txt" ') do (

if "%%~nxi"=="search1.txt" (

2>nul md "E:\find1"
2>nul md "E:\find1\dub1"
move "%%i" "E:\find1\dub1"

)


if "%%~nxi"=="search2.txt" (

2>nul md "E:\find1"
2>nul md "E:\find1\dub1"
2>nul md "E:\find1\dub1\dub2"
move "%%i" "E:\find1\dub1\dub2"


)

if "%%~nxi"=="search3.txt" (

2>nul md "E:\find1"
2>nul md "E:\find1\dub1"
2>nul md "E:\find1\dub1\dub2"
move "%%i" "E:\find1\dub1\dub2"
rd /s /q "%%~dpi"

))

Foreigner 08-04-2013 18:21 2128379

Цитата:

Цитата KitsuNeko
как сделать что бы она оставалась живой если найден search2.txt, но не найден search3.txt? »

Ваш вариант меня запутал, по этому исходя из моего
Код:

...
if "%%~nxi"=="search2.txt" (

    2>nul md "E:\find1\dub1\dub2"
    move "%%i" "E:\find1\dub1\dub2"
    if exist "%%~dpi\search3.txt" rd /s /q "%%~dpi"

)
...



Время: 05:51.

Время: 05:51.
© OSzone.net 2001-