Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.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
Batch file 正在尝试创建一个windows批处理脚本,该脚本只在文件夹中的某个特定级别的目录中循环_Batch File - Fatal编程技术网

Batch file 正在尝试创建一个windows批处理脚本,该脚本只在文件夹中的某个特定级别的目录中循环

Batch file 正在尝试创建一个windows批处理脚本,该脚本只在文件夹中的某个特定级别的目录中循环,batch-file,Batch File,我有许多excel文件嵌套在一个目录中的单独文件夹中。这些文件夹中的每一个都有任意数量的其他文件,但我只对excel文件感兴趣。我正在尝试将所有excel文件复制到一个新文件夹中 我所能创造的就是这个 对于(*.xls,*.xlsm)中的/r“C:\Folder One\Folder Two”%%f,执行@copy“%%f”C:\Users\ME\Desktop\New Excel Folder” 问题是,每个子目录可能有另外一个或两个文件夹,其中可能有也可能没有我不感兴趣的错误excel文件。

我有许多excel文件嵌套在一个目录中的单独文件夹中。这些文件夹中的每一个都有任意数量的其他文件,但我只对excel文件感兴趣。我正在尝试将所有excel文件复制到一个新文件夹中

我所能创造的就是这个

对于(*.xls,*.xlsm)中的/r“C:\Folder One\Folder Two”%%f,执行@copy“%%f”C:\Users\ME\Desktop\New Excel Folder”

问题是,每个子目录可能有另外一个或两个文件夹,其中可能有也可能没有我不感兴趣的错误excel文件。我的解决方案捕获整个目录结构中的每个excel文件

我正在寻找一种方法,只从所有第三级向下的文件夹中获取excel文件,所以c:\Folder One\Folder Two\中的所有内容都在这一级,但并没有更深的文件夹。希望这是有意义的。

@ECHO OFF
SETLOCAL
SETLOCAL ENABLEDELAYEDEXPANSION
rem源目录、目标目录、目标目录的以下设置,
rem批处理目录、文件名、输出文件名和临时文件名[如果显示]是名称
我用于测试的rem,故意包含包含空格的名称,以确保
rem确认流程使用这些名称工作。这些将需要改变,以适应您的情况。
设置“sourcedir=u:\your files\t w o”
设置“destdir=u:\your results”
对于/r“%sourcedir%”%%f in(*.xls,*.xlsm)do for/f令牌=4,5delims=\“%%q in(“%%dpf”)do IF“%%r”==”for%%e in(.xls.xlsm)do IF/i”%%e”==“%%xf”ECHO@copy”%%f“%destdir%”
后藤:EOF
我已经更改了目录名以适应我的测试设置

@copy
命令是
echo
ed,用于验证。移除
回显
以实际执行
复制

过滤过程分为两个阶段。首先,检查文件路径中的
\
字符数-
%%r
将在超过所需目录级别时非空。然后显式检查文件名是否具有所需的扩展名,因为默认情况下,
filename.xlsx
将自动生成与
.xls
匹配的短文件名


代币:

delims=\xyz”
定义了一个分隔符字符集
[“\”,“x”,“y”,“z”]
。我总是将
delims=
选项放在最后,以便出现在
delims=
之间的任何字符都包含在分隔符字符集中

正在检查的字符串被视为

[[delimiter sequence]][token1][delimiter sequence][token2][delimiter sequence][token3][delimiter sequence][token4][delimiter sequence][token5]

其中,分隔符序列是任何分隔符的序列。初始分隔符序列是可选的

因此,当
分隔符
单独设置为
\
时,一个示例字符串,
c:\Folder One\Folder Two\THIS FOLDERS AT THIS LEVEL\但是no.deeper

将被解析为

令牌1
c:

令牌2
文件夹1

令牌3
文件夹2

令牌4
此级别的这些文件夹

令牌5
但没有更深的标记

令牌6为空

但是,我发布的代码将
for…%%q
应用于
%%dpf
,而不是
%%f
%%dpnxf
%%ff
,因此要分析的字符串是
c:\Folder One\Folder Two\这一级别的这些文件夹\
,其中令牌5将为空。如果有额外的目录级别,那么令牌5将不会为空

我建议要么是引入了一个游离的分隔符,要么是正在解析
%%~dpf
以外的字符串


我从不使用
%%f
作为文件名,不管它最初的吸引力如何,因为
f
是一个元变量修饰符,并且容易出现打字错误。

您应该能够用一个
robocy
命令做任何您想做的事情,因为它有以下选项:
/LEV:n::只复制源目录树的前n级。
谢谢。今天晚些时候我需要测试一下,但它看起来很有希望!工作几乎完美!我唯一要做的改变就是把熟食店从5家换到6家。不要问我为什么,因为我不确定我是否理解这一点上的代币和熟食。只要稍加改动,它就可以正常工作。非常感谢。