2013-04-17 4 views
0

Я просто завершу свой сценарий при копировании структуры папок для каждой строки текстового файла. Нам нужна папка с подпапками для каждого клиента. Клиентскую папку «Тест» следует поместить в папку \ path \ e $ \ Relaties \ T \ Test. Таким образом, для каждого начального информационного бюллетеня определенная папка, а для остальных - числа или символы - папка «_Overig» (другая).Пакетный файл заменяет определенные символы

Это все работает отлично, но у меня есть проблемы со специальными символами, как% */\ ' "и так далее. В примере ниже, я хочу, чтобы удалить все «S в FOLDERNAME, так как Windows, не поддерживает Я делаю это с установкой var =! var2: = !, но это не сработает. Кроме того, когда строка в текстовом файле содержит!, скрипт также сработает. Я могу сбежать, нажав ^! instedad of! in пакетный файл, но так как она порождается интранетем я хочу пакетный файл ниже просто иметь дело с! s и избежать его самого по себе.

Пожалуйста, помогите мне.

setlocal EnableDelayedExpansion 
set file=E:\list.txt 

FOR /F "delims=~" %%i IN (!file!) DO (

echo %%i 

set var2=%%i 
set var=!var2:*=! 

set str=!var:~0,1! 
IF /i !str!==A (set letter=1&&set str=A) 
IF /i !str!==B (set letter=1&&set str=B) 
IF /i !str!==C (set letter=1&&set str=C) 
IF /i !str!==D (set letter=1&&set str=D) 
IF /i !str!==E (set letter=1&&set str=E) 
IF /i !str!==F (set letter=1&&set str=F) 
IF /i !str!==G (set letter=1&&set str=G) 
IF /i !str!==H (set letter=1&&set str=H) 
IF /i !str!==I (set letter=1&&set str=I) 
IF /i !str!==J (set letter=1&&set str=J) 
IF /i !str!==K (set letter=1&&set str=K) 
IF /i !str!==L (set letter=1&&set str=L) 
IF /i !str!==M (set letter=1&&set str=M) 
IF /i !str!==N (set letter=1&&set str=N) 
IF /i !str!==O (set letter=1&&set str=O) 
IF /i !str!==P (set letter=1&&set str=P) 
IF /i !str!==Q (set letter=1&&set str=Q) 
IF /i !str!==R (set letter=1&&set str=R) 
IF /i !str!==S (set letter=1&&set str=S) 
IF /i !str!==T (set letter=1&&set str=T) 
IF /i !str!==U (set letter=1&&set str=U) 
IF /i !str!==V (set letter=1&&set str=V) 
IF /i !str!==W (set letter=1&&set str=W) 
IF /i !str!==X (set letter=1&&set str=X) 
IF /i !str!==Y (set letter=1&&set str=Y) 
IF /i !str!==Z (set letter=1&&set str=Z) 

IF !letter!==1 (set pad=\\fs1\e$\Data\Relaties\!str!\!var!) ELSE (set pad=\\fs1\e$\Data\Relaties\_Overig\!var!) 
set oudpad=\\fs1\e$\Data\Klanten\!var! 
xcopy "\\fs1\e$\Data\Relaties\_template\_template" "!pad!" /T /E /O /I 

robocopy "!oudpad!\adviesrapporten" "!pad!\Documentatie\Adviesrapporten" /ZB /COPY:DAT /R:3 /W:1 

set letter=0 

) 

Edit:

Fixed звездочки вещи с помощью множества вара = вар: ** =!

Но все же, если я хочу имя папки с помощью! в нем сценарий игнорирует его.

ответ

1

Ok - попробуйте это:

@ECHO OFF 
SETLOCAL 
FOR /f "delims=" %%i IN (E:\list.txt) DO (
ECHO "%%i"|FINDSTR /i /b /r .[a-z] >nul 
IF ERRORLEVEL 1 (set letter=_Overig) ELSE (SET letter=%%i&CALL SET letter=%%letter:~0,1%%) 
SET var=%%~i 
CALL :transmute 
) 
GOTO :eof 

:transmute 
SETLOCAL enabledelayedexpansion 
SET var=!var:^|=! 
SET var=!var:^>=! 
SET var=!var:^<=! 
SET var=!var:%%=! 
SET var=!var:^&=! 
endlocal&SET var=%var% 
SET var=%var:?=% 
SET var=%var::=% 
SET var=%var:[=% 
SET var=%var:]=% 
SET var=%var:`=% 
SET var=%var:'=% 
SET var=%var:{=% 
SET var=%var:}=% 
SET var=%var:/=% 
SET var=%var:\=% 
SET nvar=%var:"=% 
SET "var=" 
:tmlp 
IF NOT "%nvar:~0,1%"=="*" IF NOT "%nvar:~0,1%"=="=" SET var=%var%%nvar:~0,1% 
SET nvar=%nvar:~1% 
IF DEFINED nvar GOTO tmlp 
SET pad=\\fs1\e$\Data\Relaties\%letter%\%var% 
set oudpad=\\fs1\e$\Data\Klanten\%var% 
ECHO XCOPY "\\fs1\e$\Data\Relaties\_template\_template" "%pad%" /T /E /O /I 
ECHO robocopy "%oudpad%\adviesrapporten" "%pad%\Documentatie\Adviesrapporten" /ZB /COPY:DAT /R:3 /W:1 

GOTO :eof 

, который по крайней мере, не врезаться в файле данных

name 1 
allo! allo! 
"good grief!" 
@last! 
%percents-problem or not?% 
how about ^carets? 
NOT carrots 
(what does this do?) 
)and what about this? 
;semi to start? 
-dash 
^caret? 
^^double-caret? 
&ampersand schmooze 
!now this is a test!! 
=can be skipped 
:colon, of course 
    and ever-loving spaces 
*s fell on stockton 
9" nails 
|pipe? 
?question mark?? 
>greater? 
<less?? 
.dot 
,comma 
12345 
`that's all 
o'connor 
]close-square 
[open-square 
{and brace-open 
}or close 
/slash 
\slosh 

По существу, после проверки того, что строка начинается с буквы, каждое имя массируют в удалите неудобные символы, и в итоге отобразятся имя и каталог.

Ни активировано ни XCOPY, ни ROBOCOPY; вам нужно будет удалить предыдущие ECHO после проверки ...

+0

Работает как очарование. Благодаря! – Mbrouwer88

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