Windows中的批处理文件在最佳情况下可能会令人困惑。
findstr "^"
等于找到一个空文件夹,当^表示行的开头时?
for /d /r %1 %%A in (.) do (
dir /ad /b "%%~fA" 2>nul | findstr "^" >nul || echo %%~fA
)
除非我读错了它,否则
dir /ad /b "%%~fA" 2>nul
找到空文件夹。
答案 0 :(得分:3)
此脚本将获取目录(及其子目录)的列表,遍历每个目录以检查子目录,然后仅列出不包含子目录的目录名称。提供的链接中的原始脚本的工作原理类似,只是它仅列出完全个空目录(不包含子目录或文件)。这是代码各部分的细分:
您的示例中的for /d
正在获得目录的递归列表:
for /d /r %1 %%A in (.) do ( )
for
循环递归到子目录for
遍历所有目录然后,for
循环中的代码将检查每个目录是否为空*:
dir /ad /b "%%~fA" 2>nul | findstr "^" >nul || echo %%~fA
dir
错误dir
找到的子目录列表通过管道传输到findstr
findstr
结果findstr
结果), *请注意:如 LotPings 所述,您提供的代码将产生与链接的示例不同的结果。 dir /a /b
列出所有文件和目录,而dir /ad /b
仅列出目录。这意味着您的脚本将列出所有不包含子目录的目录(但可能仍包含文件)。如果这是预期的行为,请忽略此注释。
编辑:进一步细分了 Ben Voigt 建议的上述命令列表。
答案 1 :(得分:2)
我相信您所缺少的是static PyObject* PyFastFile_do_concatenation(PyFastFile* self)
{
PyObject* hello = Py_BuildValue( "s", "Hello" );
PyObject* word = Py_BuildValue( "s", "word" );
// I am just guessing the `->value` property
PyObject* hello_world = hello->value + word->value;
hello_world; // return the `PyObject*` string `Hello word`
}
static PyObject* PyFastFile_do_substring(PyFastFile* self)
{
PyObject* hello = Py_BuildValue( "s", "Hello word" );
PyObject* hello_world = hello->value[5:];
hello_world; // return the `PyObject*` string `word`
}
static PyObject* PyFastFile_do_contains(PyFastFile* self)
{
PyObject* hello = Py_BuildValue( "s", "Hello word" );
if( "word" in hello->value ) {
Py_BuildValue( "p", true ); // return the `PyObject*` boolean `true`
}
Py_BuildValue( "p", false ); // return the `PyObject*` boolean `false`
}
(逻辑或)操作。
只有在前面的命令失败时,它才会在命令之后运行。
知道这一点后,||
不会寻找空目录将很有意义。由dir /ad /b "%%~fA" 2>nul | findstr "^" >nul
生成的列表不为空时,表示成功。列表为空时失败。