2014-11-27 4 views
0

현재 헬프 데스크 배치 스크립트를 작성 중이며 현재 문제가 있습니다. 헬프 데스크 담당자에게 사용자 프로필을 선택하라는 메시지를 표시하고 스크립트에서 프로필 폴더를 지정된 디렉터리로 복사하는 사용자 프로필을 선택하면됩니다.배치 파일 : 각 하위 디렉토리에 변수 할당.

본질적으로 프로필 이름 인 각 c : \ users 하위 폴더에 고유 한 변수를 할당하는 데 문제가 있습니다. 변수에 할당 할 수 있으면 변수를 참조하는 프롬프트 메뉴를 만들 수 있습니다. 여기에도 올바른 시작을 할 수 있습니까? 변수로 변환하는 코드는 다음과 같습니다. 어떻게 각 하위 디렉토리에 대해이 작업을 수행 할 수 있습니까? 어떤 도움이라도 대단히 감사하겠습니다.

@echo off 
for /f "delims=|" %%f in ('dir /b c:\users\') do (set profvar=%%f%%) 

감사합니다. wmic을 통해보다 효율적으로이를 달성 할 수 있습니까?

답변

1

나는 이것이 당신이 요구하는 것을 할 것이라고 생각합니다.

첫 번째 루프는 변수 VARCOUNT을 카운터로 사용하고 profvar#이라는 변수를 만듭니다. 여기서 #VARCOUNT입니다.

두 번째 루프는 1에서 VARCOUNT의 값으로 반복하고 각 변수의 값을 앞에 숫자로 인쇄합니다.

SET /P SELPROF=... 줄에는 번호를 입력하라는 메시지가 표시되고 마지막 줄은 선택한 프로필 이름을 인쇄합니다.

@ECHO OFF 
SETLOCAL ENABLEDELAYEDEXPANSION 
SET VARCOUNT=0 

FOR /F "delims=|" %%f in ('dir /b c:\users\') DO (
    SET /A VARCOUNT+=1 
    SET profvar!VARCOUNT!=%%f) 

ECHO -------------------------------------- 
FOR /L %%V IN (1,1,!VARCOUNT!) DO (
    ECHO  %%V - !profvar%%V! 
) 
ECHO -------------------------------------- 

SET /P SELPROF=Enter the number of the profile to copy: 

ECHO Selected profile = !profvar%SELPROF%! 
+0

답변 해 주셔서 감사합니다. 이것은 질문의 일부에 응답합니다. 어떻게 프로파일을 나열 할 수 있을까요? 프로파일 1, 프로파일 2, 프로파일 3 등. 여기서 프로파일은 서브 디렉토리의 실제 이름입니다. 적절한 프로파일이 선택되면 폴더를 복사합니다. 위의 스크립트에서 c : \ users \ 아래의 각 하위 폴더 이름이 실제 변수 이름인지 이해합니다. – Martin

+0

내 업데이트 된 코드를 살펴보십시오. 발견 된 프로파일 목록을 인쇄하고 번호로 선택하라는 메시지를 표시합니다. – aphoria

+0

도움을 주셔서 대단히 감사합니다. 문제가 해결되어 대단히 감사하게 생각합니다. 내 최종 코드를 포함하여 게시하므로 누구나 사용하고 싶을 수 있습니다. – Martin

0

여기에 최종 코드가 나와 있습니다. 프로파일을 지정된 디렉토리로 복사하라는 메시지와 함께 중요한 시스템 정보를 복사합니다.

echo off 
echo Welcome: %username% 
set /p usbpath= "Enter a copy path: " 
echo Usb drive letter set to:%usbpath% 
pushd %usbpath% 

@echo off 
For /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set mydate=%%c-%%a-%%b) 
For /f "tokens=1-2 delims=/:" %%a in ('time /t') do (set mytime=%%a%%b) 

set mydir="syscollect_%computername%_%mydate%_%mytime%" 
set profpath="user profile" 

mkdir %mydir% 
mkdir %profpath% 

cd %mydir% 

net start > running-services.txt 
sc query > service-query.txt 
Tasklist /v > tasklist.txt 
nbtstat -s > nbtstat.txt 
at > scheduledActiveTasks.txt 
schtasks > scheduledtasks.txt 
cd %mydir% 
mkdir eventlogs 
copy c:\windows\system32\winevt\Logs\*.* eventlogs 
ipconfig /all > ipconfig.txt 
systeminfo > systeminfo.txt 
cmd.exe /c set > systemenv.txt 
regedit /e regbackup.txt 
wmic /output:bootconfig.txt bootconfig 
wmic /output:activeprocesses.txt process get name, workingsetsize 
wmic /output:Disk.txt /namespace:\\root\cimv2 path Win32_ComputerSystem get CurrentTimeZone,  Description, Domain, TotalPhysicalMemory, Model, Name, UserName 
wmic /output:ProgramList.txt product get name,version 
cd %mydir% 
mkdir profile 


@ECHO OFF 
SETLOCAL ENABLEDELAYEDEXPANSION 
SET VARCOUNT=0 

FOR /F "delims=|" %%f in ('dir /b c:\users\') DO (
SET /A VARCOUNT+=1 
SET profvar!VARCOUNT!=%%f) 

ECHO -------------------------------------- 
FOR /L %%V IN (1,1,!VARCOUNT!) DO (
ECHO  %%V - !profvar%%V! 
) 
ECHO -------------------------------------- 

SET /P SELPROF=Enter the number of the profile to copy: 

xcopy /e /y c:\users\!profvar%SELPROF%!\*.* %usbpath%\%mydir%\profile 

popd