2015-05-04 4 views
2

Я хочу написать пакетный скрипт для переименования папок в каталоге.Изменение имени папки с именами из файла с помощью пакета

Как это работает, у меня будет файл, содержащий имена, которые я бы хотел, чтобы каждая папка была переименована. Таким образом, в основном пакетный скрипт будет просто выбирать имена из файла (который содержит имена) и использовать его для переименования каждой папки.

Итак, если у меня есть 20 папок, в файле будет существовать 20 имен для переименования каждой папки.

То, что я до сих пор:

@echo off 
SETLOCAL ENABLEDELAYEDEXPANSION 
SET old=*.txt 
SET new="c:\Users\user\Desktop\testing.txt" 
< %new% (for /f "tokens=*" %%f in ('dir /b %old%') do (
    ren Read the next name from the redirected input file 
    SET /P newname= 
    ren "%%f" "!newname!" 
)) 

выше сценарий не дает мне желаемого результата.

+0

'установлен метод/p' для чтения файлов построчно не работает хорошо с FOR петли – npocmaka

+0

@npocmaka: Команда 'set/P', помещенная внутри цикла FOR, представляет собой _simplest way_ для объединения двух файлов. См. [Этот пример] (http://stackoverflow.com/questions/20099623/merge-2-csv-files-as-it-is/20103830#20103830) или [этот] (http://stackoverflow.com/questions/14521799/combinining-multiple-text-files-in-one/14523100 # 14523100) или еще несколько ... Вы можете даже объединить один файл через FOR с более чем одним входным файлом через 'set/p' с помощью этого метода, как в [этом примере] (http://stackoverflow.com/questions/24910000/how-to-merge-files-horizontally-in-windows-7-command-prompt/24987950#24987950), или. – Aacini

ответ

0

Не тестировалось:

@echo off 
SETLOCAL ENABLEDELAYEDEXPANSION 
SET old=*.txt 
SET new="c:\Users\user\Desktop\testing.txt" 
set counter=0 
(for /f "tokens=*" %%f in ('dir /b %old%') do (
    ren Read the next name from the redirected input file 
    set /a counter=counter+1 
    for /f "tokens=1* delims=:" %%a in ('findstr /R /N "^" "%new%"^|find "!counter!"') do set "newname=%%b" 
    ren "%%f" "!newname!" 
) 
0

Проблема заключается в том, что команда dir /b %old% создать список файлов с расширением .txt. Если вы хотите переименовать папки, затем включите переключатель /AD и устранить дикую-карту:

@echo off 
SETLOCAL ENABLEDELAYEDEXPANSION 
SET new="c:\Users\user\Desktop\testing.txt" 
< %new% (for /f "tokens=*" %%f in ('dir /b /AD') do (
    ren Read the next name from the redirected input file 
    SET /P newname= 
    ren "%%f" "!newname!" 
)) 
+0

можно упростить этот скрипт. кажется, что он не работает. что может показаться проблемой? есть что-то, что мне нужно вынуть или добавить? – Ribo01

+0

Скрипт уже достаточно прост. Вы можете вставить команду 'echo' перед' ren' one ('echo ren" %% f ""! Newname! "'), Чтобы вы могли видеть выполненные команды. Кроме того, убедитесь, что команда 'dir/b/AD' и содержимое файла верны. Если это не помогает определить проблему, удалите строку '@echo off', выполните сценарий из окна командной строки (_not_ из проводника), чтобы вы могли точно просмотреть, что выполняется ... – Aacini

Смежные вопросы