Показать полную графическую версию : Пробелы в именах при перемещении
Форумчане, прошу вашей помощи. Требуется переместить список файлов, указанных в list.txt. Проблема в том, что он прекрасно переносит файлы с простыми именами, но как только появляется пробел в имени, он отказывается их видеть. Та же проблема с файлами, у которых в имени есть "нестандартные" символы, типа немецких умляутов или японских иероглифов. Можно ли его сделать "всеядным"?
@echo off
set LIST=list.txt
set TO=C:\Users\test\Desktop\
for /F %%i in (%LIST%) do (
copy /Y "%%i" %TO%
)
pause
exit /B
Вот трейс. Первые два файла с пробелом и арабской вязью в именах. Третий — только латиница без пробелов.
http://forum.oszone.net/attachment.php?attachmentid=119870&stc=1&d=1417964816
Foreigner
07-12-2014, 18:09
for /f "tokens=*" %%i in ....
for /f "delims=" %%i in ...
Не кушает.
http://forum.oszone.net/attachment.php?attachmentid=119872&stc=1&d=1417965914
@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
А можно вместо copy использовать robocopy? У copy я не нашел флаг запрета перезаписи уже имеющихся в папке файлов с такими именами.
VladIva, можно, но не нужно, поскольку есть такая конструкция: echo no| copy /-y "%%i" "%TO%".
А есть ли возможность сохранить структуру папок при переносе?
Возможность есть, а смысла в двойной проверке не вижу. Если Вам нужно применить условие "if exist" для чего-нибудь ещё, кроме копирования файла, то напишите об этом.
Понял, лишняя проверка. А есть ли возможность сохранить структуру папок при переносе? Берем файл из C:\App\translit\arabic.cvs и переносим его в Z:\translit\arabic.cvs? На js, air или php я бы не задумываясь написал регулярку, забирающую строку перед последним слэшем, и собрал строку пути, но как это работает в батниках пока не понятно. Возможно, есть какой-то магический флаг, который сохраняет структуру?
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".
Проблема в том, что папок 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
@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
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC