- Windows cm 2012.exe pole
- Muszę utworzyć plik wsadowy, nazwać go
get.bat, aby przetworzyć wszystkie wymienione katalogi, wdlist.txtktórych znajduje się ten sam katalog jakget.bat. Nazwy katalogów są po jednym w wierszu w pliku dlist.txt. dlist.txt został utworzony za pomocądir /b DIV_* > dlist.txt. Te pliki DIV_ są w rzeczywistości podkatalogami katalogu, w którym jest uruchamiany mój plik wsadowy. - Nie mogę użyć specyfikacji plików w poleceniu FOR, ponieważ
dlist.txtpo utworzeniu muszę edytować ręcznie. Nie chcę przetwarzać wszystkich katalogówDIV_*, tylko niektóre z nich. - Tworzenie
dlist.txtzadir /w DIV_* > dlist.txtpomocą oznacza, że wszystkie nazwy katalogów mają [] wokół nich i nie mogę tego używać. - Jest jeden parametr, dla
get.batktórego jest podstawową nazwą pliku, która zawiera wszystkie wyniki zfromxsfpolecenia. Rozszerzenie .txt zostanie dodane przez plik wsadowy. - Muszę wykonać wiele poleceń dla każdego
dlist.txtkatalogu, z których niektóre ustawiają tymczasową nazwę pliku o nazwie% tempoutfile%, a następnie używaną wfromxsf. - Przeczytałem kilka stron, które znalazłem w Google, w tym niektóre z Superuser, ale przykłady, które mogą działać dla cmd.exe, nie działały dla mnie. Może Windows 2012 Server jest za stary? Nie mogę tego zmienić, muszę pracować z tym, co mam.
fromxsfprzetwarzający każdy katalogdlist.txtwymaga katalogu jako jednego parametru po-cdtymczasowym pliku wyjściowym jako innego parametru, którym jest% tempoutfile%.- Wygląda na to, że nie mamy PowerShell lub przynajmniej nie ma ustalonej ścieżki.
Oto, co próbowałem za pomocą pętli FOR:
set destdir=c:\tempdir
set outfile=%destdir%\%1.txt
FOR /F %%f in ('type dlist.txt') DO (
echo "--------------------"
echo Basedir=%%f should be directory
set tempoutfile=../%%f.txt
echo outfile=%destdir%\%outfile%
echo tempoutfile=%tempoutfile%
echo Processing dir %%f, to tempfile %tempfile%
pause
rem Below is the command to process the dir name in %%f to make a temp file in %tempoutfile%
fromxsf %tempoutfile% -cd %%f +m -nbs -Rep -nofrills
if exist "%destdir%" (
echo " " >> %outfile%
echo "{DIVNAME=%i}" >> %outfile%
rem Append %tempoutfile% to %outfile%.
type %tempoutfile% >> %outfile%
del %tempoutfile%
)
)
Dla powyższego wartość %% f jest zawsze pierwszą linią pliku dlist.txt. Nie tego chcę.
W pętli wypisuję przetworzoną zawartość katalogu do pliku tymczasowego w% tempfile%, a następnie konkatenuję zawartość% tempfile% do% destdir% \% outfile%. mycommandwymaga katalogu wejściowego %% f jako arg wiersza poleceń. Po prostu nie mogę przekierować STDOUT i dołączyć wyniku do% destdir% \% outfile%.
Próbowałem kilka alternatywnych pętli FOR:
FOR %%f in (dlist.txt) DO (. W tym przypadku%%fjest to zawsze druga nazwa katalogudlist.txti nigdy się nie zmienia.
Czy ktoś wie jak to zrobić?
Dziękuję Ci!
EDYCJA: Dzięki. Zrozumiałem to za pomocą opóźnionego rozwoju i innego wpisu znalezionego za pomocą Google. Rdzeń pętli jest taki, z nazwami plików zawartymi w pliku tekstowym po dlist.txtjednej nazwie pliku w wierszu. Moim problemem była brakująca "tokens=*"opcja. Również zmienna! notacja musi być używana KAŻDY raz w pętli. Poniższa pętla zawiera również instrukcje echa pokazujące wartości zmiennych.
setlocal EnableDelayedExpansion
set outfile=c:\temp\tempout.txt
del %outfile%
FOR /f "tokens=*" %%f in (dlist.txt) DO (
echo.
echo --------------------
set indir=%%f
echo Basediv indir=!indir!
echo Processing division !indir!
echo. >> %outfile%
echo {DIVNAME=!indir!} >> %outfile%
pause
fromxsf %outfile% -cd !indir! +m -nbs -Rep -nofrills -a
)
Kluczowe problemy w mojej pętli
- Użyj
%%fzmiennej tylko raz na pętlę i przypisz ją doindir. Następnie użyj!indir!zmiennej. - Usunąłem użycie,
%tempoutfile%ponieważfromxsfpolecenie pozwala mi dołączyć dane wyjściowe z siebie (używając -a) JEŻELI plik istnieje, co robi w tym przypadku.
!variable!notację z wykrzyknikiem .