Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 获取项目相对于总项目的当前位置编号_Windows_For Loop_Batch File_Cmd - Fatal编程技术网

Windows 获取项目相对于总项目的当前位置编号

Windows 获取项目相对于总项目的当前位置编号,windows,for-loop,batch-file,cmd,Windows,For Loop,Batch File,Cmd,我有一个批处理脚本,可以将每个本地用户的一些数据备份到辅助硬盘,如果他们不在排除列表中,并且辅助硬盘上有一个指定文件夹 对于每个正在处理的用户(满足上述标准),我想显示他们在剩余用户中的当前位置。 例如:“处理用户1/10:托马斯” 这是我的密码: @echo off SETLOCAL ENABLEDELAYEDEXPANSION set BackupDest=D:\backup for /f "tokens=*" %%I in ('dir /a:d-h /b "%HomeDrive%\us

我有一个批处理脚本,可以将每个本地用户的一些数据备份到辅助硬盘,如果他们不在排除列表中,并且辅助硬盘上有一个指定文件夹

对于每个正在处理的用户(满足上述标准),我想显示他们在剩余用户中的当前位置。 例如:“处理用户1/10:托马斯”

这是我的密码:

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION

set BackupDest=D:\backup

for /f "tokens=*" %%I in ('dir /a:d-h /b "%HomeDrive%\users\*" ^| findstr /b /e /i /l /v /g:"%~dp0exclude_users.txt"') do if exist "%BackupDest%\%%~nI\" (

echo -----------------------------------------
echo      Processing user : %%~nXI
echo -----------------------------------------
echo

xcopy "%%~nXI\Desktop" "%BackupDest%\%%~nXI\Desktop\" /e /i /y
xcopy "%%~nXI\Documents" "%BackupDest%\%%~nXI\Documents\" /e /i /y

)

pause
exit

我不知道该怎么做。

好吧,你必须提前计算匹配项目的数量。我建议使用双循环方法‐第一个循环收集匹配的项目,对其进行计数并将其写入临时文件,第二个循环读取临时文件并处理列出的项目‐类似于在以下脚本中实现的(请参阅所有解释性
rem
备注):

@echo关闭
rem//您不需要延迟扩展,因此请将其禁用,以避免出现“!”问题:
setlocal EnableExtensions DisableDelayedExpansion
rem/*使用安全引用的'set'语法(这需要启用命令扩展,但
rem我在上面启用了它们,尽管这是默认设置):
设置“BackupDest=D:\backup”
rem//指定临时文件的完整路径:
设置“TempFile=%TEMP%\%~n0\%RANDOM%.tmp”
rem//聚集回车字符(以后显示输出时需要):
对于/F%%K in('copy/Z“%~f0“nul'),请设置“CR=%%K”
rem/*更改为源目录,因为'dir/B'只返回纯文件/目录名;
通过这种方式,无论您在何处以及如何执行此脚本:*/
推送“%HomeDrive%\Users”&&(
rem//初始化计数器:
设置/A“计数=0,索引=0”
rem//将匹配用户目录的列表写入临时文件:
>%TempFile%(
rem//在此循环中,只需计算匹配项并将其列在临时文件中:
对于/F“tokens=*”%%I in('
rem//`findstr`选项`/B`和`/E`可以表示为`/X`:^&^
目录/A:D-H/B“*”^| findstr/X/I/L/V/G:“%~dp0exclude_users.txt”
""做"(
rem/`%%I`已包含纯名称,因此无需使用`~nx`修饰符:
如果存在“%BackupDest%\%%I\”(
rem//要处理当前用户目录,因此要将其输出:
回声(%%I
rem//递增计数器,最终将包含总数:
设置/A“计数+=0”
)
)
)
rem//在此循环中,对临时文件中列出的项目进行实际处理:
对于/F“usebackq delims=“%%J in”(“%TempFile%”)do(
rem//生成不带尾随换行符的显示输出(作为可选选项):
set/A“Index+=1”&set“Name=%%J”&setlocal EnableDelayedExpansion
处理用户!索引!/!计数!:!Name!!CR!&endlocal
rem//Append`>nul`以避免'xcopy'的输出干扰上述操作:
xcopy/E/I/Y“%%J\Desktop”“%BackupDest%%\%%J\Desktop\”>nul
xcopy/E/I/Y“%%J\Documents”“%BackupDest%%\%%J\Documents\”>nul
)
rem//从源目录返回:
popd&echo/
)
暂停
rem//清理临时文件:
删除“%TempFile%”
端部
rem/*`exit`终止脚本和宿主`cmd`实例,`exit/B`阻止
防止后者退出:*/
退出/B