![批量为主目录中的每个文件创建子目录](https://linux22.com/image/1536716/%E6%89%B9%E9%87%8F%E4%B8%BA%E4%B8%BB%E7%9B%AE%E5%BD%95%E4%B8%AD%E7%9A%84%E6%AF%8F%E4%B8%AA%E6%96%87%E4%BB%B6%E5%88%9B%E5%BB%BA%E5%AD%90%E7%9B%AE%E5%BD%95.png)
我有一个批处理文件,它循环遍历一个文件夹,向文件夹中的每个 CSV 插入一行文本,并生成一个计算每个文件行数的文件。
我还想在主文件夹中为每个 CSV 文件生成一个子目录,但不包含“.csv”扩展名。下面的代码似乎应该可以工作(当我将三行分离到它们自己的 bat 文件中时,它可以工作!)但在循环中,它在循环的每次迭代中都返回相同的文件夹名称值。如何使 dirname 变量使用当前值更新?
copy NUL count.txt
for %%f in (*.csv) do (
setlocal EnableDelayedExpansion
set "cmd=findstr /R /N "^^" %%f | find /C ":""
for /f %%a in ('!cmd!') do set number=%%a
echo %%f !number!>>count.txt
SET filename=%%f
SET dirname=%filename:~0,13%
mkdir %dirname%
type header.txt >%%f.new
type %%f >>%%f.new
move /y %%f.new %%f
)
答案1
在循环中,每次循环迭代都会返回文件夹名称的相同值
SET dirname=%filename:~0,13%
您需要使用延迟扩展,就像对数字所做的那样:
SET dirname=!filename:~0,13!
- Windows CMD 命令行的 AZ 索引
- Windows CMD 命令的分类列表
- 启用延迟扩展- 延迟扩展将导致变量在执行时而不是在解析时扩展。