嗨我正在嘗試搜索並替換一系列文件夾中一系列批處理文件中包含用戶名的字符串。即我在網絡驅動器上有一系列批處理文件,需要將它們傳輸到本地PC驅動器以供某些同事使用,並且在此過程中我需要更改批處理文件中的用戶名以匹配本地PC的用戶名。用戶名必須全部使用大寫字母。爲此,我使用一段代碼對單個文件執行相同的操作,但是我無法將代碼轉換爲對一系列文件夾中的一系列文件執行相同的操作。我正在使用Windows 7機器。我試過的代碼如下(請注意,第一段代碼將網絡驅動器(O:-drive)的樹結構映射到本地驅動器(B:-drive),並複製不需要的文件在移動的過程中被改變讓我煩惱的部分從線SETLOCAL ENABLEDELAYEDEXPANSION)開始:在一系列批處理文件中搜索並用大寫字母替換字符串
for /f "delims=" %%a in ('dir /b/ad "o:\afstem*" ') do (
echo m | xcopy /t /e /y "o:\%%a\Ta" "b:\%%a\Ta"
mkdir "b:\%%a\Nyta"
echo f | xcopy /s /y /d "o:\%%a\Ta\*moms" "b:\%%a\Ta\*moms"
SETLOCAL ENABLEDELAYEDEXPANSION
SET String=%username%
CALL :UpCase String
set txtfile=o:\%%a\Ta\*.bat
set newfile=b:\%%a\Ta\*.bat
if exist "%newfile%" del /f /q "%newfile%"
set search=SHL
set replace=%String%
for /f "tokens=*" %%a in (%txtfile%) do (
set newline=%%a
call set newline=%%newline:%search%=%replace%%%
call echo %%newline%% >>%newfile%
)
ENDLOCAL
GOTO:EOF)
:UpCase
:: Subroutine to convert a variable VALUE to all upper case.
:: The argument for this subroutine is the variable NAME.
SET %~1=!%1:a=A!
SET %~1=!%1:b=B!
SET %~1=!%1:c=C!
SET %~1=!%1:d=D!
SET %~1=!%1:e=E!
SET %~1=!%1:f=F!
SET %~1=!%1:g=G!
SET %~1=!%1:h=H!
SET %~1=!%1:i=I!
SET %~1=!%1:j=J!
SET %~1=!%1:k=K!
SET %~1=!%1:l=L!
SET %~1=!%1:m=M!
SET %~1=!%1:n=N!
SET %~1=!%1:o=O!
SET %~1=!%1:p=P!
SET %~1=!%1:q=Q!
SET %~1=!%1:r=R!
SET %~1=!%1:s=S!
SET %~1=!%1:t=T!
SET %~1=!%1:u=U!
SET %~1=!%1:v=V!
SET %~1=!%1:w=W!
SET %~1=!%1:x=X!
SET %~1=!%1:y=Y!
SET %~1=!%1:z=Z!
GOTO:EOF
預先感謝您的任何幫助/建議
更新
由於梅德Sokolow下面的代碼解決了我的問題
set txtfile=o:\%%a\Ta\*.bat
set newfileprefix=b:\%%a\Ta\
set search=SHL
set replace=!String!
for %%F in (!txtfile!) do (
if exist "!newfileprefix!%%~nxF" del /f /q "!newfileprefix!%%~nxF"
for /f "tokens=*" %%Z in (%%F) do (
set newline=%%Z
call set newline=%%newline:!search!=!replace!%%
echo !newline! >>!newfileprefix!~nx%%F
)
)
所以麻煩部分是90%的代碼...嘗試縮小它。 – wOxxOm
您在大循環內有'GOTO:EOF',但'goto'斷開循環。 – wOxxOm
謝謝,刪除了'GOTO:EOF'但仍然沒有成功 – Bris75