windows Bat文件无法获取文件位置

u1ehiz5o  于 2023-08-07  发布在  Windows
关注(0)|答案(1)|浏览(167)

下面是给我错误的代码片段!

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语句!然后我尝试了直接的方法,而不是使用设置值,我使用目录路径。
简而言之:我试图创建一个文本文件,自动列出一个文件夹中的所有文件。

xdyibdwo

xdyibdwo1#

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

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


这两个变体之间的主要区别是第二个变体根本不改变当前的工作目录。
请阅读this answer中的issue章节。

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

标签:At which point does for or for /R enumerate the directory (tree)?
第一个包含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


要了解所使用的命令及其工作方式,请打开command prompt窗口,在其中执行以下命令,并仔细阅读显示的每个命令的帮助页面。

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

另请参阅:Single line with multiple commands using Windows batch file,它解释了条件命令运算符&&

相关问题