2015-08-01 5 views
0

Я пытался создать пакетный файл, который создает папки, названные в честь людей в списке файлов .txt, а затем дает им полный доступ к изменению их собственных личных папка.Пакетный файл: «delims =» было неожиданным в это время »

Проблема в том, что я продолжаю получать 'delims = "было неожиданным в это время' Ошибка.

Вот мой код здесь, мне было интересно, если вы, ребята, могли бы узнать, что я сделал не так, спасибо^-^

(Btw я не добавило разрешения части еще, мне просто нужно получить эту часть разобрали первый)

КОД: http://pastebin.com/XLi11nZa иМЕНА сПИСОК: http://pastebin.com/xbh3WTSv

@echo off 
color A 
echo What is the name of list file? (Do not include format) 
SET /P list= 
setlocal EnableDelayedExpansion 
set "cmd=findstr /R /N "^^" %list%.txt | find /C ":"" 
for /f %%a in ('!cmd!') do set m=%%a 
SET c=0 
echo !m! folders to be created. Continue? (Y/N) 
SET /P ANSWER= 
if /i {%ANSWER%}=={y} (goto :yes) 
if /i {%ANSWER%}=={yes} (goto :yes) 
exit 
:yes 
echo Now creating %m% folders..... 
for /f "eol=; tokens=1 delims=," %%i in ("%list%.txt") do ( 
SET /a c = !c! + 1 
mkdir "%%i" 
echo !c!/%m% folders created [%%i] 
) 
endlocal 
echo Now adding permissions to %m% folders..... 
pause 
setlocal enabledelayedexpansion 
SET c1=0 
for /f "eol=; tokens=1 delims=," %%i in ("%list%.txt") do ( 
SET /a c1 = !c1! + 1 
SET word=1 
SET /a showme=c1-1 
SET showme=skip=%showme% 
IF !c1! equ 1 set "showme= " 
FOR /F "tokens=%word% %showme% delims= " %%F IN ("%list%") DO if defined 

showme set showme=%%F 
SET first=%showme:~0,1% 

SET word=2 
SET /a showme1=c1-1 
SET showme1=skip=%showme1% 
IF %c1% equ 1 set "showme1= " 
FOR /F "tokens=%word% %showme1% delims= " %%L IN ("%list%") DO if 

defined showme1 set showme1=%%L 
set B=%showme1%%first% 

set _STRING=%B% 

set "_UCASE=ABCDEFGHIJKLMNOPQRSTUVWXYZ" 
set "_LCASE=abcdefghijklmnopqrstuvwxyz" 

for /l %%a in (0,1,25) do (
    call set "_FROM=%%_UCASE:~%%a,1%% 
    call set "_TO=%%_LCASE:~%%a,1%% 
    call set "_STRING=%%_STRING:!_FROM!=!_TO!%% 
) 

set _STRING 
echo %_STRING% 
echo %_STRING%>>testing.txt 

endlocal 
pause 
) 

имена список

Loralee Stucky 
Tomas Silberman 
Marleen Rosell 
Phyllis Steier 
Elmo Jetter 
Kristyn Spruell 
Willetta Vandermeer 
Hazel Alsobrook 
Naida Nixon 
Nadia Godfrey 
Lavonna Antunez 
Mac Castile 
Tamela Stover 
Piedad Heidrick 
Hien Welsh 
Carolin Gularte 
Mariko Tolentino 
Alia Graddy 
Deadra Rehkop 
Donella Pittman 
+0

Вместо 'set/P' для простого приглашения Да/Нет вы также можете использовать' choice' - type 'choice /?' Для информации. (обратите внимание, что это не встроенная команда). – aschipfl

ответ

0

Папки будут созданы правильно, если вы удалите двойные кавычки из переменной имени файла for /f "eol=; tokens=1 delims=," %%i in (%list%.txt) do (, измените эту строку, и вы пройдете мимо этой части. Возможно, вы захотите сделать то же самое в разделе разрешений.

1

Заменить

for /f "eol=; tokens=1 delims=," %%i in ("%list%.txt") do (

по

for /f "usebackq eol=; tokens=1 delims=," %%i in ("%list%.txt") do (

дважды.
Без опции usebackq набор с двойными кавычками for /F интерпретируется как литеральная строка, а не файл. Удаление двойных кавычек может работать, но также может привести к проблемам с файлами с пробелами в их именах.


Другое дело: вы динамически создает возможность для skip=#for /F, где # обозначает число. вы должны убедиться, что это число всегда положительное, поэтому 0 не понимает for /F, что также может привести к ошибке.
Таким образом, вы можете добавить if, проверьте, больше ли это число, но не добавьте опцию skip в противном случае (путем очистки ваших showme переменных).


И последнее, но не менее важное: delayed expansion не всегда правильно: иногда в блоке startung по команде for в строке # 26 кода и доходя до конца, вы не последовательно, используя !! для расширение переменных showme, showme1 и c1, которые являются модификациями внутри этого кодового блока.

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