我一直在尝试创建一个批处理文件,使文件夹以.txt
文件列表中的人名命名,然后授予他们修改自己个人文件夹的完全权限。
问题是我一直在' delims ="此时出乎意料的是错误。
这里是我的代码,我想知道你们是否能够找出我做错了什么,谢谢^ - ^
(顺便说一下,我还没有添加权限部分,我只需先将这部分整理出来)
代码: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 :(得分:2)
替换
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并不总是正确使用:有时在代码第26行的for
命令的块startung中,到达最后,你不是始终使用!!
扩展变量showme
,showme1
和c1
,这些变量是在该代码块中修改的。
答案 1 :(得分:0)
如果从文件名变量for /f "eol=; tokens=1 delims=," %%i in (%list%.txt) do (
中删除双引号,则会正确创建文件夹。更改该行并且您将通过此部分。
您可能希望在权限部分中执行相同的操作。