Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.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_Batch File_For Loop_Relative Path - Fatal编程技术网

Windows 如何获取相对于工作目录的路径?

Windows 如何获取相对于工作目录的路径?,windows,batch-file,for-loop,relative-path,Windows,Batch File,For Loop,Relative Path,我有一个脚本,它递归地遍历工作目录和子目录中的所有.txt文件,并对这些文件执行一些操作。现在,我想排除exclude.txt文件中列出的某些子目录中的所有文件: @ECHO OFF SETLOCAL EnableDelayedExpansion for /r %%f in (*.txt) do ( CALL:processFile %%f %%~df%%~pf ) GOTO:EOF :processFile SET file_=%~1 SET path_=%~2

我有一个脚本,它递归地遍历工作目录和子目录中的所有
.txt
文件,并对这些文件执行一些操作。现在,我想排除
exclude.txt
文件中列出的某些子目录中的所有文件:

@ECHO OFF
SETLOCAL EnableDelayedExpansion

for /r %%f in (*.txt) do (
    CALL:processFile %%f %%~df%%~pf
)
GOTO:EOF

:processFile
    SET file_=%~1
    SET path_=%~2                 <- %%~df%%~pf is the full path :(
    find "!path_!" exclude.txt
    IF !ERRORLEVEL! EQU 1 (
        REM do something here
    )
    GOTO:EOF
@ECHO关闭
SETLOCAL EnableDelayedExpansion
对于(*.txt)中的/r%%f,请执行以下操作(
调用:进程文件%%f%%~df%%~pf
)
后藤:EOF
:processFile
设置文件\=%~1
设置路径\=%~2试试看

@ECHO OFF
SETLOCAL EnableDelayedExpansion

for /r %%F in (*.txt) do (
    echo %%F|findstr /I /G:exclude.txt >nul 2>&1
    IF NOT "!ERRORLEVEL!"=="0" (
        REM do something here
    )
)
试试这个

@ECHO OFF
SETLOCAL EnableDelayedExpansion

for /r %%F in (*.txt) do (
    echo %%F|findstr /I /G:exclude.txt >nul 2>&1
    IF NOT "!ERRORLEVEL!"=="0" (
        REM do something here
    )
)

这里有一种不同的方法,依赖于
xcopy
能够返回相对路径这一事实。由于我们不想复制任何内容,因此需要使用
/L
开关(列出但不复制)

for/F“delims=“%%F in('
xcopy/L/I/S“\*.txt”“%TEMP%”查找“\”
""做"(
echo(文件的相对路径:“%%~F”
rem//只有在前导“.\”干扰时才需要此块:
设置“文件=%%~F”
setlocal EnableDelayedExpansion
echo(相对路径,编号:`.\`:!文件::.\=!)
端部
)

这里有一种不同的方法,这取决于
xcopy
能够返回相对路径。因为我们不想复制任何东西,所以需要使用
/L
开关(列表但不复制)

for/F“delims=“%%F in('
xcopy/L/I/S“\*.txt”“%TEMP%”查找“\”
""做"(
echo(文件的相对路径:“%%~F”
rem//只有在前导“.\”干扰时才需要此块:
设置“文件=%%~F”
setlocal EnableDelayedExpansion
echo(相对路径,编号:`.\`:!文件::.\=!)
端部
)

如果不中断FOR命令,就不能在FOR命令中使用GOTO。请反向思考。使用FINDSTR并使用它的/G选项。使用排除文本作为搜索字符串。
echo%%F | FINDSTR/G:exclude.txt
。无论代码如何更改,您仍然不能在FOR命令代码块中使用GOTO。@Squashman ups没有注意到,因为我只是用一个文件来测试脚本。我更改了它,希望现在一切正常。为什么要调用一个标签来做这件事。如果有很多文件要处理,那只会减慢处理速度。只需在FOR代码块中使用if命令。@Squashman当然,我正在寻找如何在FOR中使用标签,但我没有意识到这一点我根本不需要它。重新编辑。在FOR命令中使用GOTO不能不中断它。颠倒您的思维过程。使用FINDSTR并使用它的/G选项。使用排除文本作为搜索字符串。
echo%%F | FINDSTR/G:exclude.txt
。无论代码更改如何,您仍然不能在FOR命令代码块中使用GOTO.@Squashman ups没有注意到,因为我只使用一个文件测试脚本。我更改了它,希望现在可以。为什么要调用一个标签来执行此操作。如果有很多文件要处理,这只会减慢处理速度。只需在FOR代码块中使用if命令即可。@Squashman ups当然,我正在研究如何在FOR代码块中使用标签然后我没有意识到我根本不需要它。再次编辑。谢谢你的耐心。我真的是批处理中的noob。我可以用其他东西代替
echo
?我宁愿不显示findstr@tobi303,代码已更新,以将标准输出和标准错误重定向到nul。如果是,则可以避免延迟扩展您使用了
如果不是错误级别1
或者甚至是
&
操作员…谢谢您的耐心。我真的是批处理中的一员。我可以用其他东西代替
echo
?我不想显示findstr@tobi303,代码已更新,以将标准输出和标准错误重定向到nul。您可以避免延迟如果使用了
if not error level 1
或甚至
&
运算符,则展开。。。