批处理文件:为每个子目录分配变量。

时间:2014-11-27 00:42:35

标签: batch-file wmic

我目前正在撰写帮助台批处理脚本,目前我遇到了一个问题。我希望我们的服务台人员能够被提示选择用户配置文件,一旦他们选择了用户配置文件,脚本就会将配置文件文件夹复制到指定的目录。

我遇到的问题是为每个c:\ users子文件夹分配唯一变量,这些子文件夹本质上是配置文件名称。如果我可以将它们分配给变量,那么我可以创建一个引用变量的提示菜单。我是否有正确的开始?这是我将其转换为变量的代码。我怎样才能为每个子目录执行此操作?任何帮助将不胜感激。

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

非常感谢你的帮助。使用wmic可以更有效地实现这一目标吗?

2 个答案:

答案 0 :(得分: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%!

答案 1 :(得分: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