Как автоматом создавать папки по имени файлов и сортировать файлы туда?
Есть папка с множеством файлов, с разными именами
как сделать так чтобы автоматом создавались папки в соответствии с первыми 10-ти знакам файла и закидывались все эти файлы в соответствующую папку
@echo off
rem https://stackoverflow.com/questions/8648178/getting-substring-of-a-token-in-for-loop
setlocal EnableDelayedExpansion
for %%f in ("*.xls") do (
set T1=%%f
set T=!T1:~0,10!
if not exist !T! md !T!
move %%f !T!
)
получилось
я оказывается надо было брать все строки:
@echo off
rem https://stackoverflow.com/questions/8648178/gettin...
setlocal EnableDelayedExpansion
for %%f in ("*.xls") do (
set T1=%%f
set T=!T1:~0,10!
if not exist !T! md !T!
move %%f !T!
)
а я взял сперва только:
setlocal EnableDelayedExpansion
for %%f in ("*.xls") do (
set T1=%%f
set T=!T1:~0,10!
if not exist !T! md !T!
move %%f !T!
)
только вот я не понял зачем нужна строка : rem ...
это просто комментарий, эта строка не влияет на результат, я указал ссылку на страничку, где был толковый пример с переменными внутри цикла.
Не знаю почему, по какой-то другой причине первый раз у вас не сработало. Вообще, вот тут https://stackoverflow.com/questions/38805476/enabl... говорится, что в Win10 действительно по-умолчанию работает иначе, и что нужны дополнительные хитрости, чтобы работало так же, как на предыдущих версиях Windows. Тем удивительнее, что со второго раза у вас сработало правильно. Глюк какой-то.
ZhanZhak, а-а-а, я кажется понял причину. Скорее всего вы в первый раз пропустили эту строку: setlocal EnableDelayedExpansion Вот без неё точно бы работало неправильно.
Доброго дня!
Ваш батник мне почти идеально подошел)
А как указать диапазон до первого пробела в имени файла?
У меня список файлов с фамилией и именем, получается много мусорных папок с огрызками от имён
Pterry, попробуйте добавить кавычки в строке
if not exist !T! md !T!
вот так:
if not exist "!T!" md "!T!"
Хоть и не то, что вы просите, но вроде должно получиться более адекватно (но я не проверял).
Как сделать до первого пробела - я бы придумал в Linux с использованием sed или awk, но в винде с этим труднее. Можно поискать рецепт для PowerShell вместо cmd. Можно установить какой-нибудь CygWin и тогда использовать всю мощь линуксовых утилит.
Это не сработало... на длинных именах.
Я проверил на файле с коротким именем, по количеству символов. Если совпадает - то перемещает.
Надо условие как-то прописать для перемещения, если начало совпадает, то кидать, не смотря на длинну имени
Pterry, вероятно, дело не в длине имени, а всё же в наличии пробелов?
А если так: move "%%f" "!T!"
ещё можно попробовать такой финт ушами: move "!T!"* "!T!"