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

VladIva 07-12-2014 17:48 2440833

Пробелы в именах при перемещении
 
Вложений: 1
Форумчане, прошу вашей помощи. Требуется переместить список файлов, указанных в list.txt. Проблема в том, что он прекрасно переносит файлы с простыми именами, но как только появляется пробел в имени, он отказывается их видеть. Та же проблема с файлами, у которых в имени есть "нестандартные" символы, типа немецких умляутов или японских иероглифов. Можно ли его сделать "всеядным"?

PHP код:

@echo off
    set 
LIST=list.txt
    set TO
=C:UserstestDesktop
    
for /%%i in (%LIST%) do (
        
copy /"%%i" %TO%
    )
pause
exit /

Вот трейс. Первые два файла с пробелом и арабской вязью в именах. Третий — только латиница без пробелов.

http://forum.oszone.net/attachment.p...1&d=1417964816

Foreigner 07-12-2014 18:09 2440842

Код:

for /f "tokens=*" %%i in ....

Georgio 07-12-2014 18:13 2440845

Код:

for /f "delims=" %%i in ...

VladIva 07-12-2014 18:24 2440848

Вложений: 1
Не кушает.


http://forum.oszone.net/attachment.p...1&d=1417965914

Georgio 07-12-2014 19:07 2440870

Код:

@echo off

>nul chcp 1251

set "set LIST=C:\Users\user\Desktop\bat_test\list.txt"
set "set TO=C:\Users\user\Desktop\bat_test"
       
for /f "usebackq delims=" %%i in ("%LIST%") do (

 >nul chcp 866

 copy /y "%%i" "%TO%"
 )

pause
exit /b


VladIva 08-12-2014 20:01 2441425

А можно вместо copy использовать robocopy? У copy я не нашел флаг запрета перезаписи уже имеющихся в папке файлов с такими именами.

Georgio 08-12-2014 20:20 2441432

VladIva, можно, но не нужно, поскольку есть такая конструкция:
Код:

echo no| copy /-y "%%i" "%TO%"
.

VladIva 08-12-2014 22:57 2441513

А есть ли возможность сохранить структуру папок при переносе?

Georgio 09-12-2014 00:27 2441536

Возможность есть, а смысла в двойной проверке не вижу. Если Вам нужно применить условие "if exist" для чего-нибудь ещё, кроме копирования файла, то напишите об этом.

VladIva 09-12-2014 00:44 2441537

Понял, лишняя проверка. А есть ли возможность сохранить структуру папок при переносе? Берем файл из C:\App\translit\arabic.cvs и переносим его в Z:\translit\arabic.cvs? На js, air или php я бы не задумываясь написал регулярку, забирающую строку перед последним слэшем, и собрал строку пути, но как это работает в батниках пока не понятно. Возможно, есть какой-то магический флаг, который сохраняет структуру?

Georgio 09-12-2014 01:20 2441543

VladIva, выбирайте из вариантов:
Код:

xcopy "C:\App\translit\arabic.cvs" "Z:\translit\"
;
Код:

echo d| xcopy "C:\App\translit\arabic.cvs" "Z:\translit"
;
Код:

echo f| xcopy "C:\App\translit\arabic.cvs" "Z:\translit\arabic.cvs"
.

VladIva 09-12-2014 01:27 2441546

Проблема в том, что папок translit может быть много:
Код:

C:\App\translit_ar\arabic.cvs
C:\App\translit_en\text.cvs
C:\App\translit_ru\temp000.txt

Структура на выходе:
Код:

Z:\translit_ar\arabic.cvs
Z:\translit_en\text.cvs
Z:\translit_ru\temp000.txt


Georgio 09-12-2014 02:18 2441564

Код:

@echo off

set "from=C:\App"
set "to=Z:"

subst #: "%from%"
for /f "delims=" %%i in ('
 dir /a-d/b/s #:^| findstr /rc:"^#:\\translit_[^\\][^\\]*\\[^\\][^\\]*$"
') do xcopy /q "%%i" "%to%%%~pi"
subst /d #:

pause>nul
exit /b



Время: 21:38.

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