Bat 文件无法获取文件位置

问题描述 投票:0回答:1

这是给我错误的代码片段!

set "inputFolder=%~dp0temp"
set "outputFolder=%~dp0temp"
set "outputFile=list.txt"
if not exist temp (
    echo Input folder does not exist!
    pause
    exit /b 1
)
pushd temp
del temp\list.txt 2>nul
for %%F in (*) do (
    echo Processing: "%%F"
    echo file '%%~fF'>> temp\list.txt
)
popd
echo Completed!
pause

我有一个运行.bat文件的主文件夹,现在bat文件创建临时文件夹并在其中添加一些文件(之前在代码中完成)此代码应该创建一个文本文件,其中包含临时文件夹中的文件列表以这种格式:

file 'temp folder path\filename.ext'
但没有创建 txt 文件,它给了我以下错误:

Processing: "filename" (filename is correct which is present in temp folder)
The system cannot find the patch specified.

你们能告诉我出了什么问题吗?

我也尝试了

~dp0
(已设置)的事情,但这样做在 if 语句中失败了! 然后我尝试直接方法,而不是使用设置值,而是使用目录路径。

简而言之: 我试图创建一个文本文件,自动列出文件夹中的所有文件。

windows batch-file cmd
1个回答
0
投票

批处理文件中可以使用以下内容:

set "inputFolder=%~dp0temp"
set "outputFolder=%~dp0temp"
set "outputFile=%outputFolder%\list.txt"

pushd "%inputFolder%" 2>nul && goto ProcessFiles
echo Input folder does not exist!
pause
exit /b 1

:ProcessFiles
del /A /F "%outputFile%" 2>nul
for %%G in (*) do (
    echo Processing: "%%G"
    echo file '%%~fG'>>"%outputFile%"
)
popd
echo Completed!
pause

也可以使用:

set "inputFolder=%~dp0temp"
set "outputFolder=%~dp0temp"
set "outputFile=%outputFolder%\list.txt"

if exist "%inputFolder%\" goto ProcessFiles
echo Input folder does not exist!
pause
exit /b 1

:ProcessFiles
del /A /F "%outputFile%" 2>nul
for %%G in ("%inputFolder%\*") do (
    echo Processing: "%%~nxG"
    echo file '%%G'>>"%outputFile%"
)
echo Completed!
pause

这两个变体之间的主要区别在于,第二个变体根本不更改当前工作目录。

请阅读此答案中的问题章节。

注意: 在批处理文件目录的子目录

list.txt
中创建的文件
temp
也将列在
list.txt
中。如果驱动器使用 FAT32 或 exFAT 而不是 NTFS 作为文件系统,甚至可能会发生
list.txt
中缺少另一个文件或循环无限运行的情况。输出文件应该在不同的目录中创建,或者使用不同的 FOR 循环,首先将子目录
temp
中的所有文件名加载到
cmd.exe
处理批处理文件的内存中,然后 FOR 处理捕获的数据如下所示的文件名列表以及接下来的两个批处理文件解决方案。

另请参阅:`for` 或 `for /R` 何时枚举目录(树)?

第一个带有

list.txt
的批处理文件也在输入文件夹中以故障安全方式创建,未在列表文件中列出
list.txt

set "inputFolder=%~dp0temp"
set "outputFolder=%~dp0temp"
set "outputFile=%outputFolder%\list.txt"

pushd "%inputFolder%" 2>nul && goto ProcessFiles
echo Input folder does not exist!
pause
exit /b 1

:ProcessFiles
del /A /F "%outputFile%" 2>nul
for /F "eol=| delims=" %%G in ('dir /A-D /B /ON 2^>nul') do (
    echo Processing: "%%G"
    echo file '%%~fG'>>"%outputFile%"
)
popd
echo Completed!
pause

具有隐藏属性的文件也包含在列表中。将

/A-D
修改为
/A-D-H
以排除隐藏文件,就像 FOR 一样。

第二个带有

list.txt
的批处理文件也在输入文件夹中以故障安全方式创建,未在列表文件中列出
list.txt

set "inputFolder=%~dp0temp"
set "outputFolder=%~dp0temp"
set "outputFile=%outputFolder%\list.txt"

if exist "%inputFolder%\" goto ProcessFiles
echo Input folder does not exist!
pause
exit /b 1

:ProcessFiles
del /A /F "%outputFile%" 2>nul
for /F "eol=| delims=" %%G in ('dir "%inputFolder%\*" /A-D /B /ON 2^>nul') do (
    echo Processing: "%%~nxG"
    echo file '%%G'>>"%outputFile%"
)
echo Completed!
pause

要了解所使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完整、仔细地阅读每个命令显示的帮助页面。

  • call /?
  • del /?
  • dir /?
  • echo /?
  • endlocal /?
  • exit /?
  • for /?
  • goto /?
  • if /?
  • pause /?
  • set /?
  • setlocal /?

另请参阅:使用 Windows 批处理文件的单行多个命令,其中解释了条件命令运算符

&&

© www.soinside.com 2019 - 2024. All rights reserved.