我正在尝试创建一个非常简单的批处理脚本,在这个脚本中,对于复制到一个暂存目录的每个文件,该脚本将其工作dir更改为该暂存目录,以完成一些工作:
pushd C:\Shared\
for /r %%f in (*.dll) do (
copy %%f C:\staging\.
pushd C:\staging\.
echo CWD is %cd%
REM do some work here
popd
)
popd
然而,令我惊讶的是,只完成了第一个pushd。
这是DOS/Windows批处理的已知限制吗?如果是的话,有什么快速的解决办法吗?
我已经在我所有的目录中做了一个for loop,从abcd开始,它正在工作。但是,当我在根目录中有其他文件或内容时,它会在第一个循环之后崩溃。
dir_1="./some/path1"
dir_2="./some/path2"
dir_3="./some/path3"
for f in ./abcd*;
do
[ -d $f ] && cd "$f" && echo I am inside $f
find $dir_1 -name someth
文件夹布局类似于:
根\folder1a\subfolder2a\随机mmsubfolder3a
根\folder1b\subfolder2b\随机mmsubfolder3b
根\folder1c\subfolder2c\随机mmsubfolder3c
我想删除/删除第三层深处文件夹名中的8个字符。基本上每个名字的“随机毫米”部分。有些名字里面有感叹号。我有一个循环批处理,但它只重命名第一次相遇,但没有任何进展后。这是我的代码:
cd "C:\Root"
for /D %%i in (*) do (
cd %%i
for /D %%j in (*) do (
我有许多项目(比方说D:\Projects\),每个项目都有自己的目录。在某些目录中(不是所有目录)中都有bat文件(sonar-runner.bat)。我想编写windows批处理脚本,以便为每个子文件夹依次运行此.bat文件:
for /r %%i in (sonar-runner.bat) do (
@call "%%i"
pause
)
pause
但是,使用这种方法,我面临的问题是执行内部目录中相同的文件(例如,D:\Projects\Main\Inner\sonar-runner.bat)。我不希望这种事发生。我只想通过项目文件夹来查找文件(比如说第一级的子文件夹)
我正在编写一个使用pushd命令的git别名。但是,该命令似乎没有正确展开。
OS
编辑我正在Windows 10上的WSL上运行ubuntu:
$ uname -a
Linux PowerSpecX251 4.4.0-19041-Microsoft #1237-Microsoft Sat Sep 11 14:32:00 PST 2021 x86_64 x86_64 x86_64 GNU/Linux
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.0
是否有办法在脚本末尾撤消所有pushd。我拥有的是:
pushd somwhere
rem doing stuff
goto end
:end
popd
goto :EOF
我想要的是:
setlocal
pushd somwhere
rem doing stuff
goto :EOF
但是这不起作用,目录仍然是"pushd“。另一个我不能说会发生多少pushd的尝试是:
set CurrentDir=%CD%
rem doing a lot of pushd and popd
pushd somwhere
:POPBACK
if /i not "%CD%" ==
在我一次又一次地失败以找到答案之后,我写了以下脚本:
<!-- : first Line of "JustPopdBack.cmd"-Script (a CMD+Script for Windows)
@echo off %debug%
setLocal enableExtensions
:: Copyleft 2017 Markus Merkle (aka Mäx) - Licence: GNU-GPLv3
:: --------------------------------------------------------------------------
再一次纠结于命令行,我想我可以将当前的工作目录存储在一个变量中,如下所示:
SET current=%cd%
我该如何设置父级呢?SET parent=%..%无法工作,因为它回应了%..%
基本上就是调用一个批处理脚本C:\a\b\myscript.bat,内容如下:
@echo off
set current=%cd%
echo %current%
打印C:\a\b,我想设置一个变量parent,以便在不将当前工作目录更改为..的情况下打印C:\a
这个是可能的吗?
我有一个简单的问题,关于定义文件夹的变量,并使用下面的代码进行一些操作
对于我的示例,我在脚本的开头将workdir定义为目录,然后在$dirr的一些子目录中进行一些循环,在每个循环的末尾,我需要返回到./${dir},它等于双cd ( cd ..光盘..)
#!/bin/bash
receptors= ./Receptors
dirr= /home/gleb/Documents/script
echo ${dirr}
#looping of the each pdb file in the Receptors folder
for pdb in $receptors/*.pdb; do
我有许多.zip文件和文件夹,其中有些有相同的名称。我将检查压缩文件名和文件夹名称,如果它是相同的。我将把zip文件复制到文件夹中并删除zip文件。
是否有可能使这个过程自动化?
我发现了以下代码,但无法编辑:
@echo off
setlocal EnableDelayedExpansion
pushd "C:\New folder"
FOR %%G IN (*.zip DO (
FOR /F "tokens=1 delims= " %%a IN ("%%G") do (
set "outFolder=%%a R
您好,我尝试了下面的命令来删除UNC路径中的文件
set folder="\\SERVERNAME\Publish"
cd /d %folder%
for /F "delims=" %%i in ('dir /b') do (rmdir "%%i" /s/q || del "%%i" /s/q)
但是我得到了错误的回答:
UNC paths are not supported. Defaulting to Windows Directory
不知何故,我需要使用批处理命令删除服务器共享路径中的文件。感谢您的帮助。
我需要一些帮助来写一个批处理文件。我在变量root中存储了一个路径,如下所示:
set root=D:\Work\Root
然后,我将工作目录更改为此根目录,如下所示:
cd %root%
当我从D驱动器上的任何位置执行此批处理文件时,都成功完成了此操作。但是,当我从其他驱动器执行相同的批处理文件时,cd %root%不起作用。
有没有办法从root变量中获取驱动器号?然后,我可以将当前目录更改为这个驱动器,然后cd %root%就可以工作了。
我有一个批处理文件,该文件当前将每个文件放入一个文件夹中,其中包含该文件的名称。但是,它只适用于我所在的文件夹。我希望在我的目录顶部有一个批处理文件,它将只执行文件2个子文件夹下。目录示例:
/Parent folder **This is where I want my batch file**
/Subfolder 1
/Subfolder 1A/file.jpg **Level I want batch file to execute**
/Subfolder 1B/file.mp4 **Level I want batch file to execute**
多亏了,下面的批处理文件将检查非法字符,用破折号替换它们,搜索子目录并要求一个位置参数,但是当它运行时,它会带您到参数中指定的目录。我想在驱动器/文件夹中运行批处理文件。(例如: rename.bat c:\test,这将在批处理文件运行后转到c:\test )
@@echo off
IF "%~1"=="" goto Continue
pushd %1
setlocal enabledelayedexpansion
for /r %%I in (*) do (
set "file=%%~nxI"
if "!file:
给定一个起始目录,我尝试在子目录中在.bat文件中播放一定数量的命令行。一个可行的答案是:
cd xx\yy\zz\aa
call bower install
cd ..\..\..\..\
cd mm\nn\oo\pp
call bower install
cd ..\..\..\..\
我只是觉得必须有一种更干净的方式,潜在的一条线,而不需要写第三行cd ..\..\..\..\。
编辑
我应该精确确定起始目录是未知的,这意味着.bat文件可以在不同的机器上播放。
目前我正在迭代一个文件夹中的所有文件,目前我在Sample文件夹中,我是这样做的:
@echo off
for /R %%a in ("*") do (
@echo %%a
)
pause
它列出了这样的文件:
C:\Users\-----\Desktop\Sample\mybat.bat
C:\Users\-----\Desktop\Sample\bin\1.dll
C:\Users\-----\Desktop\Sample\content\themes\2.css
我想要的是列出名称,但从我放置.bat文件的当前文件夹开始,即它应该如下所示:
Sample\myba
我们在文件'style.mfx‘中存储了更新的许可证。我们希望发送给用户,并让它以该名称替换旧文件。文件将始终位于c:中。我试过这个没有运气的演示。我想在批处理文件中硬编码targetName和replacementFile。
@echo off
set targetName=%~NX1
set replacementFile=%~F2
call :processFolder
goto :EOF
:processFolder
rem For each folder in this level
for /D %%a in (*) do (
rem Enter into it, proc