首页 > 解决方案 > 尝试在 Windows 7 机器上使用批处理文件自动化简单的任务和过程控制

问题描述

我正在尝试在 Windows 7 机器上执行以下基本任务。我正在尝试执行的任务按顺序在下面列出。

  1. 要求用户输入 2 个数字。
  2. 搜索并查找文件夹是否存在。
  3. 如果文件夹不存在,则创建它。
  4. 在网络驱动器中搜索 Excel 文件。
  5. 将该excel文件复制到新创建的文件夹中。
  6. 在本地打开该 excel 文件进行编辑。

我的批处理文件代码包含在此处。它工作正常,但用户获取目录中的文件列表,然后选择要复制的文件。我遇到的问题是列出的文件不正确也不完整,只显示部分目录位置,而不是带有文件名的整个位置。我想在目录中找到所有 .xls 和 .xlsx 文件。目录和文件名的更改对命名约定没有标准,这使得搜索正确的文件变得困难。

这是我整理的一项 hack 工作,也是我第一次尝试编写批处理文件,因此人们拥有的任何帮助、提示或更改都会对我有很大帮助。我已经知道这不是好的代码或过程,所以不需要花时间告诉我。如果我知道自己在做什么,我就不会在这里寻求这样的基本帮助。

最终,我希望有一个独立的程序来使用基本的 GUI 执行此操作,但对 Python 或其他语言的了解不足以完成该项目。

删除了之前的行...

:FILE_COPY
setlocal enabledelayedexpansion
set count=0

:
:: Read in files
echo Please wait. Searching for BOM files.
for /f %%x in ('dir /s /b %filePath%\*.xls') do (
    set /a count=count+1
    set choice[!count!]=%%x
    for %%y in (!count!) do set "choice[%%y]=!choice[%%y]:%cd%\=!"
        )

echo The following files were found for PCA-%pcaNum%. 
echo Enter number of file to copy.
echo.

:
:: Print list of files
for /l %%x in (1,1,!count!) do (
     echo  %%x] !choice[%%x]!
)
echo.

:
:: Retrieve User input
set /p select=File Number: 
echo.

:
:: Print out selected filename
xcopy /v !choice[%select%]! C:\Users\dvanmeter\Desktop\CXF\%jobNum%
start !choice[%select%]!
pause
GOTO:END

:END
exit

我希望文件列表显示:

  1. 文件名1.xlsx
  2. 文件名2.xlsx

而不是下面的列表。

  1. J:......\56480\
  2. J:......\56480\09763\
  3. J:......\56480\文件\
  4. J:......\56480\文件\
  5. J:......\56480\Sales\filename.xlsx

所有这些选项都只是目录,而不是我要查找的文件。只有最后一个是文件,但不是我要查找的文件,因为此处的目录中有更多 Excel 文件,但未列出。


更新:

我现在发现,当打印出文件列表时,并没有存储带有文件名的整个目录。当代码的打印列表部分运行时,它会缩短路径并切断文件名。所以,当我选择一个文件来复制它时出错并说“找不到文件”

是什么导致文件位置列表缩短?这是固有的控制台限制吗?我知道我可以使用文本文件获取要显示的完整路径和文件名,但不确定如何在此处实现。

标签: windowsbatch-file

解决方案


for /f "delims=" %%x in ('dir /s /b %filePath%*.xls') do - JosefZ

此答案和解决方案发布在评论中,而不是答案中,因此我无法将其设置为“已回答”。我的问题已得到解决,我的批处理文件完全按照我的需要工作。

谢谢您的帮助。


推荐阅读