[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
回复 3# xudewu
说一说思路:
1.用for循环取得文件名并进行编号;
2.循环体外用%random%取得随机编号,在三个文件夹中按随机编号分别抽取其中一个文件;
3.合并抽取文件。

TOP

回复 1# xudewu

如果要从当前目录下所有一级文件夹中分别随机抽取一个文件(txt),进行合并,而不是指定的三个文件夹的话,可以这样:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /d %%i in (*) do (
  4.   set /a n=0
  5.   for %%a in ("%%i\*.txt") do (set /a n+=1 & set r!n!=%%~fa)
  6.   set /a s=!random!%%!n!+1
  7.   call set "Stochastic=%%r!s!%%"
  8.   type "!stochastic!">>all.txt
  9. )
  10. pause
复制代码
1

评分人数

    • xudewu: 感谢给帖子标题标注[已解决]字样技术 + 1

TOP

回复 6# Batcher

对于pushd,popd命令一直很迷茫。就知道用pushd标记路径,然后popd恢复路径。
就这里来说吧
1.“pushd %%a”标记的是当前目录的路径还是当前目录下的一级目录的路径?
2.popd前面的位置路径发生了什么变化?为什么要恢复路径?

TOP

本帖最后由 qixiaobin0715 于 2020-9-18 18:00 编辑

回复 12# Batcher

仔细进行学习,好像明白了一些。
1.“pushd %%a”标记了当前目录的下一级目录的路径(也即是内部循环体的路径)?
2.里面的for循环得到的"_!n!=%%~nxa\%%i"只是文件名及扩展名。跳出循环后,"%%_!RandNum!%%"要想和"_!n!=%%~nxa\%%i"关联,就需要回到上面标记的路径。
不知这样理解的是否正确?

TOP

回复 14# Batcher

确实理解还是有偏差,多亏提醒:
1.外部for循环第一次标记" pushd %%a" 的路径是 "当前目录\a\" ,内部的 "for /f" 循环默认在 "当前目录\a\" 运行,就不再需要指定路径。
2.下面popd恢复路径后,回到了 "当前目录\" ,又要与子文件夹"a\"下的文件关联,所以内部循环赋值时要在文件名前面加上子文件夹名,即"%%~nxa\%%i"。

TOP

本帖最后由 qixiaobin0715 于 2020-9-21 14:37 编辑

好像这里用 "cd" 指定路径也可以:
用"cd %%a" 替代 "pushd %%a"
用 "cd %~dp0" 或 "cd.." 替代 "popd"

TOP

返回列表